diff --git a/.editorconfig b/.editorconfig
index 03397e46f..1a46533b6 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -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
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..ecae2d87d
--- /dev/null
+++ b/.gitattributes
@@ -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
diff --git a/Directory.Build.props b/Directory.Build.props
index c55ea9595..6203fa235 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,20 +1,33 @@
-
- Kamron Batman
- ModernUO
- 2019-2020
- netcoreapp3.1;net5.0
- x64
- x64
- 8.0
- WINDOWS
- UNIX
- true
- true
- true
- NU1603
- true
- 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
-
+
+ Kamron Batman
+ ModernUO
+ 2019-2020
+ netcoreapp3.1;net5.0
+ x64
+ x64
+ 8.0
+ WINDOWS
+ UNIX
+ true
+ true
+ true
+ NU1603
+ true
+ 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
+ Debug;Release;Analyze
+ true
+ true
+
+
+
+
+ 3.0.0
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/Projects/Server/AggressorInfo.cs b/Projects/Server/AggressorInfo.cs
index ef8df62d0..15c212dbb 100644
--- a/Projects/Server/AggressorInfo.cs
+++ b/Projects/Server/AggressorInfo.cs
@@ -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 m_Pool = new Queue();
- 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 m_Pool = new Queue();
+ 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;
+ }
+ }
+}
diff --git a/Projects/Server/Server.csproj b/Projects/Server/Server.csproj
index a62cdb7fa..622d89ee2 100644
--- a/Projects/Server/Server.csproj
+++ b/Projects/Server/Server.csproj
@@ -1,85 +1,71 @@
-
-
-
- Exe
- MUO.ico
- Server.Core
- ModernUO
-
- 0.5.0
- ModernUO Server
- ..\..\Distribution
- false
- Debug;Release;Analyze
- true
- true
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TRACE;DEBUG
- false
-
-
- true
-
-
- true
- true
- ..\..\Rules.ruleset
-
-
-
- Rules.rulest
-
-
- stylecop.json
-
-
-
-
-
-
-
-
-
- 1.1.118
- all
-
-
- 3.0.0
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
+ Exe
+ MUO.ico
+ Server.Core
+ ModernUO
+
+ 0.5.0
+ ModernUO Server
+ ..\..\Distribution
+ false
+ true
+ true
+
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TRACE;DEBUG
+ false
+
+
+ true
+
+
+ ..\..\Rules.ruleset
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/UOContent/Items/Misc/WarningItem.cs b/Projects/UOContent/Items/Misc/WarningItem.cs
index a3a50d49f..beaab3f8b 100644
--- a/Projects/UOContent/Items/Misc/WarningItem.cs
+++ b/Projects/UOContent/Items/Misc/WarningItem.cs
@@ -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 list = new List();
-
- 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 list = new List();
+
+ 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;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Misc/Waypoint.cs b/Projects/UOContent/Items/Misc/Waypoint.cs
index 581c0d2e8..0ef7e1919 100644
--- a/Projects/UOContent/Items/Misc/Waypoint.cs
+++ b/Projects/UOContent/Items/Misc/Waypoint.cs
@@ -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.");
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Misc/WindChimes.cs b/Projects/UOContent/Items/Misc/WindChimes.cs
index 33df0ea99..69ece9807 100644
--- a/Projects/UOContent/Items/Misc/WindChimes.cs
+++ b/Projects/UOContent/Items/Misc/WindChimes.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/AmeliasToolbox.cs b/Projects/UOContent/Items/New Haven Quest Rewards/AmeliasToolbox.cs
index 2ffbc440f..6d0920157 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/AmeliasToolbox.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/AmeliasToolbox.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/ArmsOfArmstrong.cs b/Projects/UOContent/Items/New Haven Quest Rewards/ArmsOfArmstrong.cs
index e0ea32cb4..70bac1a80 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/ArmsOfArmstrong.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/ArmsOfArmstrong.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/BagOfNecromancerReagents.cs b/Projects/UOContent/Items/New Haven Quest Rewards/BagOfNecromancerReagents.cs
index f6244cbf6..08d8b54aa 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/BagOfNecromancerReagents.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/BagOfNecromancerReagents.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/BagOfSmokeBombs.cs b/Projects/UOContent/Items/New Haven Quest Rewards/BagOfSmokeBombs.cs
index 52630031f..079a2db26 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/BagOfSmokeBombs.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/BagOfSmokeBombs.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/BraceletOfResilience.cs b/Projects/UOContent/Items/New Haven Quest Rewards/BraceletOfResilience.cs
index d3b404e03..42e26ad40 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/BraceletOfResilience.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/BraceletOfResilience.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/BulwarkLeggings.cs b/Projects/UOContent/Items/New Haven Quest Rewards/BulwarkLeggings.cs
index 00e123af1..1e543c0d9 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/BulwarkLeggings.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/BulwarkLeggings.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/ChurchillsWarMace.cs b/Projects/UOContent/Items/New Haven Quest Rewards/ChurchillsWarMace.cs
index 77eadb90c..efa9bc64e 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/ChurchillsWarMace.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/ChurchillsWarMace.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/ClaspOfConcentration.cs b/Projects/UOContent/Items/New Haven Quest Rewards/ClaspOfConcentration.cs
index 664067148..2df24cbaa 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/ClaspOfConcentration.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/ClaspOfConcentration.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/EmberStaff.cs b/Projects/UOContent/Items/New Haven Quest Rewards/EmberStaff.cs
index 7275b9dc3..13ccd2d38 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/EmberStaff.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/EmberStaff.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/EscutcheonDeAriadne.cs b/Projects/UOContent/Items/New Haven Quest Rewards/EscutcheonDeAriadne.cs
index 542e74bd6..39a24ae83 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/EscutcheonDeAriadne.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/EscutcheonDeAriadne.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/GlovesOfSafeguarding.cs b/Projects/UOContent/Items/New Haven Quest Rewards/GlovesOfSafeguarding.cs
index 573912b4d..9707ec7c5 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/GlovesOfSafeguarding.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/GlovesOfSafeguarding.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/HallowedSpellbook.cs b/Projects/UOContent/Items/New Haven Quest Rewards/HallowedSpellbook.cs
index 968c5727b..8472b16e8 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/HallowedSpellbook.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/HallowedSpellbook.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/HammerOfHephaestus.cs b/Projects/UOContent/Items/New Haven Quest Rewards/HammerOfHephaestus.cs
index 77242a8c7..04dcee264 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/HammerOfHephaestus.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/HammerOfHephaestus.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/HealersTouch.cs b/Projects/UOContent/Items/New Haven Quest Rewards/HealersTouch.cs
index cfbf92b1d..143ba68a9 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/HealersTouch.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/HealersTouch.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/Heartseeker.cs b/Projects/UOContent/Items/New Haven Quest Rewards/Heartseeker.cs
index 0b14154b3..b0af24072 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/Heartseeker.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/Heartseeker.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/JacobsPickaxe.cs b/Projects/UOContent/Items/New Haven Quest Rewards/JacobsPickaxe.cs
index 813990a9e..7ddf3597f 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/JacobsPickaxe.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/JacobsPickaxe.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/JocklesQuicksword.cs b/Projects/UOContent/Items/New Haven Quest Rewards/JocklesQuicksword.cs
index 7e13f3819..6d94ff815 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/JocklesQuicksword.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/JocklesQuicksword.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/PhilosophersHat.cs b/Projects/UOContent/Items/New Haven Quest Rewards/PhilosophersHat.cs
index 512053db6..6780e8d24 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/PhilosophersHat.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/PhilosophersHat.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/RecarosRiposte.cs b/Projects/UOContent/Items/New Haven Quest Rewards/RecarosRiposte.cs
index 4282c1556..2c34d0c66 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/RecarosRiposte.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/RecarosRiposte.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/RingOfTheSavant.cs b/Projects/UOContent/Items/New Haven Quest Rewards/RingOfTheSavant.cs
index e3c75115e..028c46b8f 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/RingOfTheSavant.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/RingOfTheSavant.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/SilverSerpentBlade.cs b/Projects/UOContent/Items/New Haven Quest Rewards/SilverSerpentBlade.cs
index c8004018e..7b8825397 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/SilverSerpentBlade.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/SilverSerpentBlade.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/TheDragonsTail.cs b/Projects/UOContent/Items/New Haven Quest Rewards/TheDragonsTail.cs
index 378e9f6e9..76e96b3aa 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/TheDragonsTail.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/TheDragonsTail.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/TunicOfGuarding.cs b/Projects/UOContent/Items/New Haven Quest Rewards/TunicOfGuarding.cs
index 75e5f9efa..5a2a21bd4 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/TunicOfGuarding.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/TunicOfGuarding.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/TwilightJacket.cs b/Projects/UOContent/Items/New Haven Quest Rewards/TwilightJacket.cs
index ae35e6f89..c3c1ab934 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/TwilightJacket.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/TwilightJacket.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/New Haven Quest Rewards/WalkersLeggings.cs b/Projects/UOContent/Items/New Haven Quest Rewards/WalkersLeggings.cs
index f82b5ef59..87d4fc8ca 100644
--- a/Projects/UOContent/Items/New Haven Quest Rewards/WalkersLeggings.cs
+++ b/Projects/UOContent/Items/New Haven Quest Rewards/WalkersLeggings.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/PlantsFlowers/Potted/EmptyPots.cs b/Projects/UOContent/Items/PlantsFlowers/Potted/EmptyPots.cs
index 2b813a1fb..8743c056d 100644
--- a/Projects/UOContent/Items/PlantsFlowers/Potted/EmptyPots.cs
+++ b/Projects/UOContent/Items/PlantsFlowers/Potted/EmptyPots.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/PlantsFlowers/Potted/PottedCactus.cs b/Projects/UOContent/Items/PlantsFlowers/Potted/PottedCactus.cs
index f32c45155..b70b0c1c6 100644
--- a/Projects/UOContent/Items/PlantsFlowers/Potted/PottedCactus.cs
+++ b/Projects/UOContent/Items/PlantsFlowers/Potted/PottedCactus.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/PlantsFlowers/Potted/PottedPlants.cs b/Projects/UOContent/Items/PlantsFlowers/Potted/PottedPlants.cs
index 73b6d3f23..c188388b2 100644
--- a/Projects/UOContent/Items/PlantsFlowers/Potted/PottedPlants.cs
+++ b/Projects/UOContent/Items/PlantsFlowers/Potted/PottedPlants.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/PlantsFlowers/Potted/PottedTrees.cs b/Projects/UOContent/Items/PlantsFlowers/Potted/PottedTrees.cs
index 5efec21f3..2282021c3 100644
--- a/Projects/UOContent/Items/PlantsFlowers/Potted/PottedTrees.cs
+++ b/Projects/UOContent/Items/PlantsFlowers/Potted/PottedTrees.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Quivers/BaseQuiver.cs b/Projects/UOContent/Items/Quivers/BaseQuiver.cs
index e8f5643a9..e751a2057 100644
--- a/Projects/UOContent/Items/Quivers/BaseQuiver.cs
+++ b/Projects/UOContent/Items/Quivers/BaseQuiver.cs
@@ -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
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Quivers/ElvenQuiver.cs b/Projects/UOContent/Items/Quivers/ElvenQuiver.cs
index ec6716ca0..b02776ddf 100644
--- a/Projects/UOContent/Items/Quivers/ElvenQuiver.cs
+++ b/Projects/UOContent/Items/Quivers/ElvenQuiver.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Quivers/QuiverOfBlight.cs b/Projects/UOContent/Items/Quivers/QuiverOfBlight.cs
index 7c94e14dd..0ff971e32 100644
--- a/Projects/UOContent/Items/Quivers/QuiverOfBlight.cs
+++ b/Projects/UOContent/Items/Quivers/QuiverOfBlight.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Quivers/QuiverOfFire.cs b/Projects/UOContent/Items/Quivers/QuiverOfFire.cs
index e62895f94..c4b16098e 100644
--- a/Projects/UOContent/Items/Quivers/QuiverOfFire.cs
+++ b/Projects/UOContent/Items/Quivers/QuiverOfFire.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Quivers/QuiverOfIce.cs b/Projects/UOContent/Items/Quivers/QuiverOfIce.cs
index d61ba006f..04dfe509f 100644
--- a/Projects/UOContent/Items/Quivers/QuiverOfIce.cs
+++ b/Projects/UOContent/Items/Quivers/QuiverOfIce.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Quivers/QuiverOfLightning.cs b/Projects/UOContent/Items/Quivers/QuiverOfLightning.cs
index 05a405a6a..80e1adff9 100644
--- a/Projects/UOContent/Items/Quivers/QuiverOfLightning.cs
+++ b/Projects/UOContent/Items/Quivers/QuiverOfLightning.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Resources/Arrows/Arrow.cs b/Projects/UOContent/Items/Resources/Arrows/Arrow.cs
index fdefaee2e..677f386bc 100644
--- a/Projects/UOContent/Items/Resources/Arrows/Arrow.cs
+++ b/Projects/UOContent/Items/Resources/Arrows/Arrow.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Arrows/Bolt.cs b/Projects/UOContent/Items/Resources/Arrows/Bolt.cs
index 690b35c79..9ca227b1f 100644
--- a/Projects/UOContent/Items/Resources/Arrows/Bolt.cs
+++ b/Projects/UOContent/Items/Resources/Arrows/Bolt.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Arrows/Feather.cs b/Projects/UOContent/Items/Resources/Arrows/Feather.cs
index dda7b7994..a017d5130 100644
--- a/Projects/UOContent/Items/Resources/Arrows/Feather.cs
+++ b/Projects/UOContent/Items/Resources/Arrows/Feather.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Arrows/Shaft.cs b/Projects/UOContent/Items/Resources/Arrows/Shaft.cs
index 282681ab9..04498c1f0 100644
--- a/Projects/UOContent/Items/Resources/Arrows/Shaft.cs
+++ b/Projects/UOContent/Items/Resources/Arrows/Shaft.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Blacksmithing/Ingots.cs b/Projects/UOContent/Items/Resources/Blacksmithing/Ingots.cs
index eae5b333b..bd90dc813 100644
--- a/Projects/UOContent/Items/Resources/Blacksmithing/Ingots.cs
+++ b/Projects/UOContent/Items/Resources/Blacksmithing/Ingots.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Blacksmithing/Ore.cs b/Projects/UOContent/Items/Resources/Blacksmithing/Ore.cs
index c34ddf4fb..d1aaf6654 100644
--- a/Projects/UOContent/Items/Resources/Blacksmithing/Ore.cs
+++ b/Projects/UOContent/Items/Resources/Blacksmithing/Ore.cs
@@ -1,625 +1,625 @@
-using Server.Engines.Craft;
-using Server.Mobiles;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public abstract class BaseOre : Item
- {
- private CraftResource m_Resource;
-
- public BaseOre(CraftResource resource, int amount = 1) : base(RandomSize())
- {
- Stackable = true;
- Amount = amount;
- Hue = CraftResources.GetHue(resource);
-
- m_Resource = resource;
- }
-
- public BaseOre(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.DullCopper && m_Resource <= CraftResource.Valorite)
- return 1042845 + (m_Resource - CraftResource.DullCopper);
-
- return 1042853; // iron ore;
- }
- }
-
- public abstract BaseIngot GetIngot();
-
- 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;
- }
- }
- }
-
- private static int RandomSize()
- {
- double rand = Utility.RandomDouble();
-
- if (rand < 0.12)
- return 0x19B7;
- if (rand < 0.18)
- return 0x19B8;
- if (rand < 0.25)
- return 0x19BA;
- return 0x19B9;
- }
-
- public override bool CanStackWith(Item dropped) =>
- dropped.Stackable && Stackable && dropped.GetType() == GetType() && dropped.Hue == Hue &&
- dropped.Name == Name && dropped.Amount + Amount <= 60000 && dropped != this;
-
- public override void AddNameProperty(ObjectPropertyList list)
- {
- if (Amount > 1)
- list.Add(1050039, "{0}\t#{1}", Amount, 1026583); // ~1_NUMBER~ ~2_ITEMNAME~
- else
- list.Add(1026583); // ore
- }
-
- 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 override void OnDoubleClick(Mobile from)
- {
- if (!Movable)
- return;
-
- if (RootParent is BaseCreature)
- {
- from.SendLocalizedMessage(500447); // That is not accessible
- }
- else if (from.InRange(GetWorldLocation(), 2))
- {
- from.SendLocalizedMessage(
- 501971); // Select the forge on which to smelt the ore, or another pile of ore with which to combine it.
- from.Target = new InternalTarget(this);
- }
- else
- {
- from.SendLocalizedMessage(501976); // The ore is too far away.
- }
- }
-
- private class InternalTarget : Target
- {
- private readonly BaseOre m_Ore;
-
- public InternalTarget(BaseOre ore) : base(2, false, TargetFlags.None) => m_Ore = ore;
-
- private bool IsForge(object obj)
- {
- if (Core.ML && obj is Mobile mobile && mobile.IsDeadBondedPet)
- return false;
-
- if (obj.GetType().IsDefined(typeof(ForgeAttribute), false))
- return true;
-
- int itemID = 0;
-
- if (obj is Item item)
- itemID = item.ItemID;
- else if (obj is StaticTarget target)
- itemID = target.ItemID;
-
- return itemID == 4017 || (itemID >= 6522 && itemID <= 6569);
- }
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Ore.Deleted)
- return;
-
- if (!from.InRange(m_Ore.GetWorldLocation(), 2))
- {
- from.SendLocalizedMessage(501976); // The ore is too far away.
- return;
- }
-
- if (targeted is BaseOre ore)
- {
- if (!ore.Movable) return;
- if (m_Ore == ore)
- {
- from.SendLocalizedMessage(501972); // Select another pile or ore with which to combine this.
- from.Target = new InternalTarget(ore);
- return;
- }
-
- if (ore.Resource != m_Ore.Resource)
- {
- from.SendLocalizedMessage(501979); // You cannot combine ores of different metals.
- return;
- }
-
- int worth = ore.Amount;
-
- if (ore.ItemID == 0x19B9)
- worth *= 8;
- else if (ore.ItemID == 0x19B7)
- worth *= 2;
- else
- worth *= 4;
-
- int sourceWorth = m_Ore.Amount;
-
- if (m_Ore.ItemID == 0x19B9)
- sourceWorth *= 8;
- else if (m_Ore.ItemID == 0x19B7)
- sourceWorth *= 2;
- else
- sourceWorth *= 4;
-
- worth += sourceWorth;
-
- int plusWeight = 0;
- int newID = ore.ItemID;
-
- if (ore.DefaultWeight != m_Ore.DefaultWeight)
- {
- if (ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7)
- {
- newID = 0x19B7;
- }
- else if (ore.ItemID == 0x19B9)
- {
- newID = m_Ore.ItemID;
- plusWeight = ore.Amount * 2;
- }
- else
- {
- plusWeight = m_Ore.Amount * 2;
- }
- }
-
- if ((ore.ItemID == 0x19B9 && worth > 120000) ||
- ((ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA) && worth > 60000) ||
- (ore.ItemID == 0x19B7 && worth > 30000))
- {
- from.SendLocalizedMessage(1062844); // There is too much ore to combine.
- return;
- }
-
- if (ore.RootParent is Mobile mobile &&
- plusWeight + mobile.Backpack.TotalWeight > mobile.Backpack.MaxWeight)
- {
- from.SendLocalizedMessage(501978); // The weight is too great to combine in a container.
- return;
- }
-
- ore.ItemID = newID;
-
- if (ore.ItemID == 0x19B9)
- ore.Amount = worth / 8;
- else if (ore.ItemID == 0x19B7)
- ore.Amount = worth / 2;
- else
- ore.Amount = worth / 4;
-
- m_Ore.Delete();
- return;
- }
-
- if (IsForge(targeted))
- {
- var difficulty = m_Ore.Resource switch
- {
- CraftResource.DullCopper => 65.0,
- CraftResource.ShadowIron => 70.0,
- CraftResource.Copper => 75.0,
- CraftResource.Bronze => 80.0,
- CraftResource.Gold => 85.0,
- CraftResource.Agapite => 90.0,
- CraftResource.Verite => 95.0,
- CraftResource.Valorite => 99.0,
- _ => 50.0
- };
-
- double minSkill = difficulty - 25.0;
- double maxSkill = difficulty + 25.0;
-
- if (difficulty > 50.0 && difficulty > from.Skills.Mining.Value)
- {
- from.SendLocalizedMessage(501986); // You have no idea how to smelt this strange ore!
- return;
- }
-
- if (m_Ore.ItemID == 0x19B7 && m_Ore.Amount < 2)
- {
- from.SendLocalizedMessage(
- 501987); // There is not enough metal-bearing ore in this pile to make an ingot.
- return;
- }
-
- if (from.CheckTargetSkill(SkillName.Mining, targeted, minSkill, maxSkill))
- {
- int toConsume = m_Ore.Amount;
-
- if (toConsume <= 0)
- {
- from.SendLocalizedMessage(
- 501987); // There is not enough metal-bearing ore in this pile to make an ingot.
- }
- else
- {
- if (toConsume > 30000)
- toConsume = 30000;
-
- int ingotAmount;
-
- if (m_Ore.ItemID == 0x19B7)
- {
- ingotAmount = toConsume / 2;
-
- if (toConsume % 2 != 0)
- --toConsume;
- }
- else if (m_Ore.ItemID == 0x19B9)
- {
- ingotAmount = toConsume * 2;
- }
- else
- {
- ingotAmount = toConsume;
- }
-
- BaseIngot ingot = m_Ore.GetIngot();
- ingot.Amount = ingotAmount;
-
- m_Ore.Consume(toConsume);
- from.AddToBackpack(ingot);
- // from.PlaySound( 0x57 );
-
- from.SendLocalizedMessage(
- 501988); // You smelt the ore removing the impurities and put the metal in your backpack.
- }
- }
- else
- {
- if (m_Ore.Amount < 2)
- {
- if (m_Ore.ItemID == 0x19B9)
- m_Ore.ItemID = 0x19B8;
- else
- m_Ore.ItemID = 0x19B7;
- }
- else
- {
- m_Ore.Amount /= 2;
- }
-
- from.SendLocalizedMessage(
- 501990); // You burn away the impurities but are left with less useable metal.
- }
- }
- }
- }
- }
-
- public class IronOre : BaseOre
- {
- [Constructible]
- public IronOre(int amount = 1) : base(CraftResource.Iron, amount)
- {
- }
-
- public IronOre(bool fixedSize) : this()
- {
- if (fixedSize)
- ItemID = 0x19B8;
- }
-
- public IronOre(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 BaseIngot GetIngot() => new IronIngot();
- }
-
- public class DullCopperOre : BaseOre
- {
- [Constructible]
- public DullCopperOre(int amount = 1) : base(CraftResource.DullCopper, amount)
- {
- }
-
- public DullCopperOre(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 BaseIngot GetIngot() => new DullCopperIngot();
- }
-
- public class ShadowIronOre : BaseOre
- {
- [Constructible]
- public ShadowIronOre(int amount = 1) : base(CraftResource.ShadowIron, amount)
- {
- }
-
- public ShadowIronOre(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 BaseIngot GetIngot() => new ShadowIronIngot();
- }
-
- public class CopperOre : BaseOre
- {
- [Constructible]
- public CopperOre(int amount = 1) : base(CraftResource.Copper, amount)
- {
- }
-
- public CopperOre(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 BaseIngot GetIngot() => new CopperIngot();
- }
-
- public class BronzeOre : BaseOre
- {
- [Constructible]
- public BronzeOre(int amount = 1) : base(CraftResource.Bronze, amount)
- {
- }
-
- public BronzeOre(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 BaseIngot GetIngot() => new BronzeIngot();
- }
-
- public class GoldOre : BaseOre
- {
- [Constructible]
- public GoldOre(int amount = 1) : base(CraftResource.Gold, amount)
- {
- }
-
- public GoldOre(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 BaseIngot GetIngot() => new GoldIngot();
- }
-
- public class AgapiteOre : BaseOre
- {
- [Constructible]
- public AgapiteOre(int amount = 1) : base(CraftResource.Agapite, amount)
- {
- }
-
- public AgapiteOre(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 BaseIngot GetIngot() => new AgapiteIngot();
- }
-
- public class VeriteOre : BaseOre
- {
- [Constructible]
- public VeriteOre(int amount = 1) : base(CraftResource.Verite, amount)
- {
- }
-
- public VeriteOre(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 BaseIngot GetIngot() => new VeriteIngot();
- }
-
- public class ValoriteOre : BaseOre
- {
- [Constructible]
- public ValoriteOre(int amount = 1) : base(CraftResource.Valorite, amount)
- {
- }
-
- public ValoriteOre(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 BaseIngot GetIngot() => new ValoriteIngot();
- }
-}
+using Server.Engines.Craft;
+using Server.Mobiles;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public abstract class BaseOre : Item
+ {
+ private CraftResource m_Resource;
+
+ public BaseOre(CraftResource resource, int amount = 1) : base(RandomSize())
+ {
+ Stackable = true;
+ Amount = amount;
+ Hue = CraftResources.GetHue(resource);
+
+ m_Resource = resource;
+ }
+
+ public BaseOre(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.DullCopper && m_Resource <= CraftResource.Valorite)
+ return 1042845 + (m_Resource - CraftResource.DullCopper);
+
+ return 1042853; // iron ore;
+ }
+ }
+
+ public abstract BaseIngot GetIngot();
+
+ 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;
+ }
+ }
+ }
+
+ private static int RandomSize()
+ {
+ double rand = Utility.RandomDouble();
+
+ if (rand < 0.12)
+ return 0x19B7;
+ if (rand < 0.18)
+ return 0x19B8;
+ if (rand < 0.25)
+ return 0x19BA;
+ return 0x19B9;
+ }
+
+ public override bool CanStackWith(Item dropped) =>
+ dropped.Stackable && Stackable && dropped.GetType() == GetType() && dropped.Hue == Hue &&
+ dropped.Name == Name && dropped.Amount + Amount <= 60000 && dropped != this;
+
+ public override void AddNameProperty(ObjectPropertyList list)
+ {
+ if (Amount > 1)
+ list.Add(1050039, "{0}\t#{1}", Amount, 1026583); // ~1_NUMBER~ ~2_ITEMNAME~
+ else
+ list.Add(1026583); // ore
+ }
+
+ 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 override void OnDoubleClick(Mobile from)
+ {
+ if (!Movable)
+ return;
+
+ if (RootParent is BaseCreature)
+ {
+ from.SendLocalizedMessage(500447); // That is not accessible
+ }
+ else if (from.InRange(GetWorldLocation(), 2))
+ {
+ from.SendLocalizedMessage(
+ 501971); // Select the forge on which to smelt the ore, or another pile of ore with which to combine it.
+ from.Target = new InternalTarget(this);
+ }
+ else
+ {
+ from.SendLocalizedMessage(501976); // The ore is too far away.
+ }
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly BaseOre m_Ore;
+
+ public InternalTarget(BaseOre ore) : base(2, false, TargetFlags.None) => m_Ore = ore;
+
+ private bool IsForge(object obj)
+ {
+ if (Core.ML && obj is Mobile mobile && mobile.IsDeadBondedPet)
+ return false;
+
+ if (obj.GetType().IsDefined(typeof(ForgeAttribute), false))
+ return true;
+
+ int itemID = 0;
+
+ if (obj is Item item)
+ itemID = item.ItemID;
+ else if (obj is StaticTarget target)
+ itemID = target.ItemID;
+
+ return itemID == 4017 || (itemID >= 6522 && itemID <= 6569);
+ }
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Ore.Deleted)
+ return;
+
+ if (!from.InRange(m_Ore.GetWorldLocation(), 2))
+ {
+ from.SendLocalizedMessage(501976); // The ore is too far away.
+ return;
+ }
+
+ if (targeted is BaseOre ore)
+ {
+ if (!ore.Movable) return;
+ if (m_Ore == ore)
+ {
+ from.SendLocalizedMessage(501972); // Select another pile or ore with which to combine this.
+ from.Target = new InternalTarget(ore);
+ return;
+ }
+
+ if (ore.Resource != m_Ore.Resource)
+ {
+ from.SendLocalizedMessage(501979); // You cannot combine ores of different metals.
+ return;
+ }
+
+ int worth = ore.Amount;
+
+ if (ore.ItemID == 0x19B9)
+ worth *= 8;
+ else if (ore.ItemID == 0x19B7)
+ worth *= 2;
+ else
+ worth *= 4;
+
+ int sourceWorth = m_Ore.Amount;
+
+ if (m_Ore.ItemID == 0x19B9)
+ sourceWorth *= 8;
+ else if (m_Ore.ItemID == 0x19B7)
+ sourceWorth *= 2;
+ else
+ sourceWorth *= 4;
+
+ worth += sourceWorth;
+
+ int plusWeight = 0;
+ int newID = ore.ItemID;
+
+ if (ore.DefaultWeight != m_Ore.DefaultWeight)
+ {
+ if (ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7)
+ {
+ newID = 0x19B7;
+ }
+ else if (ore.ItemID == 0x19B9)
+ {
+ newID = m_Ore.ItemID;
+ plusWeight = ore.Amount * 2;
+ }
+ else
+ {
+ plusWeight = m_Ore.Amount * 2;
+ }
+ }
+
+ if ((ore.ItemID == 0x19B9 && worth > 120000) ||
+ ((ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA) && worth > 60000) ||
+ (ore.ItemID == 0x19B7 && worth > 30000))
+ {
+ from.SendLocalizedMessage(1062844); // There is too much ore to combine.
+ return;
+ }
+
+ if (ore.RootParent is Mobile mobile &&
+ plusWeight + mobile.Backpack.TotalWeight > mobile.Backpack.MaxWeight)
+ {
+ from.SendLocalizedMessage(501978); // The weight is too great to combine in a container.
+ return;
+ }
+
+ ore.ItemID = newID;
+
+ if (ore.ItemID == 0x19B9)
+ ore.Amount = worth / 8;
+ else if (ore.ItemID == 0x19B7)
+ ore.Amount = worth / 2;
+ else
+ ore.Amount = worth / 4;
+
+ m_Ore.Delete();
+ return;
+ }
+
+ if (IsForge(targeted))
+ {
+ var difficulty = m_Ore.Resource switch
+ {
+ CraftResource.DullCopper => 65.0,
+ CraftResource.ShadowIron => 70.0,
+ CraftResource.Copper => 75.0,
+ CraftResource.Bronze => 80.0,
+ CraftResource.Gold => 85.0,
+ CraftResource.Agapite => 90.0,
+ CraftResource.Verite => 95.0,
+ CraftResource.Valorite => 99.0,
+ _ => 50.0
+ };
+
+ double minSkill = difficulty - 25.0;
+ double maxSkill = difficulty + 25.0;
+
+ if (difficulty > 50.0 && difficulty > from.Skills.Mining.Value)
+ {
+ from.SendLocalizedMessage(501986); // You have no idea how to smelt this strange ore!
+ return;
+ }
+
+ if (m_Ore.ItemID == 0x19B7 && m_Ore.Amount < 2)
+ {
+ from.SendLocalizedMessage(
+ 501987); // There is not enough metal-bearing ore in this pile to make an ingot.
+ return;
+ }
+
+ if (from.CheckTargetSkill(SkillName.Mining, targeted, minSkill, maxSkill))
+ {
+ int toConsume = m_Ore.Amount;
+
+ if (toConsume <= 0)
+ {
+ from.SendLocalizedMessage(
+ 501987); // There is not enough metal-bearing ore in this pile to make an ingot.
+ }
+ else
+ {
+ if (toConsume > 30000)
+ toConsume = 30000;
+
+ int ingotAmount;
+
+ if (m_Ore.ItemID == 0x19B7)
+ {
+ ingotAmount = toConsume / 2;
+
+ if (toConsume % 2 != 0)
+ --toConsume;
+ }
+ else if (m_Ore.ItemID == 0x19B9)
+ {
+ ingotAmount = toConsume * 2;
+ }
+ else
+ {
+ ingotAmount = toConsume;
+ }
+
+ BaseIngot ingot = m_Ore.GetIngot();
+ ingot.Amount = ingotAmount;
+
+ m_Ore.Consume(toConsume);
+ from.AddToBackpack(ingot);
+ // from.PlaySound( 0x57 );
+
+ from.SendLocalizedMessage(
+ 501988); // You smelt the ore removing the impurities and put the metal in your backpack.
+ }
+ }
+ else
+ {
+ if (m_Ore.Amount < 2)
+ {
+ if (m_Ore.ItemID == 0x19B9)
+ m_Ore.ItemID = 0x19B8;
+ else
+ m_Ore.ItemID = 0x19B7;
+ }
+ else
+ {
+ m_Ore.Amount /= 2;
+ }
+
+ from.SendLocalizedMessage(
+ 501990); // You burn away the impurities but are left with less useable metal.
+ }
+ }
+ }
+ }
+ }
+
+ public class IronOre : BaseOre
+ {
+ [Constructible]
+ public IronOre(int amount = 1) : base(CraftResource.Iron, amount)
+ {
+ }
+
+ public IronOre(bool fixedSize) : this()
+ {
+ if (fixedSize)
+ ItemID = 0x19B8;
+ }
+
+ public IronOre(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 BaseIngot GetIngot() => new IronIngot();
+ }
+
+ public class DullCopperOre : BaseOre
+ {
+ [Constructible]
+ public DullCopperOre(int amount = 1) : base(CraftResource.DullCopper, amount)
+ {
+ }
+
+ public DullCopperOre(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 BaseIngot GetIngot() => new DullCopperIngot();
+ }
+
+ public class ShadowIronOre : BaseOre
+ {
+ [Constructible]
+ public ShadowIronOre(int amount = 1) : base(CraftResource.ShadowIron, amount)
+ {
+ }
+
+ public ShadowIronOre(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 BaseIngot GetIngot() => new ShadowIronIngot();
+ }
+
+ public class CopperOre : BaseOre
+ {
+ [Constructible]
+ public CopperOre(int amount = 1) : base(CraftResource.Copper, amount)
+ {
+ }
+
+ public CopperOre(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 BaseIngot GetIngot() => new CopperIngot();
+ }
+
+ public class BronzeOre : BaseOre
+ {
+ [Constructible]
+ public BronzeOre(int amount = 1) : base(CraftResource.Bronze, amount)
+ {
+ }
+
+ public BronzeOre(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 BaseIngot GetIngot() => new BronzeIngot();
+ }
+
+ public class GoldOre : BaseOre
+ {
+ [Constructible]
+ public GoldOre(int amount = 1) : base(CraftResource.Gold, amount)
+ {
+ }
+
+ public GoldOre(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 BaseIngot GetIngot() => new GoldIngot();
+ }
+
+ public class AgapiteOre : BaseOre
+ {
+ [Constructible]
+ public AgapiteOre(int amount = 1) : base(CraftResource.Agapite, amount)
+ {
+ }
+
+ public AgapiteOre(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 BaseIngot GetIngot() => new AgapiteIngot();
+ }
+
+ public class VeriteOre : BaseOre
+ {
+ [Constructible]
+ public VeriteOre(int amount = 1) : base(CraftResource.Verite, amount)
+ {
+ }
+
+ public VeriteOre(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 BaseIngot GetIngot() => new VeriteIngot();
+ }
+
+ public class ValoriteOre : BaseOre
+ {
+ [Constructible]
+ public ValoriteOre(int amount = 1) : base(CraftResource.Valorite, amount)
+ {
+ }
+
+ public ValoriteOre(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 BaseIngot GetIngot() => new ValoriteIngot();
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Blacksmithing/Scales.cs b/Projects/UOContent/Items/Resources/Blacksmithing/Scales.cs
index 6724955f0..b04401d25 100644
--- a/Projects/UOContent/Items/Resources/Blacksmithing/Scales.cs
+++ b/Projects/UOContent/Items/Resources/Blacksmithing/Scales.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Fishing/BigFish.cs b/Projects/UOContent/Items/Resources/Fishing/BigFish.cs
index 89602108a..7a71b6993 100644
--- a/Projects/UOContent/Items/Resources/Fishing/BigFish.cs
+++ b/Projects/UOContent/Items/Resources/Fishing/BigFish.cs
@@ -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;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Fishing/Fish.cs b/Projects/UOContent/Items/Resources/Fishing/Fish.cs
index 58c9457d2..7e51b8cd0 100644
--- a/Projects/UOContent/Items/Resources/Fishing/Fish.cs
+++ b/Projects/UOContent/Items/Resources/Fishing/Fish.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Fishing/MagicFish.cs b/Projects/UOContent/Items/Resources/Fishing/MagicFish.cs
index e7f807541..98154a223 100644
--- a/Projects/UOContent/Items/Resources/Fishing/MagicFish.cs
+++ b/Projects/UOContent/Items/Resources/Fishing/MagicFish.cs
@@ -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;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Resources/Masonry/Granite.cs b/Projects/UOContent/Items/Resources/Masonry/Granite.cs
index 6a030dfb7..95ceea954 100644
--- a/Projects/UOContent/Items/Resources/Masonry/Granite.cs
+++ b/Projects/UOContent/Items/Resources/Masonry/Granite.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Resources/MiscMLResources.cs b/Projects/UOContent/Items/Resources/MiscMLResources.cs
index 7107777fd..4019e4dcc 100644
--- a/Projects/UOContent/Items/Resources/MiscMLResources.cs
+++ b/Projects/UOContent/Items/Resources/MiscMLResources.cs
@@ -1,883 +1,883 @@
-namespace Server.Items
-{
- public class Blight : Item
- {
- [Constructible]
- public Blight(int amount = 1)
- : base(0x3183)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public Blight(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 LuminescentFungi : Item
- {
- [Constructible]
- public LuminescentFungi(int amount = 1)
- : base(0x3191)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public LuminescentFungi(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 CapturedEssence : Item
- {
- [Constructible]
- public CapturedEssence(int amount = 1)
- : base(0x318E)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public CapturedEssence(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 EyeOfTheTravesty : Item
- {
- [Constructible]
- public EyeOfTheTravesty(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public EyeOfTheTravesty(int amount = 1)
- : base(0x318D)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public EyeOfTheTravesty(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 Corruption : Item
- {
- [Constructible]
- public Corruption(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public Corruption(int amount = 1)
- : base(0x3184)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public Corruption(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 DreadHornMane : Item
- {
- [Constructible]
- public DreadHornMane(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public DreadHornMane(int amount = 1)
- : base(0x318A)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public DreadHornMane(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 ParasiticPlant : Item
- {
- [Constructible]
- public ParasiticPlant(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public ParasiticPlant(int amount = 1)
- : base(0x3190)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public ParasiticPlant(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 Muculent : Item
- {
- [Constructible]
- public Muculent(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public Muculent(int amount = 1)
- : base(0x3188)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public Muculent(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 DiseasedBark : Item
- {
- [Constructible]
- public DiseasedBark(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public DiseasedBark(int amount = 1)
- : base(0x318B)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public DiseasedBark(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 BarkFragment : Item
- {
- [Constructible]
- public BarkFragment(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public BarkFragment(int amount = 1)
- : base(0x318F)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public BarkFragment(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 GrizzledBones : Item
- {
- [Constructible]
- public GrizzledBones(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public GrizzledBones(int amount = 1)
- : base(0x318C)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public GrizzledBones(Serial serial)
- : base(serial)
- {
- }
-
- 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 <= 0 && ItemID == 0x318F)
- ItemID = 0x318C;
- }
- }
-
- public class LardOfParoxysmus : Item
- {
- [Constructible]
- public LardOfParoxysmus(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public LardOfParoxysmus(int amount = 1)
- : base(0x3189)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public LardOfParoxysmus(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 PerfectEmerald : Item
- {
- [Constructible]
- public PerfectEmerald(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public PerfectEmerald(int amount = 1)
- : base(0x3194)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public PerfectEmerald(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 DarkSapphire : Item
- {
- [Constructible]
- public DarkSapphire(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public DarkSapphire(int amount = 1)
- : base(0x3192)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public DarkSapphire(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 Turquoise : Item
- {
- [Constructible]
- public Turquoise(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public Turquoise(int amount = 1)
- : base(0x3193)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public Turquoise(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 EcruCitrine : Item
- {
- [Constructible]
- public EcruCitrine(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public EcruCitrine(int amount = 1)
- : base(0x3195)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public EcruCitrine(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 WhitePearl : Item
- {
- [Constructible]
- public WhitePearl(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public WhitePearl(int amount = 1)
- : base(0x3196)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public WhitePearl(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 FireRuby : Item
- {
- [Constructible]
- public FireRuby(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public FireRuby(int amount = 1)
- : base(0x3197)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public FireRuby(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 BlueDiamond : Item
- {
- [Constructible]
- public BlueDiamond(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public BlueDiamond(int amount = 1)
- : base(0x3198)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public BlueDiamond(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 BrilliantAmber : Item
- {
- [Constructible]
- public BrilliantAmber(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public BrilliantAmber(int amount = 1)
- : base(0x3199)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public BrilliantAmber(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 Scourge : Item
- {
- [Constructible]
- public Scourge(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public Scourge(int amount = 1)
- : base(0x3185)
- {
- Stackable = true;
- Amount = amount;
- Hue = 150;
- }
-
- public Scourge(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 Putrefication : Item
- {
- [Constructible]
- public Putrefication(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public Putrefication(int amount = 1)
- : base(0x3186)
- {
- Stackable = true;
- Amount = amount;
- Hue = 883;
- }
-
- public Putrefication(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 Taint : Item
- {
- [Constructible]
- public Taint(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public Taint(int amount = 1)
- : base(0x3187)
- {
- Stackable = true;
- Amount = amount;
- Hue = 731;
- }
-
- public Taint(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(0x315A, 0x315B)]
- public class PristineDreadHorn : Item
- {
- [Constructible]
- public PristineDreadHorn()
- : base(0x315A)
- {
- }
-
- public PristineDreadHorn(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 SwitchItem : Item
- {
- [Constructible]
- public SwitchItem(int amountFrom, int amountTo)
- : this(Utility.RandomMinMax(amountFrom, amountTo))
- {
- }
-
- [Constructible]
- public SwitchItem(int amount = 1)
- : base(0x2F5F)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public SwitchItem(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 Blight : Item
+ {
+ [Constructible]
+ public Blight(int amount = 1)
+ : base(0x3183)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public Blight(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 LuminescentFungi : Item
+ {
+ [Constructible]
+ public LuminescentFungi(int amount = 1)
+ : base(0x3191)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public LuminescentFungi(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 CapturedEssence : Item
+ {
+ [Constructible]
+ public CapturedEssence(int amount = 1)
+ : base(0x318E)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public CapturedEssence(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 EyeOfTheTravesty : Item
+ {
+ [Constructible]
+ public EyeOfTheTravesty(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public EyeOfTheTravesty(int amount = 1)
+ : base(0x318D)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public EyeOfTheTravesty(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 Corruption : Item
+ {
+ [Constructible]
+ public Corruption(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public Corruption(int amount = 1)
+ : base(0x3184)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public Corruption(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 DreadHornMane : Item
+ {
+ [Constructible]
+ public DreadHornMane(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public DreadHornMane(int amount = 1)
+ : base(0x318A)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public DreadHornMane(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 ParasiticPlant : Item
+ {
+ [Constructible]
+ public ParasiticPlant(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public ParasiticPlant(int amount = 1)
+ : base(0x3190)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public ParasiticPlant(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 Muculent : Item
+ {
+ [Constructible]
+ public Muculent(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public Muculent(int amount = 1)
+ : base(0x3188)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public Muculent(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 DiseasedBark : Item
+ {
+ [Constructible]
+ public DiseasedBark(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public DiseasedBark(int amount = 1)
+ : base(0x318B)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public DiseasedBark(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 BarkFragment : Item
+ {
+ [Constructible]
+ public BarkFragment(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public BarkFragment(int amount = 1)
+ : base(0x318F)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public BarkFragment(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 GrizzledBones : Item
+ {
+ [Constructible]
+ public GrizzledBones(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public GrizzledBones(int amount = 1)
+ : base(0x318C)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public GrizzledBones(Serial serial)
+ : base(serial)
+ {
+ }
+
+ 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 <= 0 && ItemID == 0x318F)
+ ItemID = 0x318C;
+ }
+ }
+
+ public class LardOfParoxysmus : Item
+ {
+ [Constructible]
+ public LardOfParoxysmus(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public LardOfParoxysmus(int amount = 1)
+ : base(0x3189)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public LardOfParoxysmus(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 PerfectEmerald : Item
+ {
+ [Constructible]
+ public PerfectEmerald(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public PerfectEmerald(int amount = 1)
+ : base(0x3194)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public PerfectEmerald(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 DarkSapphire : Item
+ {
+ [Constructible]
+ public DarkSapphire(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public DarkSapphire(int amount = 1)
+ : base(0x3192)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public DarkSapphire(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 Turquoise : Item
+ {
+ [Constructible]
+ public Turquoise(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public Turquoise(int amount = 1)
+ : base(0x3193)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public Turquoise(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 EcruCitrine : Item
+ {
+ [Constructible]
+ public EcruCitrine(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public EcruCitrine(int amount = 1)
+ : base(0x3195)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public EcruCitrine(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 WhitePearl : Item
+ {
+ [Constructible]
+ public WhitePearl(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public WhitePearl(int amount = 1)
+ : base(0x3196)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public WhitePearl(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 FireRuby : Item
+ {
+ [Constructible]
+ public FireRuby(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public FireRuby(int amount = 1)
+ : base(0x3197)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public FireRuby(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 BlueDiamond : Item
+ {
+ [Constructible]
+ public BlueDiamond(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public BlueDiamond(int amount = 1)
+ : base(0x3198)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public BlueDiamond(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 BrilliantAmber : Item
+ {
+ [Constructible]
+ public BrilliantAmber(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public BrilliantAmber(int amount = 1)
+ : base(0x3199)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public BrilliantAmber(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 Scourge : Item
+ {
+ [Constructible]
+ public Scourge(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public Scourge(int amount = 1)
+ : base(0x3185)
+ {
+ Stackable = true;
+ Amount = amount;
+ Hue = 150;
+ }
+
+ public Scourge(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 Putrefication : Item
+ {
+ [Constructible]
+ public Putrefication(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public Putrefication(int amount = 1)
+ : base(0x3186)
+ {
+ Stackable = true;
+ Amount = amount;
+ Hue = 883;
+ }
+
+ public Putrefication(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 Taint : Item
+ {
+ [Constructible]
+ public Taint(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public Taint(int amount = 1)
+ : base(0x3187)
+ {
+ Stackable = true;
+ Amount = amount;
+ Hue = 731;
+ }
+
+ public Taint(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(0x315A, 0x315B)]
+ public class PristineDreadHorn : Item
+ {
+ [Constructible]
+ public PristineDreadHorn()
+ : base(0x315A)
+ {
+ }
+
+ public PristineDreadHorn(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 SwitchItem : Item
+ {
+ [Constructible]
+ public SwitchItem(int amountFrom, int amountTo)
+ : this(Utility.RandomMinMax(amountFrom, amountTo))
+ {
+ }
+
+ [Constructible]
+ public SwitchItem(int amount = 1)
+ : base(0x2F5F)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public SwitchItem(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/BagOfAllReagents.cs b/Projects/UOContent/Items/Resources/Reagents/BagOfAllReagents.cs
index d53f31c46..b15b38f8d 100644
--- a/Projects/UOContent/Items/Resources/Reagents/BagOfAllReagents.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/BagOfAllReagents.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/BagOfNecroReagents.cs b/Projects/UOContent/Items/Resources/Reagents/BagOfNecroReagents.cs
index 50c09ee10..b973d857f 100644
--- a/Projects/UOContent/Items/Resources/Reagents/BagOfNecroReagents.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/BagOfNecroReagents.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/BagOfReagents.cs b/Projects/UOContent/Items/Resources/Reagents/BagOfReagents.cs
index 9e0bce00f..8133dfea3 100644
--- a/Projects/UOContent/Items/Resources/Reagents/BagOfReagents.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/BagOfReagents.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/BaseReagent.cs b/Projects/UOContent/Items/Resources/Reagents/BaseReagent.cs
index 8d42a62c6..cd7651a74 100644
--- a/Projects/UOContent/Items/Resources/Reagents/BaseReagent.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/BaseReagent.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Resources/Reagents/BatWing.cs b/Projects/UOContent/Items/Resources/Reagents/BatWing.cs
index 5b9b2f629..e3d60bbee 100644
--- a/Projects/UOContent/Items/Resources/Reagents/BatWing.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/BatWing.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/BlackPearl.cs b/Projects/UOContent/Items/Resources/Reagents/BlackPearl.cs
index 2cbab0568..17a73c80c 100644
--- a/Projects/UOContent/Items/Resources/Reagents/BlackPearl.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/BlackPearl.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/Bloodmoss.cs b/Projects/UOContent/Items/Resources/Reagents/Bloodmoss.cs
index cb02b9805..b458f2b3d 100644
--- a/Projects/UOContent/Items/Resources/Reagents/Bloodmoss.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/Bloodmoss.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/DaemonBlood.cs b/Projects/UOContent/Items/Resources/Reagents/DaemonBlood.cs
index d455556e3..7a8e06e52 100644
--- a/Projects/UOContent/Items/Resources/Reagents/DaemonBlood.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/DaemonBlood.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/DaemonBone.cs b/Projects/UOContent/Items/Resources/Reagents/DaemonBone.cs
index 6395910ca..811836a3a 100644
--- a/Projects/UOContent/Items/Resources/Reagents/DaemonBone.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/DaemonBone.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/DeadWood.cs b/Projects/UOContent/Items/Resources/Reagents/DeadWood.cs
index e2d608bc0..bf3467528 100644
--- a/Projects/UOContent/Items/Resources/Reagents/DeadWood.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/DeadWood.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/Garlic.cs b/Projects/UOContent/Items/Resources/Reagents/Garlic.cs
index fa717e240..3b56081f8 100644
--- a/Projects/UOContent/Items/Resources/Reagents/Garlic.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/Garlic.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/Ginseng.cs b/Projects/UOContent/Items/Resources/Reagents/Ginseng.cs
index 3334a770d..752bf4a55 100644
--- a/Projects/UOContent/Items/Resources/Reagents/Ginseng.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/Ginseng.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/GraveDust.cs b/Projects/UOContent/Items/Resources/Reagents/GraveDust.cs
index 139c00f60..303303207 100644
--- a/Projects/UOContent/Items/Resources/Reagents/GraveDust.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/GraveDust.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/MandrakeRoot.cs b/Projects/UOContent/Items/Resources/Reagents/MandrakeRoot.cs
index 209223583..efd5f77e1 100644
--- a/Projects/UOContent/Items/Resources/Reagents/MandrakeRoot.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/MandrakeRoot.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/Nightshade.cs b/Projects/UOContent/Items/Resources/Reagents/Nightshade.cs
index 032223a75..cf1272575 100644
--- a/Projects/UOContent/Items/Resources/Reagents/Nightshade.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/Nightshade.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/NoxCrystal.cs b/Projects/UOContent/Items/Resources/Reagents/NoxCrystal.cs
index 14a1524b9..69e9f2545 100644
--- a/Projects/UOContent/Items/Resources/Reagents/NoxCrystal.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/NoxCrystal.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/PigIron.cs b/Projects/UOContent/Items/Resources/Reagents/PigIron.cs
index 64dba1a6a..a0c620e2b 100644
--- a/Projects/UOContent/Items/Resources/Reagents/PigIron.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/PigIron.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/SpidersSilk.cs b/Projects/UOContent/Items/Resources/Reagents/SpidersSilk.cs
index 96bc4d2e6..c02d0ddd4 100644
--- a/Projects/UOContent/Items/Resources/Reagents/SpidersSilk.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/SpidersSilk.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Reagents/SulfurousAsh.cs b/Projects/UOContent/Items/Resources/Reagents/SulfurousAsh.cs
index c9039ea75..69385f275 100644
--- a/Projects/UOContent/Items/Resources/Reagents/SulfurousAsh.cs
+++ b/Projects/UOContent/Items/Resources/Reagents/SulfurousAsh.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/BoltOfCloth.cs b/Projects/UOContent/Items/Resources/Tailor/BoltOfCloth.cs
index 45a10b913..62a2e8d25 100644
--- a/Projects/UOContent/Items/Resources/Tailor/BoltOfCloth.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/BoltOfCloth.cs
@@ -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()));
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Bone.cs b/Projects/UOContent/Items/Resources/Tailor/Bone.cs
index da71368c7..3003e4209 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Bone.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Bone.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Cloth.cs b/Projects/UOContent/Items/Resources/Tailor/Cloth.cs
index e75b4e4af..14b30f78f 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Cloth.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Cloth.cs
@@ -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()));
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Cotton.cs b/Projects/UOContent/Items/Resources/Tailor/Cotton.cs
index e66b6299f..1df44396b 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Cotton.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Cotton.cs
@@ -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.
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Flax.cs b/Projects/UOContent/Items/Resources/Tailor/Flax.cs
index 0835ead29..8bb2e4ff7 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Flax.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Flax.cs
@@ -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.
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Hides.cs b/Projects/UOContent/Items/Resources/Tailor/Hides.cs
index 60ab13a28..be5e9956b 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Hides.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Hides.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Leathers.cs b/Projects/UOContent/Items/Resources/Tailor/Leathers.cs
index eff4a0567..dddbf3aa9 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Leathers.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Leathers.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/UncutCloth.cs b/Projects/UOContent/Items/Resources/Tailor/UncutCloth.cs
index d4928974d..dc22770cf 100644
--- a/Projects/UOContent/Items/Resources/Tailor/UncutCloth.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/UncutCloth.cs
@@ -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()));
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/Wool.cs b/Projects/UOContent/Items/Resources/Tailor/Wool.cs
index d8be830cd..8a8340500 100644
--- a/Projects/UOContent/Items/Resources/Tailor/Wool.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/Wool.cs
@@ -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.
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Resources/Tailor/YarnsAndThreads.cs b/Projects/UOContent/Items/Resources/Tailor/YarnsAndThreads.cs
index 6b87a0549..0e58b44a6 100644
--- a/Projects/UOContent/Items/Resources/Tailor/YarnsAndThreads.cs
+++ b/Projects/UOContent/Items/Resources/Tailor/YarnsAndThreads.cs
@@ -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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Shields/Artifacts/Aegis.cs b/Projects/UOContent/Items/Shields/Artifacts/Aegis.cs
index 4bb148fc5..2e886ad02 100644
--- a/Projects/UOContent/Items/Shields/Artifacts/Aegis.cs
+++ b/Projects/UOContent/Items/Shields/Artifacts/Aegis.cs
@@ -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; // �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; // �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;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/Artifacts/ArcaneShield.cs b/Projects/UOContent/Items/Shields/Artifacts/ArcaneShield.cs
index 2f3062781..d877de6ea 100644
--- a/Projects/UOContent/Items/Shields/Artifacts/ArcaneShield.cs
+++ b/Projects/UOContent/Items/Shields/Artifacts/ArcaneShield.cs
@@ -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;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/BaseShield.cs b/Projects/UOContent/Items/Shields/BaseShield.cs
index b2cb94566..d26e01ac1 100644
--- a/Projects/UOContent/Items/Shields/BaseShield.cs
+++ b/Projects/UOContent/Items/Shields/BaseShield.cs
@@ -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) � 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) � 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;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/BronzeShield.cs b/Projects/UOContent/Items/Shields/BronzeShield.cs
index 85ff13e9e..fbfb4a6db 100644
--- a/Projects/UOContent/Items/Shields/BronzeShield.cs
+++ b/Projects/UOContent/Items/Shields/BronzeShield.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/Buckler.cs b/Projects/UOContent/Items/Shields/Buckler.cs
index 55d8885db..76c775409 100644
--- a/Projects/UOContent/Items/Shields/Buckler.cs
+++ b/Projects/UOContent/Items/Shields/Buckler.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/ChaosShield.cs b/Projects/UOContent/Items/Shields/ChaosShield.cs
index 8d3d1f50d..b9bb6104a 100644
--- a/Projects/UOContent/Items/Shields/ChaosShield.cs
+++ b/Projects/UOContent/Items/Shields/ChaosShield.cs
@@ -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;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/HeaterShield.cs b/Projects/UOContent/Items/Shields/HeaterShield.cs
index f07854469..5739a4d45 100644
--- a/Projects/UOContent/Items/Shields/HeaterShield.cs
+++ b/Projects/UOContent/Items/Shields/HeaterShield.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/MetalKiteShield.cs b/Projects/UOContent/Items/Shields/MetalKiteShield.cs
index b467e54b1..0c67ccb4f 100644
--- a/Projects/UOContent/Items/Shields/MetalKiteShield.cs
+++ b/Projects/UOContent/Items/Shields/MetalKiteShield.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/MetalShield.cs b/Projects/UOContent/Items/Shields/MetalShield.cs
index b04362adb..70ea813b3 100644
--- a/Projects/UOContent/Items/Shields/MetalShield.cs
+++ b/Projects/UOContent/Items/Shields/MetalShield.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/OrderShield.cs b/Projects/UOContent/Items/Shields/OrderShield.cs
index fffa9cd70..4186a3281 100644
--- a/Projects/UOContent/Items/Shields/OrderShield.cs
+++ b/Projects/UOContent/Items/Shields/OrderShield.cs
@@ -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;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/WoodenKiteShield.cs b/Projects/UOContent/Items/Shields/WoodenKiteShield.cs
index cdc6dc511..70e3e25fc 100644
--- a/Projects/UOContent/Items/Shields/WoodenKiteShield.cs
+++ b/Projects/UOContent/Items/Shields/WoodenKiteShield.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Shields/WoodenShield.cs b/Projects/UOContent/Items/Shields/WoodenShield.cs
index 4a25ed7b2..8b602e5aa 100644
--- a/Projects/UOContent/Items/Shields/WoodenShield.cs
+++ b/Projects/UOContent/Items/Shields/WoodenShield.cs
@@ -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
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/AnvilForge.cs b/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/AnvilForge.cs
index a2e0407ea..2b377d05d 100644
--- a/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/AnvilForge.cs
+++ b/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/AnvilForge.cs
@@ -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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs b/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs
index 8b5f2df37..40d25143c 100644
--- a/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs
+++ b/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs
@@ -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;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs b/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs
index 01dc756b1..3de092267 100644
--- a/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Camping/Bedroll.cs
@@ -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())
- {
- 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); //
Logging out via camping
-
- /* 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();
- }
- }
- }
-}
+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())
+ {
+ 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); //
Logging out via camping
+
+ /* 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();
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs b/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs
index 64626e67d..e35554d1f 100644
--- a/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs
+++ b/Projects/UOContent/Items/Skill Items/Camping/Campfire.cs
@@ -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 m_Table = new Dictionary();
-
- private readonly List m_Entries;
-
- private readonly Timer m_Timer;
-
- public Campfire() : base(0xDE3)
- {
- Movable = false;
- Light = LightType.Circle300;
-
- m_Entries = new List();
-
- 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 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 m_Table = new Dictionary();
+
+ private readonly List m_Entries;
+
+ private readonly Timer m_Timer;
+
+ public Campfire() : base(0xDE3)
+ {
+ Movable = false;
+ Light = LightType.Circle300;
+
+ m_Entries = new List();
+
+ 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 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;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs b/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs
index b4454e675..35be1b984 100644
--- a/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs
+++ b/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs
@@ -1,110 +1,110 @@
-using System.Collections.Generic;
-using Server.Network;
-using Server.Regions;
-
-namespace Server.Items
-{
- public class Kindling : Item
- {
- [Constructible]
- public Kindling(int amount = 1) : base(0xDE1)
- {
- Stackable = true;
- Weight = 5.0;
- Amount = amount;
- }
-
- public Kindling(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 (!VerifyMove(from))
- return;
-
- if (!from.InRange(GetWorldLocation(), 2))
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- return;
- }
-
- Point3D fireLocation = GetFireLocation(from);
-
- if (fireLocation == Point3D.Zero)
- {
- from.SendLocalizedMessage(501695); // There is not a spot nearby to place your campfire.
- }
- else if (!from.CheckSkill(SkillName.Camping, 0.0, 100.0))
- {
- from.SendLocalizedMessage(501696); // You fail to ignite the campfire.
- }
- else
- {
- Consume();
-
- if (!Deleted && Parent == null)
- from.PlaceInBackpack(this);
-
- new Campfire().MoveToWorld(fireLocation, from.Map);
- }
- }
-
- private Point3D GetFireLocation(Mobile from)
- {
- if (from.Region.IsPartOf())
- return Point3D.Zero;
-
- if (Parent == null)
- return Location;
-
- List list = new List(4);
-
- AddOffsetLocation(from, 0, -1, list);
- AddOffsetLocation(from, -1, 0, list);
- AddOffsetLocation(from, 0, 1, list);
- AddOffsetLocation(from, 1, 0, list);
-
- if (list.Count == 0)
- return Point3D.Zero;
-
- return list.RandomElement();
- }
-
- private void AddOffsetLocation(Mobile from, int offsetX, int offsetY, List list)
- {
- Map map = from.Map;
-
- int x = from.X + offsetX;
- int y = from.Y + offsetY;
-
- Point3D loc = new Point3D(x, y, from.Z);
-
- if (map.CanFit(loc, 1) && from.InLOS(loc))
- {
- list.Add(loc);
- }
- else
- {
- loc = new Point3D(x, y, map.GetAverageZ(x, y));
-
- if (map.CanFit(loc, 1) && from.InLOS(loc))
- list.Add(loc);
- }
- }
- }
-}
+using System.Collections.Generic;
+using Server.Network;
+using Server.Regions;
+
+namespace Server.Items
+{
+ public class Kindling : Item
+ {
+ [Constructible]
+ public Kindling(int amount = 1) : base(0xDE1)
+ {
+ Stackable = true;
+ Weight = 5.0;
+ Amount = amount;
+ }
+
+ public Kindling(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 (!VerifyMove(from))
+ return;
+
+ if (!from.InRange(GetWorldLocation(), 2))
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ return;
+ }
+
+ Point3D fireLocation = GetFireLocation(from);
+
+ if (fireLocation == Point3D.Zero)
+ {
+ from.SendLocalizedMessage(501695); // There is not a spot nearby to place your campfire.
+ }
+ else if (!from.CheckSkill(SkillName.Camping, 0.0, 100.0))
+ {
+ from.SendLocalizedMessage(501696); // You fail to ignite the campfire.
+ }
+ else
+ {
+ Consume();
+
+ if (!Deleted && Parent == null)
+ from.PlaceInBackpack(this);
+
+ new Campfire().MoveToWorld(fireLocation, from.Map);
+ }
+ }
+
+ private Point3D GetFireLocation(Mobile from)
+ {
+ if (from.Region.IsPartOf())
+ return Point3D.Zero;
+
+ if (Parent == null)
+ return Location;
+
+ List list = new List(4);
+
+ AddOffsetLocation(from, 0, -1, list);
+ AddOffsetLocation(from, -1, 0, list);
+ AddOffsetLocation(from, 0, 1, list);
+ AddOffsetLocation(from, 1, 0, list);
+
+ if (list.Count == 0)
+ return Point3D.Zero;
+
+ return list.RandomElement();
+ }
+
+ private void AddOffsetLocation(Mobile from, int offsetX, int offsetY, List list)
+ {
+ Map map = from.Map;
+
+ int x = from.X + offsetX;
+ int y = from.Y + offsetY;
+
+ Point3D loc = new Point3D(x, y, from.Z);
+
+ if (map.CanFit(loc, 1) && from.InLOS(loc))
+ {
+ list.Add(loc);
+ }
+ else
+ {
+ loc = new Point3D(x, y, map.GetAverageZ(x, y));
+
+ if (map.CanFit(loc, 1) && from.InLOS(loc))
+ list.Add(loc);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Carpenter Items/Board.cs b/Projects/UOContent/Items/Skill Items/Carpenter Items/Board.cs
index b28a33635..f2d2c16cc 100644
--- a/Projects/UOContent/Items/Skill Items/Carpenter Items/Board.cs
+++ b/Projects/UOContent/Items/Skill Items/Carpenter Items/Board.cs
@@ -1,275 +1,275 @@
-namespace Server.Items
-{
- [Flippable(0x1BD7, 0x1BDA)]
- public class Board : Item, ICommodity
- {
- private CraftResource m_Resource;
-
- [Constructible]
- public Board(int amount = 1)
- : this(CraftResource.RegularWood, amount)
- {
- }
-
- public Board(Serial serial)
- : base(serial)
- {
- }
-
- [Constructible]
- public Board(CraftResource resource, int amount = 1)
- : base(0x1BD7)
- {
- Stackable = true;
- Amount = amount;
-
- m_Resource = resource;
- Hue = CraftResources.GetHue(resource);
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public CraftResource Resource
- {
- get => m_Resource;
- set
- {
- m_Resource = value;
- InvalidateProperties();
- }
- }
-
- int ICommodity.DescriptionNumber
- {
- get
- {
- if (m_Resource >= CraftResource.OakWood && m_Resource <= CraftResource.YewWood)
- return 1075052 + ((int)m_Resource - (int)CraftResource.OakWood);
-
- return m_Resource switch
- {
- CraftResource.Bloodwood => 1075055,
- CraftResource.Frostwood => 1075056,
- CraftResource.Heartwood => 1075062, // WHY Osi. Why?
- _ => LabelNumber
- };
- }
- }
-
- bool ICommodity.IsDeedable => true;
-
- 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 override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(3);
-
- writer.Write((int)m_Resource);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 3:
- case 2:
- {
- m_Resource = (CraftResource)reader.ReadInt();
- break;
- }
- }
-
- if ((version == 0 && Weight == 0.1) || (version <= 2 && Weight == 2))
- Weight = -1;
-
- if (version <= 1)
- m_Resource = CraftResource.RegularWood;
- }
- }
-
- public class HeartwoodBoard : Board
- {
- [Constructible]
- public HeartwoodBoard(int amount = 1)
- : base(CraftResource.Heartwood, amount)
- {
- }
-
- public HeartwoodBoard(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 BloodwoodBoard : Board
- {
- [Constructible]
- public BloodwoodBoard(int amount = 1)
- : base(CraftResource.Bloodwood, amount)
- {
- }
-
- public BloodwoodBoard(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 FrostwoodBoard : Board
- {
- [Constructible]
- public FrostwoodBoard(int amount = 1)
- : base(CraftResource.Frostwood, amount)
- {
- }
-
- public FrostwoodBoard(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 OakBoard : Board
- {
- [Constructible]
- public OakBoard(int amount = 1)
- : base(CraftResource.OakWood, amount)
- {
- }
-
- public OakBoard(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 AshBoard : Board
- {
- [Constructible]
- public AshBoard(int amount = 1)
- : base(CraftResource.AshWood, amount)
- {
- }
-
- public AshBoard(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 YewBoard : Board
- {
- [Constructible]
- public YewBoard(int amount = 1)
- : base(CraftResource.YewWood, amount)
- {
- }
-
- public YewBoard(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
+{
+ [Flippable(0x1BD7, 0x1BDA)]
+ public class Board : Item, ICommodity
+ {
+ private CraftResource m_Resource;
+
+ [Constructible]
+ public Board(int amount = 1)
+ : this(CraftResource.RegularWood, amount)
+ {
+ }
+
+ public Board(Serial serial)
+ : base(serial)
+ {
+ }
+
+ [Constructible]
+ public Board(CraftResource resource, int amount = 1)
+ : base(0x1BD7)
+ {
+ Stackable = true;
+ Amount = amount;
+
+ m_Resource = resource;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public CraftResource Resource
+ {
+ get => m_Resource;
+ set
+ {
+ m_Resource = value;
+ InvalidateProperties();
+ }
+ }
+
+ int ICommodity.DescriptionNumber
+ {
+ get
+ {
+ if (m_Resource >= CraftResource.OakWood && m_Resource <= CraftResource.YewWood)
+ return 1075052 + ((int)m_Resource - (int)CraftResource.OakWood);
+
+ return m_Resource switch
+ {
+ CraftResource.Bloodwood => 1075055,
+ CraftResource.Frostwood => 1075056,
+ CraftResource.Heartwood => 1075062, // WHY Osi. Why?
+ _ => LabelNumber
+ };
+ }
+ }
+
+ bool ICommodity.IsDeedable => true;
+
+ 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 override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(3);
+
+ writer.Write((int)m_Resource);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 3:
+ case 2:
+ {
+ m_Resource = (CraftResource)reader.ReadInt();
+ break;
+ }
+ }
+
+ if ((version == 0 && Weight == 0.1) || (version <= 2 && Weight == 2))
+ Weight = -1;
+
+ if (version <= 1)
+ m_Resource = CraftResource.RegularWood;
+ }
+ }
+
+ public class HeartwoodBoard : Board
+ {
+ [Constructible]
+ public HeartwoodBoard(int amount = 1)
+ : base(CraftResource.Heartwood, amount)
+ {
+ }
+
+ public HeartwoodBoard(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 BloodwoodBoard : Board
+ {
+ [Constructible]
+ public BloodwoodBoard(int amount = 1)
+ : base(CraftResource.Bloodwood, amount)
+ {
+ }
+
+ public BloodwoodBoard(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 FrostwoodBoard : Board
+ {
+ [Constructible]
+ public FrostwoodBoard(int amount = 1)
+ : base(CraftResource.Frostwood, amount)
+ {
+ }
+
+ public FrostwoodBoard(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 OakBoard : Board
+ {
+ [Constructible]
+ public OakBoard(int amount = 1)
+ : base(CraftResource.OakWood, amount)
+ {
+ }
+
+ public OakBoard(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 AshBoard : Board
+ {
+ [Constructible]
+ public AshBoard(int amount = 1)
+ : base(CraftResource.AshWood, amount)
+ {
+ }
+
+ public AshBoard(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 YewBoard : Board
+ {
+ [Constructible]
+ public YewBoard(int amount = 1)
+ : base(CraftResource.YewWood, amount)
+ {
+ }
+
+ public YewBoard(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs b/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs
index b1775e5b0..85075cd69 100644
--- a/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs
+++ b/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs
@@ -1,520 +1,520 @@
-using System;
-using Server.Mobiles;
-using Server.Multis;
-using Server.Targeting;
-
-namespace Server.Items
-{
- [Flippable(0x1EBA, 0x1EBB)]
- public class TaxidermyKit : Item
- {
- private static readonly TrophyInfo[] m_Table =
- {
- new TrophyInfo(typeof(BrownBear), 0x1E60, 1041093, 1041107),
- new TrophyInfo(typeof(GreatHart), 0x1E61, 1041095, 1041109),
- new TrophyInfo(typeof(BigFish), 0x1E62, 1041096, 1041110),
- new TrophyInfo(typeof(Gorilla), 0x1E63, 1041091, 1041105),
- new TrophyInfo(typeof(Orc), 0x1E64, 1041090, 1041104),
- new TrophyInfo(typeof(PolarBear), 0x1E65, 1041094, 1041108),
- new TrophyInfo(typeof(Troll), 0x1E66, 1041092, 1041106)
- };
-
- [Constructible]
- public TaxidermyKit() : base(0x1EBA) => Weight = 1.0;
-
- public TaxidermyKit(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041279; // a taxidermy kit
-
- 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(1042001); // That must be in your pack for you to use it.
- }
- else if (from.Skills.Carpentry.Base < 90.0)
- {
- from.SendLocalizedMessage(1042594); // You do not understand how to use this.
- }
- else
- {
- from.SendLocalizedMessage(1042595); // Target the corpse to make a trophy out of.
- from.Target = new CorpseTarget(this);
- }
- }
-
- public class TrophyInfo
- {
- public TrophyInfo(Type type, int id, int deedNum, int addonNum)
- {
- CreatureType = type;
- NorthID = id;
- DeedNumber = deedNum;
- AddonNumber = addonNum;
- }
-
- public Type CreatureType { get; }
-
- public int NorthID { get; }
-
- public int DeedNumber { get; }
-
- public int AddonNumber { get; }
- }
-
- private class CorpseTarget : Target
- {
- private readonly TaxidermyKit m_Kit;
-
- public CorpseTarget(TaxidermyKit kit) : base(3, false, TargetFlags.None) => m_Kit = kit;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Kit.Deleted)
- return;
-
- Corpse corpse = targeted as Corpse;
-
- if (!(corpse != null || targeted is BigFish))
- {
- from.SendLocalizedMessage(1042600); // That is not a corpse!
- }
- else if (corpse?.VisitedByTaxidermist == true)
- {
- from.SendLocalizedMessage(1042596); // That corpse seems to have been visited by a taxidermist already.
- }
- else if (!m_Kit.IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- else if (from.Skills.Carpentry.Base < 90.0)
- {
- from.SendLocalizedMessage(1042603); // You would not understand how to use the kit.
- }
- else
- {
- object obj = corpse?.Owner ?? targeted;
-
- foreach (TrophyInfo t in m_Table)
- {
- if (t.CreatureType != obj.GetType())
- continue;
-
- Container pack = from.Backpack;
-
- if (pack?.ConsumeTotal(typeof(Board), 10) == true)
- {
- from.SendLocalizedMessage(
- 1042278); // You review the corpse and find it worthy of a trophy.
- from.SendLocalizedMessage(1042602); // You use your kit up making the trophy.
-
- Mobile hunter = null;
- int weight = 0;
-
- if (targeted is BigFish fish)
- {
- hunter = fish.Fisher;
- weight = (int)fish.Weight;
-
- fish.Consume();
- }
-
- from.AddToBackpack(new TrophyDeed(t, hunter, weight));
-
- if (corpse != null)
- corpse.VisitedByTaxidermist = true;
-
- m_Kit.Delete();
- return;
- }
-
- from.SendLocalizedMessage(1042598); // You do not have enough boards.
- return;
- }
-
- from.SendLocalizedMessage(1042599); // That does not look like something you want hanging on a wall.
- }
- }
- }
- }
-
- public class TrophyAddon : Item, IAddon
- {
- private int m_AddonNumber;
- private int m_AnimalWeight;
-
- private Mobile m_Hunter;
-
- public TrophyAddon(Mobile from, int itemID, int westID, int northID, int deedNumber,
- int addonNumber, Mobile hunter = null, int animalWeight = 0) : base(itemID)
- {
- WestID = westID;
- NorthID = northID;
- DeedNumber = deedNumber;
- m_AddonNumber = addonNumber;
-
- m_Hunter = hunter;
- m_AnimalWeight = animalWeight;
-
- Movable = false;
-
- MoveToWorld(from.Location, from.Map);
- }
-
- public TrophyAddon(Serial serial) : base(serial)
- {
- }
-
- public override bool ForceShowProperties => ObjectPropertyList.Enabled;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int WestID { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int NorthID { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int DeedNumber { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int AddonNumber
- {
- get => m_AddonNumber;
- set
- {
- m_AddonNumber = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Hunter
- {
- get => m_Hunter;
- set
- {
- m_Hunter = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int AnimalWeight
- {
- get => m_AnimalWeight;
- set
- {
- m_AnimalWeight = value;
- InvalidateProperties();
- }
- }
-
- public override int LabelNumber => m_AddonNumber;
-
- public bool CouldFit(IPoint3D p, Map map)
- {
- if (!map.CanFit(p.X, p.Y, p.Z, ItemData.Height))
- return false;
-
- if (ItemID == NorthID)
- return BaseAddon.IsWall(p.X, p.Y - 1, p.Z, map); // North wall
- return BaseAddon.IsWall(p.X - 1, p.Y, p.Z, map); // West wall
- }
-
- public Item Deed => new TrophyDeed(WestID, NorthID, DeedNumber, m_AddonNumber, m_Hunter, m_AnimalWeight);
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_AnimalWeight >= 20)
- {
- if (m_Hunter != null)
- list.Add(1070857, m_Hunter.Name); // Caught by ~1_fisherman~
-
- list.Add(1070858, m_AnimalWeight.ToString()); // ~1_weight~ stones
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(m_Hunter);
- writer.Write(m_AnimalWeight);
-
- writer.Write(WestID);
- writer.Write(NorthID);
- writer.Write(DeedNumber);
- writer.Write(m_AddonNumber);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- m_Hunter = reader.ReadMobile();
- m_AnimalWeight = reader.ReadInt();
- goto case 0;
- }
- case 0:
- {
- WestID = reader.ReadInt();
- NorthID = reader.ReadInt();
- DeedNumber = reader.ReadInt();
- m_AddonNumber = reader.ReadInt();
- break;
- }
- }
-
- Timer.DelayCall(FixMovingCrate);
- }
-
- private void FixMovingCrate()
- {
- if (Deleted)
- return;
-
- if (Movable || IsLockedDown)
- {
- Item deed = Deed;
-
- if (Parent is Item item)
- {
- item.AddItem(deed);
- deed.Location = Location;
- }
- else
- {
- deed.MoveToWorld(Location, Map);
- }
-
- Delete();
- }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- BaseHouse house = BaseHouse.FindHouseAt(this);
-
- if (house?.IsCoOwner(from) == true)
- {
- if (from.InRange(GetWorldLocation(), 1))
- {
- from.AddToBackpack(Deed);
- Delete();
- }
- else
- {
- from.SendLocalizedMessage(500295); // You are too far away to do that.
- }
- }
- }
- }
-
- [Flippable(0x14F0, 0x14EF)]
- public class TrophyDeed : Item
- {
- private int m_AnimalWeight;
- private int m_DeedNumber;
-
- private Mobile m_Hunter;
-
- public TrophyDeed(int westID, int northID, int deedNumber, int addonNumber,
- Mobile hunter = null, int animalWeight = 0) : base(0x14F0)
- {
- WestID = westID;
- NorthID = northID;
- m_DeedNumber = deedNumber;
- AddonNumber = addonNumber;
- m_Hunter = hunter;
- m_AnimalWeight = animalWeight;
- }
-
- public TrophyDeed(TaxidermyKit.TrophyInfo info, Mobile hunter, int animalWeight)
- : this(info.NorthID + 7, info.NorthID, info.DeedNumber, info.AddonNumber, hunter, animalWeight)
- {
- }
-
- public TrophyDeed(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int WestID { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int NorthID { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int DeedNumber
- {
- get => m_DeedNumber;
- set
- {
- m_DeedNumber = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int AddonNumber { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Hunter
- {
- get => m_Hunter;
- set
- {
- m_Hunter = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int AnimalWeight
- {
- get => m_AnimalWeight;
- set
- {
- m_AnimalWeight = value;
- InvalidateProperties();
- }
- }
-
- public override int LabelNumber => m_DeedNumber;
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_AnimalWeight >= 20)
- {
- if (m_Hunter != null)
- list.Add(1070857, m_Hunter.Name); // Caught by ~1_fisherman~
-
- list.Add(1070858, m_AnimalWeight.ToString()); // ~1_weight~ stones
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(m_Hunter);
- writer.Write(m_AnimalWeight);
-
- writer.Write(WestID);
- writer.Write(NorthID);
- writer.Write(m_DeedNumber);
- writer.Write(AddonNumber);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- m_Hunter = reader.ReadMobile();
- m_AnimalWeight = reader.ReadInt();
- goto case 0;
- }
- case 0:
- {
- WestID = reader.ReadInt();
- NorthID = reader.ReadInt();
- m_DeedNumber = reader.ReadInt();
- AddonNumber = reader.ReadInt();
- break;
- }
- }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- BaseHouse house = BaseHouse.FindHouseAt(from);
-
- if (house?.IsCoOwner(from) == true)
- {
- bool northWall = BaseAddon.IsWall(from.X, from.Y - 1, from.Z, from.Map);
- bool westWall = BaseAddon.IsWall(from.X - 1, from.Y, from.Z, from.Map);
-
- if (northWall && westWall)
- switch (from.Direction & Direction.Mask)
- {
- case Direction.North:
- case Direction.South:
- westWall = false;
- break;
-
- case Direction.East:
- case Direction.West:
- northWall = false;
- break;
-
- default:
- from.SendMessage("Turn to face the wall on which to hang this trophy.");
- return;
- }
-
- int itemID = 0;
-
- if (northWall)
- itemID = NorthID;
- else if (westWall)
- itemID = WestID;
- else
- from.SendLocalizedMessage(1042626); // The trophy must be placed next to a wall.
-
- if (itemID > 0)
- {
- house.Addons.Add(new TrophyAddon(from, itemID, WestID, NorthID, m_DeedNumber, AddonNumber, m_Hunter,
- m_AnimalWeight));
- Delete();
- }
- }
- else
- {
- from.SendLocalizedMessage(502092); // You must be in your house to do this.
- }
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
- }
-}
+using System;
+using Server.Mobiles;
+using Server.Multis;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ [Flippable(0x1EBA, 0x1EBB)]
+ public class TaxidermyKit : Item
+ {
+ private static readonly TrophyInfo[] m_Table =
+ {
+ new TrophyInfo(typeof(BrownBear), 0x1E60, 1041093, 1041107),
+ new TrophyInfo(typeof(GreatHart), 0x1E61, 1041095, 1041109),
+ new TrophyInfo(typeof(BigFish), 0x1E62, 1041096, 1041110),
+ new TrophyInfo(typeof(Gorilla), 0x1E63, 1041091, 1041105),
+ new TrophyInfo(typeof(Orc), 0x1E64, 1041090, 1041104),
+ new TrophyInfo(typeof(PolarBear), 0x1E65, 1041094, 1041108),
+ new TrophyInfo(typeof(Troll), 0x1E66, 1041092, 1041106)
+ };
+
+ [Constructible]
+ public TaxidermyKit() : base(0x1EBA) => Weight = 1.0;
+
+ public TaxidermyKit(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041279; // a taxidermy kit
+
+ 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(1042001); // That must be in your pack for you to use it.
+ }
+ else if (from.Skills.Carpentry.Base < 90.0)
+ {
+ from.SendLocalizedMessage(1042594); // You do not understand how to use this.
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042595); // Target the corpse to make a trophy out of.
+ from.Target = new CorpseTarget(this);
+ }
+ }
+
+ public class TrophyInfo
+ {
+ public TrophyInfo(Type type, int id, int deedNum, int addonNum)
+ {
+ CreatureType = type;
+ NorthID = id;
+ DeedNumber = deedNum;
+ AddonNumber = addonNum;
+ }
+
+ public Type CreatureType { get; }
+
+ public int NorthID { get; }
+
+ public int DeedNumber { get; }
+
+ public int AddonNumber { get; }
+ }
+
+ private class CorpseTarget : Target
+ {
+ private readonly TaxidermyKit m_Kit;
+
+ public CorpseTarget(TaxidermyKit kit) : base(3, false, TargetFlags.None) => m_Kit = kit;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Kit.Deleted)
+ return;
+
+ Corpse corpse = targeted as Corpse;
+
+ if (!(corpse != null || targeted is BigFish))
+ {
+ from.SendLocalizedMessage(1042600); // That is not a corpse!
+ }
+ else if (corpse?.VisitedByTaxidermist == true)
+ {
+ from.SendLocalizedMessage(1042596); // That corpse seems to have been visited by a taxidermist already.
+ }
+ else if (!m_Kit.IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ else if (from.Skills.Carpentry.Base < 90.0)
+ {
+ from.SendLocalizedMessage(1042603); // You would not understand how to use the kit.
+ }
+ else
+ {
+ object obj = corpse?.Owner ?? targeted;
+
+ foreach (TrophyInfo t in m_Table)
+ {
+ if (t.CreatureType != obj.GetType())
+ continue;
+
+ Container pack = from.Backpack;
+
+ if (pack?.ConsumeTotal(typeof(Board), 10) == true)
+ {
+ from.SendLocalizedMessage(
+ 1042278); // You review the corpse and find it worthy of a trophy.
+ from.SendLocalizedMessage(1042602); // You use your kit up making the trophy.
+
+ Mobile hunter = null;
+ int weight = 0;
+
+ if (targeted is BigFish fish)
+ {
+ hunter = fish.Fisher;
+ weight = (int)fish.Weight;
+
+ fish.Consume();
+ }
+
+ from.AddToBackpack(new TrophyDeed(t, hunter, weight));
+
+ if (corpse != null)
+ corpse.VisitedByTaxidermist = true;
+
+ m_Kit.Delete();
+ return;
+ }
+
+ from.SendLocalizedMessage(1042598); // You do not have enough boards.
+ return;
+ }
+
+ from.SendLocalizedMessage(1042599); // That does not look like something you want hanging on a wall.
+ }
+ }
+ }
+ }
+
+ public class TrophyAddon : Item, IAddon
+ {
+ private int m_AddonNumber;
+ private int m_AnimalWeight;
+
+ private Mobile m_Hunter;
+
+ public TrophyAddon(Mobile from, int itemID, int westID, int northID, int deedNumber,
+ int addonNumber, Mobile hunter = null, int animalWeight = 0) : base(itemID)
+ {
+ WestID = westID;
+ NorthID = northID;
+ DeedNumber = deedNumber;
+ m_AddonNumber = addonNumber;
+
+ m_Hunter = hunter;
+ m_AnimalWeight = animalWeight;
+
+ Movable = false;
+
+ MoveToWorld(from.Location, from.Map);
+ }
+
+ public TrophyAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool ForceShowProperties => ObjectPropertyList.Enabled;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int WestID { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int NorthID { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int DeedNumber { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int AddonNumber
+ {
+ get => m_AddonNumber;
+ set
+ {
+ m_AddonNumber = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Hunter
+ {
+ get => m_Hunter;
+ set
+ {
+ m_Hunter = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int AnimalWeight
+ {
+ get => m_AnimalWeight;
+ set
+ {
+ m_AnimalWeight = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override int LabelNumber => m_AddonNumber;
+
+ public bool CouldFit(IPoint3D p, Map map)
+ {
+ if (!map.CanFit(p.X, p.Y, p.Z, ItemData.Height))
+ return false;
+
+ if (ItemID == NorthID)
+ return BaseAddon.IsWall(p.X, p.Y - 1, p.Z, map); // North wall
+ return BaseAddon.IsWall(p.X - 1, p.Y, p.Z, map); // West wall
+ }
+
+ public Item Deed => new TrophyDeed(WestID, NorthID, DeedNumber, m_AddonNumber, m_Hunter, m_AnimalWeight);
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_AnimalWeight >= 20)
+ {
+ if (m_Hunter != null)
+ list.Add(1070857, m_Hunter.Name); // Caught by ~1_fisherman~
+
+ list.Add(1070858, m_AnimalWeight.ToString()); // ~1_weight~ stones
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(m_Hunter);
+ writer.Write(m_AnimalWeight);
+
+ writer.Write(WestID);
+ writer.Write(NorthID);
+ writer.Write(DeedNumber);
+ writer.Write(m_AddonNumber);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ m_Hunter = reader.ReadMobile();
+ m_AnimalWeight = reader.ReadInt();
+ goto case 0;
+ }
+ case 0:
+ {
+ WestID = reader.ReadInt();
+ NorthID = reader.ReadInt();
+ DeedNumber = reader.ReadInt();
+ m_AddonNumber = reader.ReadInt();
+ break;
+ }
+ }
+
+ Timer.DelayCall(FixMovingCrate);
+ }
+
+ private void FixMovingCrate()
+ {
+ if (Deleted)
+ return;
+
+ if (Movable || IsLockedDown)
+ {
+ Item deed = Deed;
+
+ if (Parent is Item item)
+ {
+ item.AddItem(deed);
+ deed.Location = Location;
+ }
+ else
+ {
+ deed.MoveToWorld(Location, Map);
+ }
+
+ Delete();
+ }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ BaseHouse house = BaseHouse.FindHouseAt(this);
+
+ if (house?.IsCoOwner(from) == true)
+ {
+ if (from.InRange(GetWorldLocation(), 1))
+ {
+ from.AddToBackpack(Deed);
+ Delete();
+ }
+ else
+ {
+ from.SendLocalizedMessage(500295); // You are too far away to do that.
+ }
+ }
+ }
+ }
+
+ [Flippable(0x14F0, 0x14EF)]
+ public class TrophyDeed : Item
+ {
+ private int m_AnimalWeight;
+ private int m_DeedNumber;
+
+ private Mobile m_Hunter;
+
+ public TrophyDeed(int westID, int northID, int deedNumber, int addonNumber,
+ Mobile hunter = null, int animalWeight = 0) : base(0x14F0)
+ {
+ WestID = westID;
+ NorthID = northID;
+ m_DeedNumber = deedNumber;
+ AddonNumber = addonNumber;
+ m_Hunter = hunter;
+ m_AnimalWeight = animalWeight;
+ }
+
+ public TrophyDeed(TaxidermyKit.TrophyInfo info, Mobile hunter, int animalWeight)
+ : this(info.NorthID + 7, info.NorthID, info.DeedNumber, info.AddonNumber, hunter, animalWeight)
+ {
+ }
+
+ public TrophyDeed(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int WestID { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int NorthID { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int DeedNumber
+ {
+ get => m_DeedNumber;
+ set
+ {
+ m_DeedNumber = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int AddonNumber { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Hunter
+ {
+ get => m_Hunter;
+ set
+ {
+ m_Hunter = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int AnimalWeight
+ {
+ get => m_AnimalWeight;
+ set
+ {
+ m_AnimalWeight = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override int LabelNumber => m_DeedNumber;
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_AnimalWeight >= 20)
+ {
+ if (m_Hunter != null)
+ list.Add(1070857, m_Hunter.Name); // Caught by ~1_fisherman~
+
+ list.Add(1070858, m_AnimalWeight.ToString()); // ~1_weight~ stones
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(m_Hunter);
+ writer.Write(m_AnimalWeight);
+
+ writer.Write(WestID);
+ writer.Write(NorthID);
+ writer.Write(m_DeedNumber);
+ writer.Write(AddonNumber);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ m_Hunter = reader.ReadMobile();
+ m_AnimalWeight = reader.ReadInt();
+ goto case 0;
+ }
+ case 0:
+ {
+ WestID = reader.ReadInt();
+ NorthID = reader.ReadInt();
+ m_DeedNumber = reader.ReadInt();
+ AddonNumber = reader.ReadInt();
+ break;
+ }
+ }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ BaseHouse house = BaseHouse.FindHouseAt(from);
+
+ if (house?.IsCoOwner(from) == true)
+ {
+ bool northWall = BaseAddon.IsWall(from.X, from.Y - 1, from.Z, from.Map);
+ bool westWall = BaseAddon.IsWall(from.X - 1, from.Y, from.Z, from.Map);
+
+ if (northWall && westWall)
+ switch (from.Direction & Direction.Mask)
+ {
+ case Direction.North:
+ case Direction.South:
+ westWall = false;
+ break;
+
+ case Direction.East:
+ case Direction.West:
+ northWall = false;
+ break;
+
+ default:
+ from.SendMessage("Turn to face the wall on which to hang this trophy.");
+ return;
+ }
+
+ int itemID = 0;
+
+ if (northWall)
+ itemID = NorthID;
+ else if (westWall)
+ itemID = WestID;
+ else
+ from.SendLocalizedMessage(1042626); // The trophy must be placed next to a wall.
+
+ if (itemID > 0)
+ {
+ house.Addons.Add(new TrophyAddon(from, itemID, WestID, NorthID, m_DeedNumber, AddonNumber, m_Hunter,
+ m_AnimalWeight));
+ Delete();
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(502092); // You must be in your house to do this.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Fishing/FishingPole.cs b/Projects/UOContent/Items/Skill Items/Fishing/FishingPole.cs
index e33ac7f75..f23192dc2 100644
--- a/Projects/UOContent/Items/Skill Items/Fishing/FishingPole.cs
+++ b/Projects/UOContent/Items/Skill Items/Fishing/FishingPole.cs
@@ -1,69 +1,69 @@
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Engines.Harvest;
-using Server.Network;
-
-namespace Server.Items
-{
- public class FishingPole : Item
- {
- [Constructible]
- public FishingPole() : base(0x0DC0)
- {
- Layer = Layer.TwoHanded;
- Weight = 8.0;
- }
-
- public FishingPole(Serial serial) : base(serial)
- {
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- Point3D loc = GetWorldLocation();
-
- if (!from.InLOS(loc) || !from.InRange(loc, 2))
- from.LocalOverheadMessage(MessageType.Regular, 0x3E9, 1019045); // I can't reach that
- else
- Fishing.System.BeginHarvesting(from, this);
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- BaseHarvestTool.AddContextMenuEntries(from, this, list, Fishing.System);
- }
-
- public override bool CheckConflictingLayer(Mobile m, Item item, Layer layer)
- {
- if (base.CheckConflictingLayer(m, item, layer))
- return true;
-
- if (layer == Layer.OneHanded)
- {
- m.SendLocalizedMessage(500214); // You already have something in both hands.
- return true;
- }
-
- return false;
- }
-
- 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 && Layer == Layer.OneHanded)
- Layer = Layer.TwoHanded;
- }
- }
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Engines.Harvest;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class FishingPole : Item
+ {
+ [Constructible]
+ public FishingPole() : base(0x0DC0)
+ {
+ Layer = Layer.TwoHanded;
+ Weight = 8.0;
+ }
+
+ public FishingPole(Serial serial) : base(serial)
+ {
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ Point3D loc = GetWorldLocation();
+
+ if (!from.InLOS(loc) || !from.InRange(loc, 2))
+ from.LocalOverheadMessage(MessageType.Regular, 0x3E9, 1019045); // I can't reach that
+ else
+ Fishing.System.BeginHarvesting(from, this);
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ BaseHarvestTool.AddContextMenuEntries(from, this, list, Fishing.System);
+ }
+
+ public override bool CheckConflictingLayer(Mobile m, Item item, Layer layer)
+ {
+ if (base.CheckConflictingLayer(m, item, layer))
+ return true;
+
+ if (layer == Layer.OneHanded)
+ {
+ m.SendLocalizedMessage(500214); // You already have something in both hands.
+ return true;
+ }
+
+ return false;
+ }
+
+ 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 && Layer == Layer.OneHanded)
+ Layer = Layer.TwoHanded;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Fishing/Misc/MessageInABottle.cs b/Projects/UOContent/Items/Skill Items/Fishing/Misc/MessageInABottle.cs
index 07f38a982..cffd942cd 100644
--- a/Projects/UOContent/Items/Skill Items/Fishing/Misc/MessageInABottle.cs
+++ b/Projects/UOContent/Items/Skill Items/Fishing/Misc/MessageInABottle.cs
@@ -1,104 +1,104 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- public class MessageInABottle : Item
- {
- private int m_Level;
-
- [Constructible]
- public MessageInABottle(Map map = null) : this(map, GetRandomLevel())
- {
- }
-
- [Constructible]
- public MessageInABottle(Map map, int level) : base(0x099F)
- {
- Weight = 1.0;
- TargetMap = map ?? Map.Trammel;
- m_Level = level;
- }
-
- public MessageInABottle(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041080; // a message in a bottle
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Map TargetMap { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Level
- {
- get => m_Level;
- set => m_Level = Math.Max(1, Math.Min(value, 4));
- }
-
- public static int GetRandomLevel()
- {
- if (Core.AOS && Utility.Random(25) < 1)
- return 4; // ancient
-
- return Utility.RandomMinMax(1, 3);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(3); // version
-
- writer.Write(m_Level);
-
- writer.Write(TargetMap);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 3:
- case 2:
- {
- m_Level = reader.ReadInt();
- goto case 1;
- }
- case 1:
- {
- TargetMap = reader.ReadMap();
- break;
- }
- case 0:
- {
- TargetMap = Map.Trammel;
- break;
- }
- }
-
- if (version < 2)
- m_Level = GetRandomLevel();
-
- if (version < 3 && TargetMap == Map.Tokuno)
- TargetMap = Map.Trammel;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- ReplaceWith(new SOS(TargetMap, m_Level));
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501891); // You extract the message from the bottle.
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
- }
-}
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class MessageInABottle : Item
+ {
+ private int m_Level;
+
+ [Constructible]
+ public MessageInABottle(Map map = null) : this(map, GetRandomLevel())
+ {
+ }
+
+ [Constructible]
+ public MessageInABottle(Map map, int level) : base(0x099F)
+ {
+ Weight = 1.0;
+ TargetMap = map ?? Map.Trammel;
+ m_Level = level;
+ }
+
+ public MessageInABottle(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041080; // a message in a bottle
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Map TargetMap { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Level
+ {
+ get => m_Level;
+ set => m_Level = Math.Max(1, Math.Min(value, 4));
+ }
+
+ public static int GetRandomLevel()
+ {
+ if (Core.AOS && Utility.Random(25) < 1)
+ return 4; // ancient
+
+ return Utility.RandomMinMax(1, 3);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(3); // version
+
+ writer.Write(m_Level);
+
+ writer.Write(TargetMap);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 3:
+ case 2:
+ {
+ m_Level = reader.ReadInt();
+ goto case 1;
+ }
+ case 1:
+ {
+ TargetMap = reader.ReadMap();
+ break;
+ }
+ case 0:
+ {
+ TargetMap = Map.Trammel;
+ break;
+ }
+ }
+
+ if (version < 2)
+ m_Level = GetRandomLevel();
+
+ if (version < 3 && TargetMap == Map.Tokuno)
+ TargetMap = Map.Trammel;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ ReplaceWith(new SOS(TargetMap, m_Level));
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501891); // You extract the message from the bottle.
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs b/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs
index bf3880b73..bfe3fe2ca 100644
--- a/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs
+++ b/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs
@@ -1,304 +1,304 @@
-using System;
-using Server.Gumps;
-
-namespace Server.Items
-{
- [Flippable(0x14ED, 0x14EE)]
- public class SOS : Item
- {
- public override int LabelNumber
- {
- get
- {
- if (IsAncient)
- return 1063450; // an ancient SOS
-
- return 1041081; // a waterstained SOS
- }
- }
-
- private int m_Level;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsAncient => m_Level >= 4;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Level
- {
- get => m_Level;
- set
- {
- m_Level = Math.Max(1, Math.Min(value, 4));
- UpdateHue();
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Map TargetMap { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Point3D TargetLocation { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int MessageIndex { get; set; }
-
- public void UpdateHue()
- {
- if (IsAncient)
- Hue = 0x481;
- else
- Hue = 0;
- }
-
- [Constructible]
- public SOS(Map map = null) : this(map, MessageInABottle.GetRandomLevel())
- {
- }
-
- [Constructible]
- public SOS(Map map, int level) : base(0x14EE)
- {
- Weight = 1.0;
-
- m_Level = level;
- MessageIndex = Utility.Random(MessageEntry.Entries.Length);
- TargetMap = map ?? Map.Trammel;
- TargetLocation = FindLocation(TargetMap);
-
- UpdateHue();
- }
-
- public SOS(Serial serial) : base(serial)
- {
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(4); // version
-
- writer.Write(m_Level);
-
- writer.Write(TargetMap);
- writer.Write(TargetLocation);
- writer.Write(MessageIndex);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 4:
- case 3:
- case 2:
- {
- m_Level = reader.ReadInt();
- goto case 1;
- }
- case 1:
- {
- TargetMap = reader.ReadMap();
- TargetLocation = reader.ReadPoint3D();
- MessageIndex = reader.ReadInt();
-
- break;
- }
- case 0:
- {
- TargetMap = Map;
-
- if (TargetMap == null || TargetMap == Map.Internal)
- TargetMap = Map.Trammel;
-
- TargetLocation = FindLocation(TargetMap);
- MessageIndex = Utility.Random(MessageEntry.Entries.Length);
-
- break;
- }
- }
-
- if (version < 2)
- m_Level = MessageInABottle.GetRandomLevel();
-
- if (version < 3)
- UpdateHue();
-
- if (version < 4 && TargetMap == Map.Tokuno)
- TargetMap = Map.Trammel;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- MessageEntry entry;
-
- if (MessageIndex >= 0 && MessageIndex < MessageEntry.Entries.Length)
- entry = MessageEntry.Entries[MessageIndex];
- else
- entry = MessageEntry.Entries[MessageIndex = Utility.Random(MessageEntry.Entries.Length)];
-
- // from.CloseGump( typeof( MessageGump ) );
- from.SendGump(new MessageGump(entry, TargetMap, TargetLocation));
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
-
- private static readonly int[] m_WaterTiles =
- {
- 0x00A8, 0x00AB,
- 0x0136, 0x0137
- };
-
- private static readonly Rectangle2D[] m_BritRegions = { new Rectangle2D(0, 0, 5120, 4096) };
-
- private static readonly Rectangle2D[] m_IlshRegions =
- { new Rectangle2D(1472, 272, 304, 240), new Rectangle2D(1240, 1000, 312, 160) };
-
- private static readonly Rectangle2D[] m_MalasRegions = { new Rectangle2D(1376, 1520, 464, 280) };
-
- public static Point3D FindLocation(Map map)
- {
- if (map == null || map == Map.Internal)
- return Point3D.Zero;
-
- Rectangle2D[] regions;
-
- if (map == Map.Felucca || map == Map.Trammel)
- regions = m_BritRegions;
- else if (map == Map.Ilshenar)
- regions = m_IlshRegions;
- else if (map == Map.Malas)
- regions = m_MalasRegions;
- else
- regions = new[] { new Rectangle2D(0, 0, map.Width, map.Height) };
-
- if (regions.Length == 0)
- return Point3D.Zero;
-
- for (int i = 0; i < 50; ++i)
- {
- Rectangle2D reg = regions.RandomElement();
- int x = Utility.Random(reg.X, reg.Width);
- int y = Utility.Random(reg.Y, reg.Height);
-
- if (!ValidateDeepWater(map, x, y))
- continue;
-
- bool valid = true;
-
- for (int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5)
- if (!ValidateDeepWater(map, x + offset, y + offset))
- valid = false;
- else if (!ValidateDeepWater(map, x + offset, y - offset))
- valid = false;
- else if (!ValidateDeepWater(map, x - offset, y + offset))
- valid = false;
- else if (!ValidateDeepWater(map, x - offset, y - offset))
- valid = false;
-
- if (valid)
- return new Point3D(x, y, 0);
- }
-
- return Point3D.Zero;
- }
-
- private static bool ValidateDeepWater(Map map, int x, int y)
- {
- int tileID = map.Tiles.GetLandTile(x, y).ID;
- bool water = false;
-
- for (int i = 0; !water && i < m_WaterTiles.Length; i += 2)
- water = tileID >= m_WaterTiles[i] && tileID <= m_WaterTiles[i + 1];
-
- return water;
- }
-
- private class MessageGump : Gump
- {
- public MessageGump(MessageEntry entry, Map map, Point3D loc) : base(150, 50)
- {
- int xLong = 0, yLat = 0;
- int xMins = 0, yMins = 0;
- bool xEast = false, ySouth = false;
- string fmt;
-
- if (Sextant.Format(loc, map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth))
- fmt = $"{yLat}°{yMins}'{(ySouth ? "S" : "N")},{xLong}°{xMins}'{(xEast ? "E" : "W")}";
- else
- fmt = "?????";
-
- AddPage(0);
-
- AddBackground(0, 40, 350, 300, 2520);
-
- /* This is a message hastily scribbled by a passenger aboard a sinking ship.
- * While it is probably too late to save the passengers and crew,
- * perhaps some treasure went down with the ship!
- * The message gives the ship's last known sextant co-ordinates.
- */
- AddHtmlLocalized(30, 80, 285, 160, 1018326, true,
- true);
-
- AddHtml(35, 240, 230, 20, fmt);
-
- AddButton(35, 265, 4005, 4007, 0);
- AddHtmlLocalized(70, 265, 100, 20, 1011036); // OKAY
- }
- }
-
- private class MessageEntry
- {
- public MessageEntry(int width, int height, string message)
- {
- Width = width;
- Height = height;
- Message = message;
- }
-
- public int Width { get; }
-
- public int Height { get; }
-
- public string Message { get; }
-
- public static MessageEntry[] Entries { get; } =
- {
- new MessageEntry(280, 180,
- "...Ar! {0} and a fair wind! No chance... storms, though--ar! Is that a sea serp...
uh oh."),
- new MessageEntry(280, 215,
- "...been inside this whale for three days now. I've run out of food I can pick out of his teeth. I took a sextant reading through the blowhole: {0}. I'll never see my treasure again..."),
- new MessageEntry(280, 285,
- "...grand adventure! Captain Quacklebush had me swab down the decks daily... ...pirates came, I was in the rigging practicing with my sextant. {0} if I am not mistaken... ....scuttled the ship, and our precious cargo went with her and the screaming pirates, down to the bottom of the sea..."),
- new MessageEntry(280, 180,
- "Help! Ship going dow...n heavy storms...precious cargo...st reach dest...current coordinates {0}...ve any survivors... ease!"),
- new MessageEntry(280, 215,
- "...know that the wreck is near {0} but have not found it. Could the message passed down in my family for generations be wrong? No... I swear on the soul of my grandfather, I will find..."),
- new MessageEntry(280, 195,
- "...never expected an iceberg...silly woman on bow crushed instantly...send help to {0}...ey'll never forget the tragedy of the sinking of the Miniscule..."),
- new MessageEntry(280, 265,
- "...nobody knew I was a girl. They just assumed I was another sailor...then we met the undine. {0}. It was demanded sacrifice...I was youngset, they figured... ...grabbed the captain's treasure, screamed, 'It'll go down with me!' ...they took me up on it."),
- new MessageEntry(280, 230,
- "...so I threw the treasure overboard, before the curse could get me too. But I was too late. Now I am doomed to wander these seas, a ghost forever. Join me: seek ye at {0} if thou wishest my company..."),
- new MessageEntry(280, 285,
- "...then the ship exploded. A dragon swooped by. The slime swallowed Bertie whole--he screamed, it was amazing. The sky glowed orange. A sextant reading put us at {0}. Norma was chattering about sailing over the edge of the world. I looked at my hands and saw through them..."),
- new MessageEntry(280, 285,
- "...trapped on a deserted island, with a magic fountain supplying wood, fresh water springs, gorgeous scenery, and my lovely young wife. I know the ship with all our life's earnings sank at {0} but I don't know what our coordinates are... someone has GOT to rescue me before Sunday's finals game or I'll go mad..."),
- new MessageEntry(280, 160,
- "WANTED: divers exp...d in shipwre...overy. Must have own vess...pply at {0} ...good benefits, flexible hours..."),
- new MessageEntry(280, 250,
- "...was a cad and a boor, no matter what momma s...rew him overboard! Oh, Anna, 'twas so exciting! Unfort...y he grabbe...est, and all his riches went with him! ...sked the captain, and he says we're at {0} ...so maybe...")
- };
- }
- }
-}
+using System;
+using Server.Gumps;
+
+namespace Server.Items
+{
+ [Flippable(0x14ED, 0x14EE)]
+ public class SOS : Item
+ {
+ public override int LabelNumber
+ {
+ get
+ {
+ if (IsAncient)
+ return 1063450; // an ancient SOS
+
+ return 1041081; // a waterstained SOS
+ }
+ }
+
+ private int m_Level;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsAncient => m_Level >= 4;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Level
+ {
+ get => m_Level;
+ set
+ {
+ m_Level = Math.Max(1, Math.Min(value, 4));
+ UpdateHue();
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Map TargetMap { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Point3D TargetLocation { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int MessageIndex { get; set; }
+
+ public void UpdateHue()
+ {
+ if (IsAncient)
+ Hue = 0x481;
+ else
+ Hue = 0;
+ }
+
+ [Constructible]
+ public SOS(Map map = null) : this(map, MessageInABottle.GetRandomLevel())
+ {
+ }
+
+ [Constructible]
+ public SOS(Map map, int level) : base(0x14EE)
+ {
+ Weight = 1.0;
+
+ m_Level = level;
+ MessageIndex = Utility.Random(MessageEntry.Entries.Length);
+ TargetMap = map ?? Map.Trammel;
+ TargetLocation = FindLocation(TargetMap);
+
+ UpdateHue();
+ }
+
+ public SOS(Serial serial) : base(serial)
+ {
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(4); // version
+
+ writer.Write(m_Level);
+
+ writer.Write(TargetMap);
+ writer.Write(TargetLocation);
+ writer.Write(MessageIndex);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 4:
+ case 3:
+ case 2:
+ {
+ m_Level = reader.ReadInt();
+ goto case 1;
+ }
+ case 1:
+ {
+ TargetMap = reader.ReadMap();
+ TargetLocation = reader.ReadPoint3D();
+ MessageIndex = reader.ReadInt();
+
+ break;
+ }
+ case 0:
+ {
+ TargetMap = Map;
+
+ if (TargetMap == null || TargetMap == Map.Internal)
+ TargetMap = Map.Trammel;
+
+ TargetLocation = FindLocation(TargetMap);
+ MessageIndex = Utility.Random(MessageEntry.Entries.Length);
+
+ break;
+ }
+ }
+
+ if (version < 2)
+ m_Level = MessageInABottle.GetRandomLevel();
+
+ if (version < 3)
+ UpdateHue();
+
+ if (version < 4 && TargetMap == Map.Tokuno)
+ TargetMap = Map.Trammel;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ MessageEntry entry;
+
+ if (MessageIndex >= 0 && MessageIndex < MessageEntry.Entries.Length)
+ entry = MessageEntry.Entries[MessageIndex];
+ else
+ entry = MessageEntry.Entries[MessageIndex = Utility.Random(MessageEntry.Entries.Length)];
+
+ // from.CloseGump( typeof( MessageGump ) );
+ from.SendGump(new MessageGump(entry, TargetMap, TargetLocation));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+
+ private static readonly int[] m_WaterTiles =
+ {
+ 0x00A8, 0x00AB,
+ 0x0136, 0x0137
+ };
+
+ private static readonly Rectangle2D[] m_BritRegions = { new Rectangle2D(0, 0, 5120, 4096) };
+
+ private static readonly Rectangle2D[] m_IlshRegions =
+ { new Rectangle2D(1472, 272, 304, 240), new Rectangle2D(1240, 1000, 312, 160) };
+
+ private static readonly Rectangle2D[] m_MalasRegions = { new Rectangle2D(1376, 1520, 464, 280) };
+
+ public static Point3D FindLocation(Map map)
+ {
+ if (map == null || map == Map.Internal)
+ return Point3D.Zero;
+
+ Rectangle2D[] regions;
+
+ if (map == Map.Felucca || map == Map.Trammel)
+ regions = m_BritRegions;
+ else if (map == Map.Ilshenar)
+ regions = m_IlshRegions;
+ else if (map == Map.Malas)
+ regions = m_MalasRegions;
+ else
+ regions = new[] { new Rectangle2D(0, 0, map.Width, map.Height) };
+
+ if (regions.Length == 0)
+ return Point3D.Zero;
+
+ for (int i = 0; i < 50; ++i)
+ {
+ Rectangle2D reg = regions.RandomElement();
+ int x = Utility.Random(reg.X, reg.Width);
+ int y = Utility.Random(reg.Y, reg.Height);
+
+ if (!ValidateDeepWater(map, x, y))
+ continue;
+
+ bool valid = true;
+
+ for (int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5)
+ if (!ValidateDeepWater(map, x + offset, y + offset))
+ valid = false;
+ else if (!ValidateDeepWater(map, x + offset, y - offset))
+ valid = false;
+ else if (!ValidateDeepWater(map, x - offset, y + offset))
+ valid = false;
+ else if (!ValidateDeepWater(map, x - offset, y - offset))
+ valid = false;
+
+ if (valid)
+ return new Point3D(x, y, 0);
+ }
+
+ return Point3D.Zero;
+ }
+
+ private static bool ValidateDeepWater(Map map, int x, int y)
+ {
+ int tileID = map.Tiles.GetLandTile(x, y).ID;
+ bool water = false;
+
+ for (int i = 0; !water && i < m_WaterTiles.Length; i += 2)
+ water = tileID >= m_WaterTiles[i] && tileID <= m_WaterTiles[i + 1];
+
+ return water;
+ }
+
+ private class MessageGump : Gump
+ {
+ public MessageGump(MessageEntry entry, Map map, Point3D loc) : base(150, 50)
+ {
+ int xLong = 0, yLat = 0;
+ int xMins = 0, yMins = 0;
+ bool xEast = false, ySouth = false;
+ string fmt;
+
+ if (Sextant.Format(loc, map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth))
+ fmt = $"{yLat}°{yMins}'{(ySouth ? "S" : "N")},{xLong}°{xMins}'{(xEast ? "E" : "W")}";
+ else
+ fmt = "?????";
+
+ AddPage(0);
+
+ AddBackground(0, 40, 350, 300, 2520);
+
+ /* This is a message hastily scribbled by a passenger aboard a sinking ship.
+ * While it is probably too late to save the passengers and crew,
+ * perhaps some treasure went down with the ship!
+ * The message gives the ship's last known sextant co-ordinates.
+ */
+ AddHtmlLocalized(30, 80, 285, 160, 1018326, true,
+ true);
+
+ AddHtml(35, 240, 230, 20, fmt);
+
+ AddButton(35, 265, 4005, 4007, 0);
+ AddHtmlLocalized(70, 265, 100, 20, 1011036); // OKAY
+ }
+ }
+
+ private class MessageEntry
+ {
+ public MessageEntry(int width, int height, string message)
+ {
+ Width = width;
+ Height = height;
+ Message = message;
+ }
+
+ public int Width { get; }
+
+ public int Height { get; }
+
+ public string Message { get; }
+
+ public static MessageEntry[] Entries { get; } =
+ {
+ new MessageEntry(280, 180,
+ "...Ar! {0} and a fair wind! No chance... storms, though--ar! Is that a sea serp...
uh oh."),
+ new MessageEntry(280, 215,
+ "...been inside this whale for three days now. I've run out of food I can pick out of his teeth. I took a sextant reading through the blowhole: {0}. I'll never see my treasure again..."),
+ new MessageEntry(280, 285,
+ "...grand adventure! Captain Quacklebush had me swab down the decks daily... ...pirates came, I was in the rigging practicing with my sextant. {0} if I am not mistaken... ....scuttled the ship, and our precious cargo went with her and the screaming pirates, down to the bottom of the sea..."),
+ new MessageEntry(280, 180,
+ "Help! Ship going dow...n heavy storms...precious cargo...st reach dest...current coordinates {0}...ve any survivors... ease!"),
+ new MessageEntry(280, 215,
+ "...know that the wreck is near {0} but have not found it. Could the message passed down in my family for generations be wrong? No... I swear on the soul of my grandfather, I will find..."),
+ new MessageEntry(280, 195,
+ "...never expected an iceberg...silly woman on bow crushed instantly...send help to {0}...ey'll never forget the tragedy of the sinking of the Miniscule..."),
+ new MessageEntry(280, 265,
+ "...nobody knew I was a girl. They just assumed I was another sailor...then we met the undine. {0}. It was demanded sacrifice...I was youngset, they figured... ...grabbed the captain's treasure, screamed, 'It'll go down with me!' ...they took me up on it."),
+ new MessageEntry(280, 230,
+ "...so I threw the treasure overboard, before the curse could get me too. But I was too late. Now I am doomed to wander these seas, a ghost forever. Join me: seek ye at {0} if thou wishest my company..."),
+ new MessageEntry(280, 285,
+ "...then the ship exploded. A dragon swooped by. The slime swallowed Bertie whole--he screamed, it was amazing. The sky glowed orange. A sextant reading put us at {0}. Norma was chattering about sailing over the edge of the world. I looked at my hands and saw through them..."),
+ new MessageEntry(280, 285,
+ "...trapped on a deserted island, with a magic fountain supplying wood, fresh water springs, gorgeous scenery, and my lovely young wife. I know the ship with all our life's earnings sank at {0} but I don't know what our coordinates are... someone has GOT to rescue me before Sunday's finals game or I'll go mad..."),
+ new MessageEntry(280, 160,
+ "WANTED: divers exp...d in shipwre...overy. Must have own vess...pply at {0} ...good benefits, flexible hours..."),
+ new MessageEntry(280, 250,
+ "...was a cad and a boor, no matter what momma s...rew him overboard! Oh, Anna, 'twas so exciting! Unfort...y he grabbe...est, and all his riches went with him! ...sked the captain, and he says we're at {0} ...so maybe...")
+ };
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Fishing/Misc/Sextant.cs b/Projects/UOContent/Items/Skill Items/Fishing/Misc/Sextant.cs
index af46726ad..5a8b1528d 100644
--- a/Projects/UOContent/Items/Skill Items/Fishing/Misc/Sextant.cs
+++ b/Projects/UOContent/Items/Skill Items/Fishing/Misc/Sextant.cs
@@ -1,156 +1,156 @@
-using Server.Network;
-
-namespace Server.Items
-{
- public class Sextant : Item
- {
- [Constructible]
- public Sextant() : base(0x1058) => Weight = 2.0;
-
- public Sextant(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)
- {
- int xLong = 0, yLat = 0;
- int xMins = 0, yMins = 0;
- bool xEast = false, ySouth = false;
-
- if (Format(from.Location, from.Map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth))
- {
- string location = $"{yLat}� {yMins}'{(ySouth ? "S" : "N")}, {xLong}� {xMins}'{(xEast ? "E" : "W")}";
- from.LocalOverheadMessage(MessageType.Regular, from.SpeechHue, false, location);
- }
- }
-
- public static bool ComputeMapDetails(Map map, int x, int y, out int xCenter, out int yCenter, out int xWidth,
- out int yHeight)
- {
- xWidth = 5120;
- yHeight = 4096;
-
- if (map == Map.Trammel || map == Map.Felucca)
- {
- if (x >= 0 && y >= 0 && x < 5120 && y < 4096)
- {
- xCenter = 1323;
- yCenter = 1624;
- }
- else if (x >= 5120 && y >= 2304 && x < 6144 && y < 4096)
- {
- xCenter = 5936;
- yCenter = 3112;
- }
- else
- {
- xCenter = 0;
- yCenter = 0;
- return false;
- }
- }
- else if (x >= 0 && y >= 0 && x < map.Width && y < map.Height)
- {
- xCenter = 1323;
- yCenter = 1624;
- }
- else
- {
- xCenter = 0;
- yCenter = 0;
- return false;
- }
-
- return true;
- }
-
- public static Point3D ReverseLookup(Map map, int xLong, int yLat, int xMins, int yMins, bool xEast, bool ySouth)
- {
- if (map == null || map == Map.Internal)
- return Point3D.Zero;
-
- if (!ComputeMapDetails(map, 0, 0, out int xCenter, out int yCenter, out int xWidth, out int yHeight))
- return Point3D.Zero;
-
- double absLong = xLong + (double)xMins / 60;
- double absLat = yLat + (double)yMins / 60;
-
- if (!xEast)
- absLong = 360.0 - absLong;
-
- if (!ySouth)
- absLat = 360.0 - absLat;
-
- int x = xCenter + (int)(absLong * xWidth / 360);
- int y = yCenter + (int)(absLat * yHeight / 360);
-
- if (x < 0)
- x += xWidth;
- else if (x >= xWidth)
- x -= xWidth;
-
- if (y < 0)
- y += yHeight;
- else if (y >= yHeight)
- y -= yHeight;
-
- int z = map.GetAverageZ(x, y);
-
- return new Point3D(x, y, z);
- }
-
- public static bool Format(Point3D p, Map map, ref int xLong, ref int yLat, ref int xMins, ref int yMins,
- ref bool xEast, ref bool ySouth)
- {
- if (map == null || map == Map.Internal)
- return false;
-
- int x = p.X, y = p.Y;
-
- if (!ComputeMapDetails(map, x, y, out int xCenter, out int yCenter, out int xWidth, out int yHeight))
- return false;
-
- double absLong = (double)((x - xCenter) * 360) / xWidth;
- double absLat = (double)((y - yCenter) * 360) / yHeight;
-
- if (absLong > 180.0)
- absLong = -180.0 + absLong % 180.0;
-
- if (absLat > 180.0)
- absLat = -180.0 + absLat % 180.0;
-
- bool east = absLong >= 0, south = absLat >= 0;
-
- if (absLong < 0.0)
- absLong = -absLong;
-
- if (absLat < 0.0)
- absLat = -absLat;
-
- xLong = (int)absLong;
- yLat = (int)absLat;
-
- xMins = (int)(absLong % 1.0 * 60);
- yMins = (int)(absLat % 1.0 * 60);
-
- xEast = east;
- ySouth = south;
-
- return true;
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ public class Sextant : Item
+ {
+ [Constructible]
+ public Sextant() : base(0x1058) => Weight = 2.0;
+
+ public Sextant(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)
+ {
+ int xLong = 0, yLat = 0;
+ int xMins = 0, yMins = 0;
+ bool xEast = false, ySouth = false;
+
+ if (Format(from.Location, from.Map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth))
+ {
+ string location = $"{yLat}� {yMins}'{(ySouth ? "S" : "N")}, {xLong}� {xMins}'{(xEast ? "E" : "W")}";
+ from.LocalOverheadMessage(MessageType.Regular, from.SpeechHue, false, location);
+ }
+ }
+
+ public static bool ComputeMapDetails(Map map, int x, int y, out int xCenter, out int yCenter, out int xWidth,
+ out int yHeight)
+ {
+ xWidth = 5120;
+ yHeight = 4096;
+
+ if (map == Map.Trammel || map == Map.Felucca)
+ {
+ if (x >= 0 && y >= 0 && x < 5120 && y < 4096)
+ {
+ xCenter = 1323;
+ yCenter = 1624;
+ }
+ else if (x >= 5120 && y >= 2304 && x < 6144 && y < 4096)
+ {
+ xCenter = 5936;
+ yCenter = 3112;
+ }
+ else
+ {
+ xCenter = 0;
+ yCenter = 0;
+ return false;
+ }
+ }
+ else if (x >= 0 && y >= 0 && x < map.Width && y < map.Height)
+ {
+ xCenter = 1323;
+ yCenter = 1624;
+ }
+ else
+ {
+ xCenter = 0;
+ yCenter = 0;
+ return false;
+ }
+
+ return true;
+ }
+
+ public static Point3D ReverseLookup(Map map, int xLong, int yLat, int xMins, int yMins, bool xEast, bool ySouth)
+ {
+ if (map == null || map == Map.Internal)
+ return Point3D.Zero;
+
+ if (!ComputeMapDetails(map, 0, 0, out int xCenter, out int yCenter, out int xWidth, out int yHeight))
+ return Point3D.Zero;
+
+ double absLong = xLong + (double)xMins / 60;
+ double absLat = yLat + (double)yMins / 60;
+
+ if (!xEast)
+ absLong = 360.0 - absLong;
+
+ if (!ySouth)
+ absLat = 360.0 - absLat;
+
+ int x = xCenter + (int)(absLong * xWidth / 360);
+ int y = yCenter + (int)(absLat * yHeight / 360);
+
+ if (x < 0)
+ x += xWidth;
+ else if (x >= xWidth)
+ x -= xWidth;
+
+ if (y < 0)
+ y += yHeight;
+ else if (y >= yHeight)
+ y -= yHeight;
+
+ int z = map.GetAverageZ(x, y);
+
+ return new Point3D(x, y, z);
+ }
+
+ public static bool Format(Point3D p, Map map, ref int xLong, ref int yLat, ref int xMins, ref int yMins,
+ ref bool xEast, ref bool ySouth)
+ {
+ if (map == null || map == Map.Internal)
+ return false;
+
+ int x = p.X, y = p.Y;
+
+ if (!ComputeMapDetails(map, x, y, out int xCenter, out int yCenter, out int xWidth, out int yHeight))
+ return false;
+
+ double absLong = (double)((x - xCenter) * 360) / xWidth;
+ double absLat = (double)((y - yCenter) * 360) / yHeight;
+
+ if (absLong > 180.0)
+ absLong = -180.0 + absLong % 180.0;
+
+ if (absLat > 180.0)
+ absLat = -180.0 + absLat % 180.0;
+
+ bool east = absLong >= 0, south = absLat >= 0;
+
+ if (absLong < 0.0)
+ absLong = -absLong;
+
+ if (absLat < 0.0)
+ absLat = -absLat;
+
+ xLong = (int)absLong;
+ yLat = (int)absLat;
+
+ xMins = (int)(absLong % 1.0 * 60);
+ yMins = (int)(absLat % 1.0 * 60);
+
+ xEast = east;
+ ySouth = south;
+
+ return true;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Fishing/Misc/ShipwreckedItem.cs b/Projects/UOContent/Items/Skill Items/Fishing/Misc/ShipwreckedItem.cs
index 9fbfef0ca..74cd8c96e 100644
--- a/Projects/UOContent/Items/Skill Items/Fishing/Misc/ShipwreckedItem.cs
+++ b/Projects/UOContent/Items/Skill Items/Fishing/Misc/ShipwreckedItem.cs
@@ -1,70 +1,70 @@
-namespace Server.Items
-{
- public interface IShipwreckedItem
- {
- bool IsShipwreckedItem { get; set; }
- }
-
- public class ShipwreckedItem : Item, IDyable, IShipwreckedItem
- {
- public ShipwreckedItem(int itemID) : base(itemID)
- {
- int weight = ItemData.Weight;
-
- if (weight >= 255)
- weight = 1;
-
- Weight = weight;
- }
-
- public ShipwreckedItem(Serial serial) : base(serial)
- {
- }
-
- public bool Dye(Mobile from, DyeTub sender)
- {
- if (Deleted)
- return false;
-
- if (ItemID >= 0x13A4 && ItemID <= 0x13AE)
- {
- Hue = sender.DyedHue;
- return true;
- }
-
- from.SendLocalizedMessage(sender.FailMessage);
- return false;
- }
-
- bool IShipwreckedItem.IsShipwreckedItem
- {
- get => true;
- set { }
- }
-
- public override void OnSingleClick(Mobile from)
- {
- LabelTo(from, 1050039, $"#{LabelNumber}\t#1041645");
- }
-
- public override void AddNameProperties(ObjectPropertyList list)
- {
- base.AddNameProperties(list);
- list.Add(1041645); // recovered from a shipwreck
- }
-
- 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 interface IShipwreckedItem
+ {
+ bool IsShipwreckedItem { get; set; }
+ }
+
+ public class ShipwreckedItem : Item, IDyable, IShipwreckedItem
+ {
+ public ShipwreckedItem(int itemID) : base(itemID)
+ {
+ int weight = ItemData.Weight;
+
+ if (weight >= 255)
+ weight = 1;
+
+ Weight = weight;
+ }
+
+ public ShipwreckedItem(Serial serial) : base(serial)
+ {
+ }
+
+ public bool Dye(Mobile from, DyeTub sender)
+ {
+ if (Deleted)
+ return false;
+
+ if (ItemID >= 0x13A4 && ItemID <= 0x13AE)
+ {
+ Hue = sender.DyedHue;
+ return true;
+ }
+
+ from.SendLocalizedMessage(sender.FailMessage);
+ return false;
+ }
+
+ bool IShipwreckedItem.IsShipwreckedItem
+ {
+ get => true;
+ set { }
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ LabelTo(from, 1050039, $"#{LabelNumber}\t#1041645");
+ }
+
+ public override void AddNameProperties(ObjectPropertyList list)
+ {
+ base.AddNameProperties(list);
+ list.Add(1041645); // recovered from a shipwreck
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Fishing/Misc/SpecialFishingNet.cs b/Projects/UOContent/Items/Skill Items/Fishing/Misc/SpecialFishingNet.cs
index f0b271bed..ac8f785bd 100644
--- a/Projects/UOContent/Items/Skill Items/Fishing/Misc/SpecialFishingNet.cs
+++ b/Projects/UOContent/Items/Skill Items/Fishing/Misc/SpecialFishingNet.cs
@@ -1,408 +1,408 @@
-using System;
-using Server.Mobiles;
-using Server.Multis;
-using Server.Spells;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public class SpecialFishingNet : Item
- {
- private static readonly int[] m_Hues =
- {
- 0x09B,
- 0x0CD,
- 0x0D3,
- 0x14D,
- 0x1DD,
- 0x1E9,
- 0x1F4,
- 0x373,
- 0x451,
- 0x47F,
- 0x489,
- 0x492,
- 0x4B5,
- 0x8AA
- };
-
- private static readonly int[] m_WaterTiles =
- {
- 0x00A8, 0x00AB,
- 0x0136, 0x0137
- };
-
- private static readonly int[] m_UndeepWaterTiles =
- {
- 0x1797, 0x179C
- };
-
- [Constructible]
- public SpecialFishingNet() : base(0x0DCA)
- {
- Weight = 1.0;
-
- if (Utility.RandomDouble() < 0.01)
- Hue = m_Hues.RandomElement();
- else
- Hue = 0x8A0;
- }
-
- public SpecialFishingNet(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041079; // a special fishing net
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool InUse { get; set; }
-
- public virtual bool RequireDeepWater => true;
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- AddNetProperties(list);
- }
-
- protected virtual void AddNetProperties(ObjectPropertyList list)
- {
- // as if the name wasn't enough..
- list.Add(1017410); // Special Fishing Net
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(InUse);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- InUse = reader.ReadBool();
-
- if (InUse)
- Delete();
-
- break;
- }
- }
-
- Stackable = false;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (InUse)
- {
- from.SendLocalizedMessage(1010483); // Someone is already using that net!
- }
- else if (IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1010484); // Where do you wish to use the net?
- from.BeginTarget(-1, true, TargetFlags.None, OnTarget);
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
-
- public void OnTarget(Mobile from, object obj)
- {
- if (Deleted || InUse)
- return;
-
- if (!(obj is IPoint3D p3D))
- return;
-
- Map map = from.Map;
-
- if (map == null || map == Map.Internal)
- return;
-
- int x = p3D.X, y = p3D.Y, z = map.GetAverageZ(x, y); // OSI just takes the targeted Z
-
- if (!from.InRange(p3D, 6))
- {
- from.SendLocalizedMessage(500976); // You need to be closer to the water to fish!
- }
- else if (!from.InLOS(obj))
- {
- from.SendLocalizedMessage(500979); // You cannot see that location.
- }
- else if (RequireDeepWater
- ? FullValidation(map, x, y)
- : ValidateDeepWater(map, x, y) || ValidateUndeepWater(map, obj, ref z))
- {
- Point3D p = new Point3D(x, y, z);
-
- if (GetType() == typeof(SpecialFishingNet))
- for (int i = 1; i < Amount; ++i) // these were stackable before, doh
- from.AddToBackpack(new SpecialFishingNet());
-
- InUse = true;
- Movable = false;
- MoveToWorld(p, map);
-
- SpellHelper.Turn(from, p);
- from.Animate(12, 5, 1, true, false, 0);
-
- Effects.SendLocationEffect(p, map, 0x352D, 16, 4);
- Effects.PlaySound(p, map, 0x364);
-
- int index = 0;
-
- Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.25), 14,
- () => DoEffect(from, p, index++));
-
- from.SendLocalizedMessage(RequireDeepWater
- ? 1010487
- : 1074492); // You plunge the net into the sea... / You plunge the net into the water...
- }
- else
- {
- from.SendLocalizedMessage(RequireDeepWater
- ? 1010485
- : 1074491); // You can only use this net in deep water! / You can only use this net in water!
- }
- }
-
- private void DoEffect(Mobile from, Point3D p, int index)
- {
- if (Deleted)
- return;
-
- if (index == 1)
- {
- Effects.SendLocationEffect(p, Map, 0x352D, 16, 4);
- Effects.PlaySound(p, Map, 0x364);
- }
- else if (index <= 7 || index == 14)
- {
- if (RequireDeepWater)
- for (int i = 0; i < 3; ++i)
- {
- int x, y;
-
- switch (Utility.Random(8))
- {
- default:
- case 0:
- x = -1;
- y = -1;
- break;
- case 1:
- x = -1;
- y = 0;
- break;
- case 2:
- x = -1;
- y = +1;
- break;
- case 3:
- x = 0;
- y = -1;
- break;
- case 4:
- x = 0;
- y = +1;
- break;
- case 5:
- x = +1;
- y = -1;
- break;
- case 6:
- x = +1;
- y = 0;
- break;
- case 7:
- x = +1;
- y = +1;
- break;
- }
-
- Effects.SendLocationEffect(new Point3D(p.X + x, p.Y + y, p.Z), Map, 0x352D, 16, 4);
- }
- else
- Effects.SendLocationEffect(p, Map, 0x352D, 16, 4);
-
- if (Utility.RandomBool())
- Effects.PlaySound(p, Map, 0x364);
-
- if (index == 14)
- FinishEffect(p, Map, from);
- else
- Z -= 1;
- }
- }
-
- protected virtual int GetSpawnCount()
- {
- int count = Utility.RandomMinMax(1, 3);
-
- if (Hue != 0x8A0)
- count += Utility.RandomMinMax(1, 2);
-
- return count;
- }
-
- protected void Spawn(Point3D p, Map map, BaseCreature spawn)
- {
- if (map == null)
- {
- spawn.Delete();
- return;
- }
-
- int x = p.X, y = p.Y;
-
- for (int j = 0; j < 20; ++j)
- {
- int tx = p.X - 2 + Utility.Random(5);
- int ty = p.Y - 2 + Utility.Random(5);
-
- LandTile t = map.Tiles.GetLandTile(tx, ty);
-
- if (t.Z == p.Z && ((t.ID >= 0xA8 && t.ID <= 0xAB) || (t.ID >= 0x136 && t.ID <= 0x137)) &&
- !SpellHelper.CheckMulti(new Point3D(tx, ty, p.Z), map))
- {
- x = tx;
- y = ty;
- break;
- }
- }
-
- spawn.MoveToWorld(new Point3D(x, y, p.Z), map);
-
- if (spawn is Kraken && Utility.RandomDouble() < 0.2)
- spawn.PackItem(new MessageInABottle(map == Map.Felucca ? Map.Felucca : Map.Trammel));
- }
-
- protected virtual void FinishEffect(Point3D p, Map map, Mobile from)
- {
- from.RevealingAction();
-
- int count = GetSpawnCount();
-
- for (int i = 0; map != null && i < count; ++i)
- {
- var spawn = Utility.Random(4) switch
- {
- 0 => (BaseCreature)new SeaSerpent(),
- 1 => new DeepSeaSerpent(),
- 2 => new WaterElemental(),
- 3 => new Kraken(),
- _ => new SeaSerpent()
- };
-
- Spawn(p, map, spawn);
-
- spawn.Combatant = from;
- }
-
- Delete();
- }
-
- public static bool FullValidation(Map map, int x, int y)
- {
- bool valid = ValidateDeepWater(map, x, y);
-
- for (int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5)
- if (!ValidateDeepWater(map, x + offset, y + offset))
- valid = false;
- else if (!ValidateDeepWater(map, x + offset, y - offset))
- valid = false;
- else if (!ValidateDeepWater(map, x - offset, y + offset))
- valid = false;
- else if (!ValidateDeepWater(map, x - offset, y - offset))
- valid = false;
-
- return valid;
- }
-
- private static bool ValidateDeepWater(Map map, int x, int y)
- {
- int tileID = map.Tiles.GetLandTile(x, y).ID;
- bool water = false;
-
- for (int i = 0; !water && i < m_WaterTiles.Length; i += 2)
- water = tileID >= m_WaterTiles[i] && tileID <= m_WaterTiles[i + 1];
-
- return water;
- }
-
- private static bool ValidateUndeepWater(Map map, object obj, ref int z)
- {
- if (!(obj is StaticTarget))
- return false;
-
- StaticTarget target = (StaticTarget)obj;
-
- if (BaseHouse.FindHouseAt(target.Location, map, 0) != null)
- return false;
-
- int itemID = target.ItemID;
-
- for (int i = 0; i < m_UndeepWaterTiles.Length; i += 2)
- if (itemID >= m_UndeepWaterTiles[i] && itemID <= m_UndeepWaterTiles[i + 1])
- {
- z = target.Z;
- return true;
- }
-
- return false;
- }
- }
-
- public class FabledFishingNet : SpecialFishingNet
- {
- [Constructible]
- public FabledFishingNet() => Hue = 0x481;
-
- public FabledFishingNet(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1063451; // a fabled fishing net
-
- protected override void AddNetProperties(ObjectPropertyList list)
- {
- }
-
- protected override int GetSpawnCount() => base.GetSpawnCount() + 4;
-
- protected override void FinishEffect(Point3D p, Map map, Mobile from)
- {
- Spawn(p, map, new Leviathan(from));
-
- base.FinishEffect(p, map, from);
- }
-
- 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 System;
+using Server.Mobiles;
+using Server.Multis;
+using Server.Spells;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public class SpecialFishingNet : Item
+ {
+ private static readonly int[] m_Hues =
+ {
+ 0x09B,
+ 0x0CD,
+ 0x0D3,
+ 0x14D,
+ 0x1DD,
+ 0x1E9,
+ 0x1F4,
+ 0x373,
+ 0x451,
+ 0x47F,
+ 0x489,
+ 0x492,
+ 0x4B5,
+ 0x8AA
+ };
+
+ private static readonly int[] m_WaterTiles =
+ {
+ 0x00A8, 0x00AB,
+ 0x0136, 0x0137
+ };
+
+ private static readonly int[] m_UndeepWaterTiles =
+ {
+ 0x1797, 0x179C
+ };
+
+ [Constructible]
+ public SpecialFishingNet() : base(0x0DCA)
+ {
+ Weight = 1.0;
+
+ if (Utility.RandomDouble() < 0.01)
+ Hue = m_Hues.RandomElement();
+ else
+ Hue = 0x8A0;
+ }
+
+ public SpecialFishingNet(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041079; // a special fishing net
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool InUse { get; set; }
+
+ public virtual bool RequireDeepWater => true;
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ AddNetProperties(list);
+ }
+
+ protected virtual void AddNetProperties(ObjectPropertyList list)
+ {
+ // as if the name wasn't enough..
+ list.Add(1017410); // Special Fishing Net
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(InUse);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ InUse = reader.ReadBool();
+
+ if (InUse)
+ Delete();
+
+ break;
+ }
+ }
+
+ Stackable = false;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (InUse)
+ {
+ from.SendLocalizedMessage(1010483); // Someone is already using that net!
+ }
+ else if (IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1010484); // Where do you wish to use the net?
+ from.BeginTarget(-1, true, TargetFlags.None, OnTarget);
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+
+ public void OnTarget(Mobile from, object obj)
+ {
+ if (Deleted || InUse)
+ return;
+
+ if (!(obj is IPoint3D p3D))
+ return;
+
+ Map map = from.Map;
+
+ if (map == null || map == Map.Internal)
+ return;
+
+ int x = p3D.X, y = p3D.Y, z = map.GetAverageZ(x, y); // OSI just takes the targeted Z
+
+ if (!from.InRange(p3D, 6))
+ {
+ from.SendLocalizedMessage(500976); // You need to be closer to the water to fish!
+ }
+ else if (!from.InLOS(obj))
+ {
+ from.SendLocalizedMessage(500979); // You cannot see that location.
+ }
+ else if (RequireDeepWater
+ ? FullValidation(map, x, y)
+ : ValidateDeepWater(map, x, y) || ValidateUndeepWater(map, obj, ref z))
+ {
+ Point3D p = new Point3D(x, y, z);
+
+ if (GetType() == typeof(SpecialFishingNet))
+ for (int i = 1; i < Amount; ++i) // these were stackable before, doh
+ from.AddToBackpack(new SpecialFishingNet());
+
+ InUse = true;
+ Movable = false;
+ MoveToWorld(p, map);
+
+ SpellHelper.Turn(from, p);
+ from.Animate(12, 5, 1, true, false, 0);
+
+ Effects.SendLocationEffect(p, map, 0x352D, 16, 4);
+ Effects.PlaySound(p, map, 0x364);
+
+ int index = 0;
+
+ Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.25), 14,
+ () => DoEffect(from, p, index++));
+
+ from.SendLocalizedMessage(RequireDeepWater
+ ? 1010487
+ : 1074492); // You plunge the net into the sea... / You plunge the net into the water...
+ }
+ else
+ {
+ from.SendLocalizedMessage(RequireDeepWater
+ ? 1010485
+ : 1074491); // You can only use this net in deep water! / You can only use this net in water!
+ }
+ }
+
+ private void DoEffect(Mobile from, Point3D p, int index)
+ {
+ if (Deleted)
+ return;
+
+ if (index == 1)
+ {
+ Effects.SendLocationEffect(p, Map, 0x352D, 16, 4);
+ Effects.PlaySound(p, Map, 0x364);
+ }
+ else if (index <= 7 || index == 14)
+ {
+ if (RequireDeepWater)
+ for (int i = 0; i < 3; ++i)
+ {
+ int x, y;
+
+ switch (Utility.Random(8))
+ {
+ default:
+ case 0:
+ x = -1;
+ y = -1;
+ break;
+ case 1:
+ x = -1;
+ y = 0;
+ break;
+ case 2:
+ x = -1;
+ y = +1;
+ break;
+ case 3:
+ x = 0;
+ y = -1;
+ break;
+ case 4:
+ x = 0;
+ y = +1;
+ break;
+ case 5:
+ x = +1;
+ y = -1;
+ break;
+ case 6:
+ x = +1;
+ y = 0;
+ break;
+ case 7:
+ x = +1;
+ y = +1;
+ break;
+ }
+
+ Effects.SendLocationEffect(new Point3D(p.X + x, p.Y + y, p.Z), Map, 0x352D, 16, 4);
+ }
+ else
+ Effects.SendLocationEffect(p, Map, 0x352D, 16, 4);
+
+ if (Utility.RandomBool())
+ Effects.PlaySound(p, Map, 0x364);
+
+ if (index == 14)
+ FinishEffect(p, Map, from);
+ else
+ Z -= 1;
+ }
+ }
+
+ protected virtual int GetSpawnCount()
+ {
+ int count = Utility.RandomMinMax(1, 3);
+
+ if (Hue != 0x8A0)
+ count += Utility.RandomMinMax(1, 2);
+
+ return count;
+ }
+
+ protected void Spawn(Point3D p, Map map, BaseCreature spawn)
+ {
+ if (map == null)
+ {
+ spawn.Delete();
+ return;
+ }
+
+ int x = p.X, y = p.Y;
+
+ for (int j = 0; j < 20; ++j)
+ {
+ int tx = p.X - 2 + Utility.Random(5);
+ int ty = p.Y - 2 + Utility.Random(5);
+
+ LandTile t = map.Tiles.GetLandTile(tx, ty);
+
+ if (t.Z == p.Z && ((t.ID >= 0xA8 && t.ID <= 0xAB) || (t.ID >= 0x136 && t.ID <= 0x137)) &&
+ !SpellHelper.CheckMulti(new Point3D(tx, ty, p.Z), map))
+ {
+ x = tx;
+ y = ty;
+ break;
+ }
+ }
+
+ spawn.MoveToWorld(new Point3D(x, y, p.Z), map);
+
+ if (spawn is Kraken && Utility.RandomDouble() < 0.2)
+ spawn.PackItem(new MessageInABottle(map == Map.Felucca ? Map.Felucca : Map.Trammel));
+ }
+
+ protected virtual void FinishEffect(Point3D p, Map map, Mobile from)
+ {
+ from.RevealingAction();
+
+ int count = GetSpawnCount();
+
+ for (int i = 0; map != null && i < count; ++i)
+ {
+ var spawn = Utility.Random(4) switch
+ {
+ 0 => (BaseCreature)new SeaSerpent(),
+ 1 => new DeepSeaSerpent(),
+ 2 => new WaterElemental(),
+ 3 => new Kraken(),
+ _ => new SeaSerpent()
+ };
+
+ Spawn(p, map, spawn);
+
+ spawn.Combatant = from;
+ }
+
+ Delete();
+ }
+
+ public static bool FullValidation(Map map, int x, int y)
+ {
+ bool valid = ValidateDeepWater(map, x, y);
+
+ for (int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5)
+ if (!ValidateDeepWater(map, x + offset, y + offset))
+ valid = false;
+ else if (!ValidateDeepWater(map, x + offset, y - offset))
+ valid = false;
+ else if (!ValidateDeepWater(map, x - offset, y + offset))
+ valid = false;
+ else if (!ValidateDeepWater(map, x - offset, y - offset))
+ valid = false;
+
+ return valid;
+ }
+
+ private static bool ValidateDeepWater(Map map, int x, int y)
+ {
+ int tileID = map.Tiles.GetLandTile(x, y).ID;
+ bool water = false;
+
+ for (int i = 0; !water && i < m_WaterTiles.Length; i += 2)
+ water = tileID >= m_WaterTiles[i] && tileID <= m_WaterTiles[i + 1];
+
+ return water;
+ }
+
+ private static bool ValidateUndeepWater(Map map, object obj, ref int z)
+ {
+ if (!(obj is StaticTarget))
+ return false;
+
+ StaticTarget target = (StaticTarget)obj;
+
+ if (BaseHouse.FindHouseAt(target.Location, map, 0) != null)
+ return false;
+
+ int itemID = target.ItemID;
+
+ for (int i = 0; i < m_UndeepWaterTiles.Length; i += 2)
+ if (itemID >= m_UndeepWaterTiles[i] && itemID <= m_UndeepWaterTiles[i + 1])
+ {
+ z = target.Z;
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ public class FabledFishingNet : SpecialFishingNet
+ {
+ [Constructible]
+ public FabledFishingNet() => Hue = 0x481;
+
+ public FabledFishingNet(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1063451; // a fabled fishing net
+
+ protected override void AddNetProperties(ObjectPropertyList list)
+ {
+ }
+
+ protected override int GetSpawnCount() => base.GetSpawnCount() + 4;
+
+ protected override void FinishEffect(Point3D p, Map map, Mobile from)
+ {
+ Spawn(p, map, new Leviathan(from));
+
+ base.FinishEffect(p, map, from);
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs
index befeb5c52..3c4dc8248 100644
--- a/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs
+++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs
@@ -1,252 +1,252 @@
-using System;
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Engines.Craft;
-using Server.Engines.Harvest;
-using Server.Mobiles;
-using Server.Network;
-
-namespace Server.Items
-{
- public interface IUsesRemaining
- {
- int UsesRemaining { get; set; }
- bool ShowUsesRemaining { get; set; }
- }
-
- public abstract class BaseHarvestTool : Item, IUsesRemaining, ICraftable
- {
- private Mobile m_Crafter;
- private ToolQuality m_Quality;
- private int m_UsesRemaining;
-
- public BaseHarvestTool(int itemID, int usesRemaining = 50) : base(itemID)
- {
- m_UsesRemaining = usesRemaining;
- m_Quality = ToolQuality.Regular;
- }
-
- public BaseHarvestTool(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Crafter
- {
- get => m_Crafter;
- set
- {
- m_Crafter = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public ToolQuality Quality
- {
- get => m_Quality;
- set
- {
- UnscaleUses();
- m_Quality = value;
- InvalidateProperties();
- ScaleUses();
- }
- }
-
- public abstract HarvestSystem HarvestSystem { get; }
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- Quality = (ToolQuality)quality;
-
- if (makersMark)
- Crafter = from;
-
- return quality;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public void ScaleUses()
- {
- m_UsesRemaining = m_UsesRemaining * GetUsesScalar() / 100;
- InvalidateProperties();
- }
-
- public void UnscaleUses()
- {
- m_UsesRemaining = m_UsesRemaining * 100 / GetUsesScalar();
- }
-
- public int GetUsesScalar()
- {
- if (m_Quality == ToolQuality.Exceptional)
- return 200;
-
- return 100;
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- // Makers mark not displayed on OSI
- // if (m_Crafter != null)
- // list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
-
- if (m_Quality == ToolQuality.Exceptional)
- list.Add(1060636); // exceptional
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
- }
-
- public virtual void DisplayDurabilityTo(Mobile m)
- {
- LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability
- }
-
- public override void OnSingleClick(Mobile from)
- {
- DisplayDurabilityTo(from);
-
- base.OnSingleClick(from);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack) || Parent == from)
- HarvestSystem.BeginHarvesting(from, this);
- else
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- AddContextMenuEntries(from, this, list, HarvestSystem);
- }
-
- public static void AddContextMenuEntries(Mobile from, Item item, List list, HarvestSystem system)
- {
- if (system != Mining.System)
- return;
-
- if (!item.IsChildOf(from.Backpack) && item.Parent != from)
- return;
-
- if (!(from is PlayerMobile pm))
- return;
-
- ContextMenuEntry miningEntry = new ContextMenuEntry(pm.ToggleMiningStone ? 6179 : 6178);
- miningEntry.Color = 0x421F;
- list.Add(miningEntry);
-
- list.Add(new ToggleMiningStoneEntry(pm, false, 6176));
- list.Add(new ToggleMiningStoneEntry(pm, true, 6177));
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(m_Crafter);
- writer.Write((int)m_Quality);
-
- writer.Write(m_UsesRemaining);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- m_Crafter = reader.ReadMobile();
- m_Quality = (ToolQuality)reader.ReadInt();
- goto case 0;
- }
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
- break;
- }
- }
- }
-
- private class ToggleMiningStoneEntry : ContextMenuEntry
- {
- private readonly PlayerMobile m_Mobile;
- private readonly bool m_Value;
-
- public ToggleMiningStoneEntry(PlayerMobile mobile, bool value, int number) : base(number)
- {
- m_Mobile = mobile;
- m_Value = value;
-
- bool stoneMining = mobile.StoneMining && mobile.Skills.Mining.Base >= 100.0;
-
- if (mobile.ToggleMiningStone == value || (value && !stoneMining))
- Flags |= CMEFlags.Disabled;
- }
-
- public override void OnClick()
- {
- bool oldValue = m_Mobile.ToggleMiningStone;
-
- if (m_Value)
- {
- if (oldValue)
- {
- m_Mobile.SendLocalizedMessage(1054023); // You are already set to mine both ore and stone!
- }
- else if (!m_Mobile.StoneMining || m_Mobile.Skills.Mining.Base < 100.0)
- {
- m_Mobile.SendLocalizedMessage(
- 1054024); // You have not learned how to mine stone or you do not have enough skill!
- }
- else
- {
- m_Mobile.ToggleMiningStone = true;
- m_Mobile.SendLocalizedMessage(1054022); // You are now set to mine both ore and stone.
- }
- }
- else
- {
- if (oldValue)
- {
- m_Mobile.ToggleMiningStone = false;
- m_Mobile.SendLocalizedMessage(1054020); // You are now set to mine only ore.
- }
- else
- {
- m_Mobile.SendLocalizedMessage(1054021); // You are already set to mine only ore!
- }
- }
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Engines.Craft;
+using Server.Engines.Harvest;
+using Server.Mobiles;
+using Server.Network;
+
+namespace Server.Items
+{
+ public interface IUsesRemaining
+ {
+ int UsesRemaining { get; set; }
+ bool ShowUsesRemaining { get; set; }
+ }
+
+ public abstract class BaseHarvestTool : Item, IUsesRemaining, ICraftable
+ {
+ private Mobile m_Crafter;
+ private ToolQuality m_Quality;
+ private int m_UsesRemaining;
+
+ public BaseHarvestTool(int itemID, int usesRemaining = 50) : base(itemID)
+ {
+ m_UsesRemaining = usesRemaining;
+ m_Quality = ToolQuality.Regular;
+ }
+
+ public BaseHarvestTool(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Crafter
+ {
+ get => m_Crafter;
+ set
+ {
+ m_Crafter = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public ToolQuality Quality
+ {
+ get => m_Quality;
+ set
+ {
+ UnscaleUses();
+ m_Quality = value;
+ InvalidateProperties();
+ ScaleUses();
+ }
+ }
+
+ public abstract HarvestSystem HarvestSystem { get; }
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ Quality = (ToolQuality)quality;
+
+ if (makersMark)
+ Crafter = from;
+
+ return quality;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public void ScaleUses()
+ {
+ m_UsesRemaining = m_UsesRemaining * GetUsesScalar() / 100;
+ InvalidateProperties();
+ }
+
+ public void UnscaleUses()
+ {
+ m_UsesRemaining = m_UsesRemaining * 100 / GetUsesScalar();
+ }
+
+ public int GetUsesScalar()
+ {
+ if (m_Quality == ToolQuality.Exceptional)
+ return 200;
+
+ return 100;
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ // Makers mark not displayed on OSI
+ // if (m_Crafter != null)
+ // list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
+
+ if (m_Quality == ToolQuality.Exceptional)
+ list.Add(1060636); // exceptional
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+ }
+
+ public virtual void DisplayDurabilityTo(Mobile m)
+ {
+ LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ DisplayDurabilityTo(from);
+
+ base.OnSingleClick(from);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack) || Parent == from)
+ HarvestSystem.BeginHarvesting(from, this);
+ else
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ AddContextMenuEntries(from, this, list, HarvestSystem);
+ }
+
+ public static void AddContextMenuEntries(Mobile from, Item item, List list, HarvestSystem system)
+ {
+ if (system != Mining.System)
+ return;
+
+ if (!item.IsChildOf(from.Backpack) && item.Parent != from)
+ return;
+
+ if (!(from is PlayerMobile pm))
+ return;
+
+ ContextMenuEntry miningEntry = new ContextMenuEntry(pm.ToggleMiningStone ? 6179 : 6178);
+ miningEntry.Color = 0x421F;
+ list.Add(miningEntry);
+
+ list.Add(new ToggleMiningStoneEntry(pm, false, 6176));
+ list.Add(new ToggleMiningStoneEntry(pm, true, 6177));
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(m_Crafter);
+ writer.Write((int)m_Quality);
+
+ writer.Write(m_UsesRemaining);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ m_Crafter = reader.ReadMobile();
+ m_Quality = (ToolQuality)reader.ReadInt();
+ goto case 0;
+ }
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+ break;
+ }
+ }
+ }
+
+ private class ToggleMiningStoneEntry : ContextMenuEntry
+ {
+ private readonly PlayerMobile m_Mobile;
+ private readonly bool m_Value;
+
+ public ToggleMiningStoneEntry(PlayerMobile mobile, bool value, int number) : base(number)
+ {
+ m_Mobile = mobile;
+ m_Value = value;
+
+ bool stoneMining = mobile.StoneMining && mobile.Skills.Mining.Base >= 100.0;
+
+ if (mobile.ToggleMiningStone == value || (value && !stoneMining))
+ Flags |= CMEFlags.Disabled;
+ }
+
+ public override void OnClick()
+ {
+ bool oldValue = m_Mobile.ToggleMiningStone;
+
+ if (m_Value)
+ {
+ if (oldValue)
+ {
+ m_Mobile.SendLocalizedMessage(1054023); // You are already set to mine both ore and stone!
+ }
+ else if (!m_Mobile.StoneMining || m_Mobile.Skills.Mining.Base < 100.0)
+ {
+ m_Mobile.SendLocalizedMessage(
+ 1054024); // You have not learned how to mine stone or you do not have enough skill!
+ }
+ else
+ {
+ m_Mobile.ToggleMiningStone = true;
+ m_Mobile.SendLocalizedMessage(1054022); // You are now set to mine both ore and stone.
+ }
+ }
+ else
+ {
+ if (oldValue)
+ {
+ m_Mobile.ToggleMiningStone = false;
+ m_Mobile.SendLocalizedMessage(1054020); // You are now set to mine only ore.
+ }
+ else
+ {
+ m_Mobile.SendLocalizedMessage(1054021); // You are already set to mine only ore!
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/GargoylesPickaxe.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/GargoylesPickaxe.cs
index 7175a8d69..c052c8022 100644
--- a/Projects/UOContent/Items/Skill Items/Harvest Tools/GargoylesPickaxe.cs
+++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/GargoylesPickaxe.cs
@@ -1,63 +1,63 @@
-using Server.Engines.Harvest;
-
-namespace Server.Items
-{
- public class GargoylesPickaxe : BaseAxe, IUsesRemaining
- {
- [Constructible]
- public GargoylesPickaxe() : this(Utility.RandomMinMax(101, 125))
- {
- }
-
- [Constructible]
- public GargoylesPickaxe(int uses) : base(0xE85 + Utility.Random(2))
- {
- Weight = 11.0;
- UsesRemaining = uses;
- ShowUsesRemaining = true;
- }
-
- public GargoylesPickaxe(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041281; // a gargoyle's pickaxe
- public override HarvestSystem HarvestSystem => Mining.System;
-
- public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
- public override WeaponAbility SecondaryAbility => WeaponAbility.Disarm;
-
- public override int AosStrengthReq => 50;
- public override int AosMinDamage => 13;
- public override int AosMaxDamage => 15;
- public override int AosSpeed => 35;
- public override float MlSpeed => 3.00f;
-
- public override int OldStrengthReq => 25;
- public override int OldMinDamage => 1;
- public override int OldMaxDamage => 15;
- public override int OldSpeed => 35;
-
- public override int InitMinHits => 31;
- public override int InitMaxHits => 60;
-
- public override WeaponAnimation DefAnimation => WeaponAnimation.Slash1H;
-
- 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 == 0x973)
- Hue = 0x0;
- }
- }
+using Server.Engines.Harvest;
+
+namespace Server.Items
+{
+ public class GargoylesPickaxe : BaseAxe, IUsesRemaining
+ {
+ [Constructible]
+ public GargoylesPickaxe() : this(Utility.RandomMinMax(101, 125))
+ {
+ }
+
+ [Constructible]
+ public GargoylesPickaxe(int uses) : base(0xE85 + Utility.Random(2))
+ {
+ Weight = 11.0;
+ UsesRemaining = uses;
+ ShowUsesRemaining = true;
+ }
+
+ public GargoylesPickaxe(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041281; // a gargoyle's pickaxe
+ public override HarvestSystem HarvestSystem => Mining.System;
+
+ public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
+ public override WeaponAbility SecondaryAbility => WeaponAbility.Disarm;
+
+ public override int AosStrengthReq => 50;
+ public override int AosMinDamage => 13;
+ public override int AosMaxDamage => 15;
+ public override int AosSpeed => 35;
+ public override float MlSpeed => 3.00f;
+
+ public override int OldStrengthReq => 25;
+ public override int OldMinDamage => 1;
+ public override int OldMaxDamage => 15;
+ public override int OldSpeed => 35;
+
+ public override int InitMinHits => 31;
+ public override int InitMaxHits => 60;
+
+ public override WeaponAnimation DefAnimation => WeaponAnimation.Slash1H;
+
+ 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 == 0x973)
+ Hue = 0x0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/ProspectorsTool.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/ProspectorsTool.cs
index 901d05f48..4fa2baee0 100644
--- a/Projects/UOContent/Items/Skill Items/Harvest Tools/ProspectorsTool.cs
+++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/ProspectorsTool.cs
@@ -1,174 +1,174 @@
-using System;
-using Server.Engines.Harvest;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public class ProspectorsTool : BaseBashing, IUsesRemaining
- {
- private int m_UsesRemaining;
-
- [Constructible]
- public ProspectorsTool() : base(0xFB4)
- {
- Weight = 9.0;
- UsesRemaining = 50;
- }
-
- public ProspectorsTool(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1049065; // prospector's tool
-
- public override WeaponAbility PrimaryAbility => WeaponAbility.CrushingBlow;
- public override WeaponAbility SecondaryAbility => WeaponAbility.ShadowStrike;
-
- public override int AosStrengthReq => 40;
- public override int AosMinDamage => 13;
- public override int AosMaxDamage => 15;
- public override int AosSpeed => 33;
-
- public override int OldStrengthReq => 10;
- public override int OldMinDamage => 6;
- public override int OldMaxDamage => 8;
- public override int OldSpeed => 33;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack) || Parent == from)
- from.Target = new InternalTarget(this);
- else
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
-
- public void Prospect(Mobile from, object toProspect)
- {
- if (!IsChildOf(from.Backpack) && Parent != from)
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- return;
- }
-
- HarvestSystem system = Mining.System;
-
- if (!system.GetHarvestDetails(from, this, toProspect, out int tileID, out Map map, out Point3D loc))
- {
- from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
- return;
- }
-
- HarvestDefinition def = system.GetDefinition(tileID);
-
- if (def == null || def.Veins.Length <= 1)
- {
- from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
- return;
- }
-
- HarvestBank bank = def.GetBank(map, loc.X, loc.Y);
-
- if (bank == null)
- {
- from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
- return;
- }
-
- HarvestVein vein = bank.Vein, defaultVein = bank.DefaultVein;
-
- if (vein == null || defaultVein == null)
- {
- from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
- return;
- }
-
- if (vein != defaultVein)
- {
- from.SendLocalizedMessage(1049049); // That ore looks to be prospected already.
- return;
- }
-
- int veinIndex = Array.IndexOf(def.Veins, vein);
-
- if (veinIndex < 0)
- {
- from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
- }
- else if (veinIndex >= def.Veins.Length - 1)
- {
- from.SendLocalizedMessage(1049061); // You cannot improve valorite ore through prospecting.
- }
- else
- {
- bank.Vein = def.Veins[veinIndex + 1];
- from.SendLocalizedMessage(1049050 + veinIndex);
-
- --UsesRemaining;
-
- if (UsesRemaining <= 0)
- {
- from.SendLocalizedMessage(1049062); // You have used up your prospector's tool.
- Delete();
- }
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
- writer.Write(m_UsesRemaining);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- m_UsesRemaining = reader.ReadInt();
- break;
- }
- case 0:
- {
- m_UsesRemaining = 50;
- break;
- }
- }
- }
-
- private class InternalTarget : Target
- {
- private readonly ProspectorsTool m_Tool;
-
- public InternalTarget(ProspectorsTool tool) : base(2, true, TargetFlags.None) => m_Tool = tool;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- m_Tool.Prospect(from, targeted);
- }
- }
- }
+using System;
+using Server.Engines.Harvest;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public class ProspectorsTool : BaseBashing, IUsesRemaining
+ {
+ private int m_UsesRemaining;
+
+ [Constructible]
+ public ProspectorsTool() : base(0xFB4)
+ {
+ Weight = 9.0;
+ UsesRemaining = 50;
+ }
+
+ public ProspectorsTool(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1049065; // prospector's tool
+
+ public override WeaponAbility PrimaryAbility => WeaponAbility.CrushingBlow;
+ public override WeaponAbility SecondaryAbility => WeaponAbility.ShadowStrike;
+
+ public override int AosStrengthReq => 40;
+ public override int AosMinDamage => 13;
+ public override int AosMaxDamage => 15;
+ public override int AosSpeed => 33;
+
+ public override int OldStrengthReq => 10;
+ public override int OldMinDamage => 6;
+ public override int OldMaxDamage => 8;
+ public override int OldSpeed => 33;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack) || Parent == from)
+ from.Target = new InternalTarget(this);
+ else
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+
+ public void Prospect(Mobile from, object toProspect)
+ {
+ if (!IsChildOf(from.Backpack) && Parent != from)
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ return;
+ }
+
+ HarvestSystem system = Mining.System;
+
+ if (!system.GetHarvestDetails(from, this, toProspect, out int tileID, out Map map, out Point3D loc))
+ {
+ from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
+ return;
+ }
+
+ HarvestDefinition def = system.GetDefinition(tileID);
+
+ if (def == null || def.Veins.Length <= 1)
+ {
+ from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
+ return;
+ }
+
+ HarvestBank bank = def.GetBank(map, loc.X, loc.Y);
+
+ if (bank == null)
+ {
+ from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
+ return;
+ }
+
+ HarvestVein vein = bank.Vein, defaultVein = bank.DefaultVein;
+
+ if (vein == null || defaultVein == null)
+ {
+ from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
+ return;
+ }
+
+ if (vein != defaultVein)
+ {
+ from.SendLocalizedMessage(1049049); // That ore looks to be prospected already.
+ return;
+ }
+
+ int veinIndex = Array.IndexOf(def.Veins, vein);
+
+ if (veinIndex < 0)
+ {
+ from.SendLocalizedMessage(1049048); // You cannot use your prospector tool on that.
+ }
+ else if (veinIndex >= def.Veins.Length - 1)
+ {
+ from.SendLocalizedMessage(1049061); // You cannot improve valorite ore through prospecting.
+ }
+ else
+ {
+ bank.Vein = def.Veins[veinIndex + 1];
+ from.SendLocalizedMessage(1049050 + veinIndex);
+
+ --UsesRemaining;
+
+ if (UsesRemaining <= 0)
+ {
+ from.SendLocalizedMessage(1049062); // You have used up your prospector's tool.
+ Delete();
+ }
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+ writer.Write(m_UsesRemaining);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ m_UsesRemaining = reader.ReadInt();
+ break;
+ }
+ case 0:
+ {
+ m_UsesRemaining = 50;
+ break;
+ }
+ }
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly ProspectorsTool m_Tool;
+
+ public InternalTarget(ProspectorsTool tool) : base(2, true, TargetFlags.None) => m_Tool = tool;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ m_Tool.Prospect(from, targeted);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/Shovel.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/Shovel.cs
index 0a15fee85..0495b2137 100644
--- a/Projects/UOContent/Items/Skill Items/Harvest Tools/Shovel.cs
+++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/Shovel.cs
@@ -1,30 +1,30 @@
-using Server.Engines.Harvest;
-
-namespace Server.Items
-{
- public class Shovel : BaseHarvestTool
- {
- [Constructible]
- public Shovel(int uses = 50) : base(0xF39, uses) => Weight = 5.0;
-
- public Shovel(Serial serial) : base(serial)
- {
- }
-
- public override HarvestSystem HarvestSystem => Mining.System;
-
- 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.Harvest;
+
+namespace Server.Items
+{
+ public class Shovel : BaseHarvestTool
+ {
+ [Constructible]
+ public Shovel(int uses = 50) : base(0xF39, uses) => Weight = 5.0;
+
+ public Shovel(Serial serial) : base(serial)
+ {
+ }
+
+ public override HarvestSystem HarvestSystem => Mining.System;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyPickaxe.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyPickaxe.cs
index c25570b51..436cda03b 100644
--- a/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyPickaxe.cs
+++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyPickaxe.cs
@@ -1,53 +1,53 @@
-using Server.Engines.Harvest;
-
-namespace Server.Items
-{
- public class SturdyPickaxe : BaseAxe, IUsesRemaining
- {
- [Constructible]
- public SturdyPickaxe(int uses = 180) : base(0xE86)
- {
- Weight = 11.0;
- Hue = 0x973;
- UsesRemaining = uses;
- ShowUsesRemaining = true;
- }
-
- public SturdyPickaxe(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1045126; // sturdy pickaxe
- public override HarvestSystem HarvestSystem => Mining.System;
-
- public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
- public override WeaponAbility SecondaryAbility => WeaponAbility.Disarm;
-
- public override int AosStrengthReq => 50;
- public override int AosMinDamage => 13;
- public override int AosMaxDamage => 15;
- public override int AosSpeed => 35;
- public override float MlSpeed => 3.00f;
-
- public override int OldStrengthReq => 25;
- public override int OldMinDamage => 1;
- public override int OldMaxDamage => 15;
- public override int OldSpeed => 35;
-
- public override WeaponAnimation DefAnimation => WeaponAnimation.Slash1H;
-
- 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.Harvest;
+
+namespace Server.Items
+{
+ public class SturdyPickaxe : BaseAxe, IUsesRemaining
+ {
+ [Constructible]
+ public SturdyPickaxe(int uses = 180) : base(0xE86)
+ {
+ Weight = 11.0;
+ Hue = 0x973;
+ UsesRemaining = uses;
+ ShowUsesRemaining = true;
+ }
+
+ public SturdyPickaxe(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1045126; // sturdy pickaxe
+ public override HarvestSystem HarvestSystem => Mining.System;
+
+ public override WeaponAbility PrimaryAbility => WeaponAbility.DoubleStrike;
+ public override WeaponAbility SecondaryAbility => WeaponAbility.Disarm;
+
+ public override int AosStrengthReq => 50;
+ public override int AosMinDamage => 13;
+ public override int AosMaxDamage => 15;
+ public override int AosSpeed => 35;
+ public override float MlSpeed => 3.00f;
+
+ public override int OldStrengthReq => 25;
+ public override int OldMinDamage => 1;
+ public override int OldMaxDamage => 15;
+ public override int OldSpeed => 35;
+
+ public override WeaponAnimation DefAnimation => WeaponAnimation.Slash1H;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyShovel.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyShovel.cs
index 0d83950ad..27ca76cdc 100644
--- a/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyShovel.cs
+++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/SturdyShovel.cs
@@ -1,35 +1,35 @@
-using Server.Engines.Harvest;
-
-namespace Server.Items
-{
- public class SturdyShovel : BaseHarvestTool
- {
- [Constructible]
- public SturdyShovel(int uses = 180) : base(0xF39, uses)
- {
- Weight = 5.0;
- Hue = 0x973;
- }
-
- public SturdyShovel(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1045125; // sturdy shovel
- public override HarvestSystem HarvestSystem => Mining.System;
-
- 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.Harvest;
+
+namespace Server.Items
+{
+ public class SturdyShovel : BaseHarvestTool
+ {
+ [Constructible]
+ public SturdyShovel(int uses = 180) : base(0xF39, uses)
+ {
+ Weight = 5.0;
+ Hue = 0x973;
+ }
+
+ public SturdyShovel(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1045125; // sturdy shovel
+ public override HarvestSystem HarvestSystem => Mining.System;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Lumberjack/Log.cs b/Projects/UOContent/Items/Skill Items/Lumberjack/Log.cs
index a32546d32..4614869c5 100644
--- a/Projects/UOContent/Items/Skill Items/Lumberjack/Log.cs
+++ b/Projects/UOContent/Items/Skill Items/Lumberjack/Log.cs
@@ -1,334 +1,334 @@
-namespace Server.Items
-{
- [Flippable(0x1bdd, 0x1be0)]
- public class Log : Item, ICommodity, IAxe
- {
- private CraftResource m_Resource;
-
- [Constructible]
- public Log(int amount = 1) : this(CraftResource.RegularWood, amount)
- {
- }
-
- [Constructible]
- public Log(CraftResource resource)
- : this(resource, 1)
- {
- }
-
- [Constructible]
- public Log(CraftResource resource, int amount)
- : base(0x1BDD)
- {
- Stackable = true;
- Weight = 2.0;
- Amount = amount;
-
- m_Resource = resource;
- Hue = CraftResources.GetHue(resource);
- }
-
- public Log(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public CraftResource Resource
- {
- get => m_Resource;
- set
- {
- m_Resource = value;
- InvalidateProperties();
- }
- }
-
- public virtual bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 0, new Board()))
- return false;
-
- return true;
- }
-
- int ICommodity.DescriptionNumber => CraftResources.IsStandard(m_Resource)
- ? LabelNumber
- : 1075062 + ((int)m_Resource - (int)CraftResource.RegularWood);
-
- bool ICommodity.IsDeedable => true;
-
- 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 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;
- }
- }
-
- if (version == 0)
- m_Resource = CraftResource.RegularWood;
- }
-
- public virtual bool TryCreateBoards(Mobile from, double skill, Item item)
- {
- if (Deleted || !from.CanSee(this))
- return false;
- if (from.Skills.Carpentry.Value < skill &&
- from.Skills.Lumberjacking.Value < skill)
- {
- item.Delete();
- from.SendLocalizedMessage(1072652); // You cannot work this strange and unusual wood.
- return false;
- }
-
- ScissorHelper(from, item, 1, false);
- return true;
- }
- }
-
- public class HeartwoodLog : Log
- {
- [Constructible]
- public HeartwoodLog(int amount = 1)
- : base(CraftResource.Heartwood, amount)
- {
- }
-
- public HeartwoodLog(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 bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 100, new HeartwoodBoard()))
- return false;
-
- return true;
- }
- }
-
- public class BloodwoodLog : Log
- {
- [Constructible]
- public BloodwoodLog(int amount = 1)
- : base(CraftResource.Bloodwood, amount)
- {
- }
-
- public BloodwoodLog(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 bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 100, new BloodwoodBoard()))
- return false;
-
- return true;
- }
- }
-
- public class FrostwoodLog : Log
- {
- [Constructible]
- public FrostwoodLog(int amount = 1)
- : base(CraftResource.Frostwood, amount)
- {
- }
-
- public FrostwoodLog(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 bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 100, new FrostwoodBoard()))
- return false;
-
- return true;
- }
- }
-
- public class OakLog : Log
- {
- [Constructible]
- public OakLog(int amount = 1)
- : base(CraftResource.OakWood, amount)
- {
- }
-
- public OakLog(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 bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 65, new OakBoard()))
- return false;
-
- return true;
- }
- }
-
- public class AshLog : Log
- {
- [Constructible]
- public AshLog(int amount = 1)
- : base(CraftResource.AshWood, amount)
- {
- }
-
- public AshLog(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 bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 80, new AshBoard()))
- return false;
-
- return true;
- }
- }
-
- public class YewLog : Log
- {
- [Constructible]
- public YewLog(int amount = 1)
- : base(CraftResource.YewWood, amount)
- {
- }
-
- public YewLog(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 bool Axe(Mobile from, BaseAxe axe)
- {
- if (!TryCreateBoards(from, 95, new YewBoard()))
- return false;
-
- return true;
- }
- }
-}
+namespace Server.Items
+{
+ [Flippable(0x1bdd, 0x1be0)]
+ public class Log : Item, ICommodity, IAxe
+ {
+ private CraftResource m_Resource;
+
+ [Constructible]
+ public Log(int amount = 1) : this(CraftResource.RegularWood, amount)
+ {
+ }
+
+ [Constructible]
+ public Log(CraftResource resource)
+ : this(resource, 1)
+ {
+ }
+
+ [Constructible]
+ public Log(CraftResource resource, int amount)
+ : base(0x1BDD)
+ {
+ Stackable = true;
+ Weight = 2.0;
+ Amount = amount;
+
+ m_Resource = resource;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ public Log(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public CraftResource Resource
+ {
+ get => m_Resource;
+ set
+ {
+ m_Resource = value;
+ InvalidateProperties();
+ }
+ }
+
+ public virtual bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 0, new Board()))
+ return false;
+
+ return true;
+ }
+
+ int ICommodity.DescriptionNumber => CraftResources.IsStandard(m_Resource)
+ ? LabelNumber
+ : 1075062 + ((int)m_Resource - (int)CraftResource.RegularWood);
+
+ bool ICommodity.IsDeedable => true;
+
+ 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 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;
+ }
+ }
+
+ if (version == 0)
+ m_Resource = CraftResource.RegularWood;
+ }
+
+ public virtual bool TryCreateBoards(Mobile from, double skill, Item item)
+ {
+ if (Deleted || !from.CanSee(this))
+ return false;
+ if (from.Skills.Carpentry.Value < skill &&
+ from.Skills.Lumberjacking.Value < skill)
+ {
+ item.Delete();
+ from.SendLocalizedMessage(1072652); // You cannot work this strange and unusual wood.
+ return false;
+ }
+
+ ScissorHelper(from, item, 1, false);
+ return true;
+ }
+ }
+
+ public class HeartwoodLog : Log
+ {
+ [Constructible]
+ public HeartwoodLog(int amount = 1)
+ : base(CraftResource.Heartwood, amount)
+ {
+ }
+
+ public HeartwoodLog(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 bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 100, new HeartwoodBoard()))
+ return false;
+
+ return true;
+ }
+ }
+
+ public class BloodwoodLog : Log
+ {
+ [Constructible]
+ public BloodwoodLog(int amount = 1)
+ : base(CraftResource.Bloodwood, amount)
+ {
+ }
+
+ public BloodwoodLog(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 bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 100, new BloodwoodBoard()))
+ return false;
+
+ return true;
+ }
+ }
+
+ public class FrostwoodLog : Log
+ {
+ [Constructible]
+ public FrostwoodLog(int amount = 1)
+ : base(CraftResource.Frostwood, amount)
+ {
+ }
+
+ public FrostwoodLog(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 bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 100, new FrostwoodBoard()))
+ return false;
+
+ return true;
+ }
+ }
+
+ public class OakLog : Log
+ {
+ [Constructible]
+ public OakLog(int amount = 1)
+ : base(CraftResource.OakWood, amount)
+ {
+ }
+
+ public OakLog(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 bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 65, new OakBoard()))
+ return false;
+
+ return true;
+ }
+ }
+
+ public class AshLog : Log
+ {
+ [Constructible]
+ public AshLog(int amount = 1)
+ : base(CraftResource.AshWood, amount)
+ {
+ }
+
+ public AshLog(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 bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 80, new AshBoard()))
+ return false;
+
+ return true;
+ }
+ }
+
+ public class YewLog : Log
+ {
+ [Constructible]
+ public YewLog(int amount = 1)
+ : base(CraftResource.YewWood, amount)
+ {
+ }
+
+ public YewLog(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 bool Axe(Mobile from, BaseAxe axe)
+ {
+ if (!TryCreateBoards(from, 95, new YewBoard()))
+ return false;
+
+ return true;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/BookOfBushido.cs b/Projects/UOContent/Items/Skill Items/Magical/BookOfBushido.cs
index 8747f024c..72eb8438f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/BookOfBushido.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/BookOfBushido.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class BookOfBushido : Spellbook
- {
- [Constructible]
- public BookOfBushido(ulong content = 0x3F) : base(content, 0x238C) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
-
- public BookOfBushido(Serial serial) : base(serial)
- {
- }
-
- public override SpellbookType SpellbookType => SpellbookType.Samurai;
- public override int BookOffset => 400;
- public override int BookCount => 6;
-
- 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 == 0 && Core.ML)
- Layer = Layer.OneHanded;
- }
- }
-}
+namespace Server.Items
+{
+ public class BookOfBushido : Spellbook
+ {
+ [Constructible]
+ public BookOfBushido(ulong content = 0x3F) : base(content, 0x238C) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
+
+ public BookOfBushido(Serial serial) : base(serial)
+ {
+ }
+
+ public override SpellbookType SpellbookType => SpellbookType.Samurai;
+ public override int BookOffset => 400;
+ public override int BookCount => 6;
+
+ 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 == 0 && Core.ML)
+ Layer = Layer.OneHanded;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/BookOfChivalry.cs b/Projects/UOContent/Items/Skill Items/Magical/BookOfChivalry.cs
index a3cb9e575..c050a0153 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/BookOfChivalry.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/BookOfChivalry.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class BookOfChivalry : Spellbook
- {
- [Constructible]
- public BookOfChivalry(ulong content = 0x3FF) : base(content, 0x2252) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
-
- public BookOfChivalry(Serial serial) : base(serial)
- {
- }
-
- public override SpellbookType SpellbookType => SpellbookType.Paladin;
- public override int BookOffset => 200;
- public override int BookCount => 10;
-
- 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 == 0 && Core.ML)
- Layer = Layer.OneHanded;
- }
- }
-}
+namespace Server.Items
+{
+ public class BookOfChivalry : Spellbook
+ {
+ [Constructible]
+ public BookOfChivalry(ulong content = 0x3FF) : base(content, 0x2252) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
+
+ public BookOfChivalry(Serial serial) : base(serial)
+ {
+ }
+
+ public override SpellbookType SpellbookType => SpellbookType.Paladin;
+ public override int BookOffset => 200;
+ public override int BookCount => 10;
+
+ 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 == 0 && Core.ML)
+ Layer = Layer.OneHanded;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/BookOfNinjitsu.cs b/Projects/UOContent/Items/Skill Items/Magical/BookOfNinjitsu.cs
index f76df4a3f..71350e7d6 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/BookOfNinjitsu.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/BookOfNinjitsu.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class BookOfNinjitsu : Spellbook
- {
- [Constructible]
- public BookOfNinjitsu(ulong content = 0xFF) : base(content, 0x23A0) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
-
- public BookOfNinjitsu(Serial serial) : base(serial)
- {
- }
-
- public override SpellbookType SpellbookType => SpellbookType.Ninja;
- public override int BookOffset => 500;
- public override int BookCount => 8;
-
- 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 == 0 && Core.ML)
- Layer = Layer.OneHanded;
- }
- }
-}
+namespace Server.Items
+{
+ public class BookOfNinjitsu : Spellbook
+ {
+ [Constructible]
+ public BookOfNinjitsu(ulong content = 0xFF) : base(content, 0x23A0) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
+
+ public BookOfNinjitsu(Serial serial) : base(serial)
+ {
+ }
+
+ public override SpellbookType SpellbookType => SpellbookType.Ninja;
+ public override int BookOffset => 500;
+ public override int BookCount => 8;
+
+ 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 == 0 && Core.ML)
+ Layer = Layer.OneHanded;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Misc/BlankScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Misc/BlankScroll.cs
index acb580984..5e5b5c813 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Misc/BlankScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Misc/BlankScroll.cs
@@ -1,34 +1,34 @@
-namespace Server.Items
-{
- public class BlankScroll : Item, ICommodity
- {
- [Constructible]
- public BlankScroll(int amount = 1) : base(0xEF3)
- {
- Stackable = true;
- Weight = 1.0;
- Amount = amount;
- }
-
- public BlankScroll(Serial serial) : base(serial)
- {
- }
-
- int ICommodity.DescriptionNumber => LabelNumber;
- bool ICommodity.IsDeedable => Core.ML;
-
- 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 BlankScroll : Item, ICommodity
+ {
+ [Constructible]
+ public BlankScroll(int amount = 1) : base(0xEF3)
+ {
+ Stackable = true;
+ Weight = 1.0;
+ Amount = amount;
+ }
+
+ public BlankScroll(Serial serial) : base(serial)
+ {
+ }
+
+ int ICommodity.DescriptionNumber => LabelNumber;
+ bool ICommodity.IsDeedable => Core.ML;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Misc/Bottle.cs b/Projects/UOContent/Items/Skill Items/Magical/Misc/Bottle.cs
index ea9a4521f..1959603b4 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Misc/Bottle.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Misc/Bottle.cs
@@ -1,34 +1,34 @@
-namespace Server.Items
-{
- public class Bottle : Item, ICommodity
- {
- [Constructible]
- public Bottle(int amount = 1) : base(0xF0E)
- {
- Stackable = true;
- Weight = 1.0;
- Amount = amount;
- }
-
- public Bottle(Serial serial) : base(serial)
- {
- }
-
- int ICommodity.DescriptionNumber => LabelNumber;
- bool ICommodity.IsDeedable => Core.ML;
-
- 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 Bottle : Item, ICommodity
+ {
+ [Constructible]
+ public Bottle(int amount = 1) : base(0xF0E)
+ {
+ Stackable = true;
+ Weight = 1.0;
+ Amount = amount;
+ }
+
+ public Bottle(Serial serial) : base(serial)
+ {
+ }
+
+ int ICommodity.DescriptionNumber => LabelNumber;
+ bool ICommodity.IsDeedable => Core.ML;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Misc/Moongate.cs b/Projects/UOContent/Items/Skill Items/Magical/Misc/Moongate.cs
index 55af9759d..9da6f2ea4 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Misc/Moongate.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Misc/Moongate.cs
@@ -1,384 +1,384 @@
-using System;
-using Server.Factions;
-using Server.Gumps;
-using Server.Misc;
-using Server.Mobiles;
-using Server.Network;
-using Server.Regions;
-
-namespace Server.Items
-{
- [DispellableField]
- public class Moongate : Item
- {
-[Constructible]
- public Moongate(bool dispellable = true) : this(Point3D.Zero, null, dispellable)
- {
- }
-
- [Constructible]
- public Moongate(Point3D target, Map targetMap = null, bool dispellable = true) : base(0xF6C)
- {
- Movable = false;
- Light = LightType.Circle300;
-
- Target = target;
- TargetMap = targetMap;
- Dispellable = dispellable;
- }
-
- public Moongate(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Point3D Target { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Map TargetMap { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool Dispellable { get; set; }
-
- public virtual bool ShowFeluccaWarning => false;
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!from.Player)
- return;
-
- if (from.InRange(GetWorldLocation(), 1))
- CheckGate(from, 1);
- else
- from.SendLocalizedMessage(500446); // That is too far away.
- }
-
- public override bool OnMoveOver(Mobile m)
- {
- if (m.Player)
- CheckGate(m, 0);
-
- return true;
- }
-
- public virtual void CheckGate(Mobile m, int range)
- {
- if (m.Hidden && m.AccessLevel == AccessLevel.Player && Core.ML)
- m.RevealingAction();
-
- new DelayTimer(m, this, range).Start();
- }
-
- public virtual void OnGateUsed(Mobile m)
- {
- }
-
- public virtual void UseGate(Mobile m)
- {
- ClientFlags flags = m.NetState?.Flags ?? ClientFlags.None;
-
- if (Sigil.ExistsOn(m))
- {
- m.SendLocalizedMessage(1061632); // You can't do that while carrying the sigil.
- }
- else if (TargetMap == Map.Felucca && m is PlayerMobile mobile && mobile.Young)
- {
- mobile.SendLocalizedMessage(1049543); // You decide against traveling to Felucca while you are still young.
- }
- else if ((m.Kills >= 5 && TargetMap != Map.Felucca) ||
- (TargetMap == Map.Tokuno && (flags & ClientFlags.Tokuno) == 0) ||
- (TargetMap == Map.Malas && (flags & ClientFlags.Malas) == 0) ||
- (TargetMap == Map.Ilshenar && (flags & ClientFlags.Ilshenar) == 0))
- {
- m.SendLocalizedMessage(1019004); // You are not allowed to travel there.
- }
- else if (m.Spell != null)
- {
- m.SendLocalizedMessage(1049616); // You are too busy to do that at the moment.
- }
- else if (TargetMap != null && TargetMap != Map.Internal)
- {
- BaseCreature.TeleportPets(m, Target, TargetMap);
-
- m.MoveToWorld(Target, TargetMap);
-
- if (m.AccessLevel == AccessLevel.Player || !m.Hidden)
- m.PlaySound(0x1FE);
-
- OnGateUsed(m);
- }
- else
- {
- m.SendMessage("This moongate does not seem to go anywhere.");
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(Target);
- writer.Write(TargetMap);
-
- // Version 1
- writer.Write(Dispellable);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- Target = reader.ReadPoint3D();
- TargetMap = reader.ReadMap();
-
- if (version >= 1)
- Dispellable = reader.ReadBool();
- }
-
- public virtual bool ValidateUse(Mobile from, bool message)
- {
- if (from.Deleted || Deleted)
- return false;
-
- if (from.Map != Map || !from.InRange(this, 1))
- {
- if (message)
- from.SendLocalizedMessage(500446); // That is too far away.
-
- return false;
- }
-
- return true;
- }
-
- public virtual void BeginConfirmation(Mobile from)
- {
- if ((IsInTown(from.Location, from.Map) && !IsInTown(Target, TargetMap)) ||
- (from.Map != Map.Felucca && TargetMap == Map.Felucca && ShowFeluccaWarning))
- {
- if (from.AccessLevel == AccessLevel.Player || !from.Hidden)
- from.Send(new PlaySound(0x20E, from.Location));
- from.CloseGump();
- from.SendGump(new MoongateConfirmGump(from, this));
- }
- else
- {
- EndConfirmation(from);
- }
- }
-
- public virtual void EndConfirmation(Mobile from)
- {
- if (!ValidateUse(from, true))
- return;
-
- UseGate(from);
- }
-
- public virtual void DelayCallback(Mobile from, int range)
- {
- if (!ValidateUse(from, false) || !from.InRange(this, range))
- return;
-
- if (TargetMap != null)
- BeginConfirmation(from);
- else
- from.SendMessage("This moongate does not seem to go anywhere.");
- }
-
- public static bool IsInTown(Point3D p, Map map) => map != null && Region.Find(p, map).GetRegion()?.IsDisabled() == false;
-
- private class DelayTimer : Timer
- {
- private readonly Mobile m_From;
- private readonly Moongate m_Gate;
- private readonly int m_Range;
-
- public DelayTimer(Mobile from, Moongate gate, int range) : base(TimeSpan.FromSeconds(1.0))
- {
- m_From = from;
- m_Gate = gate;
- m_Range = range;
- }
-
- protected override void OnTick()
- {
- m_Gate.DelayCallback(m_From, m_Range);
- }
- }
- }
-
- public class ConfirmationMoongate : Moongate
- {
- [Constructible]
- public ConfirmationMoongate() : this(Point3D.Zero)
- {
- }
-
- [Constructible]
- public ConfirmationMoongate(Point3D target, Map targetMap = null) : base(target, targetMap)
- {
- }
-
- public ConfirmationMoongate(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int GumpWidth { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int GumpHeight { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int TitleColor { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int MessageColor { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int TitleNumber { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int MessageNumber { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public string MessageString { get; set; }
-
- public virtual void Warning_Callback(Mobile from, bool okay)
- {
- if (okay)
- EndConfirmation(from);
- }
-
- public override void BeginConfirmation(Mobile from)
- {
- if (GumpWidth > 0 && GumpHeight > 0 && TitleNumber > 0 && (MessageNumber > 0 || MessageString != null))
- {
- from.CloseGump();
- from.SendGump(new WarningGump(TitleNumber, TitleColor,
- MessageString ?? (object)MessageNumber, MessageColor, GumpWidth, GumpHeight,
- okay => Warning_Callback(from, okay)));
- }
- else
- {
- base.BeginConfirmation(from);
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.WriteEncodedInt(GumpWidth);
- writer.WriteEncodedInt(GumpHeight);
-
- writer.WriteEncodedInt(TitleColor);
- writer.WriteEncodedInt(MessageColor);
-
- writer.WriteEncodedInt(TitleNumber);
- writer.WriteEncodedInt(MessageNumber);
-
- writer.Write(MessageString);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- GumpWidth = reader.ReadEncodedInt();
- GumpHeight = reader.ReadEncodedInt();
-
- TitleColor = reader.ReadEncodedInt();
- MessageColor = reader.ReadEncodedInt();
-
- TitleNumber = reader.ReadEncodedInt();
- MessageNumber = reader.ReadEncodedInt();
-
- MessageString = reader.ReadString();
-
- break;
- }
- }
- }
- }
-
- public class MoongateConfirmGump : Gump
- {
- private readonly Mobile m_From;
- private readonly Moongate m_Gate;
-
- public MoongateConfirmGump(Mobile from, Moongate gate) : base(Core.AOS ? 110 : 20, Core.AOS ? 100 : 30)
- {
- m_From = from;
- m_Gate = gate;
-
- if (Core.AOS)
- {
- Closable = false;
-
- AddPage(0);
-
- AddBackground(0, 0, 420, 280, 5054);
-
- AddImageTiled(10, 10, 400, 20, 2624);
- AddAlphaRegion(10, 10, 400, 20);
-
- AddHtmlLocalized(10, 10, 400, 20, 1062051, 30720); // Gate Warning
-
- AddImageTiled(10, 40, 400, 200, 2624);
- AddAlphaRegion(10, 40, 400, 200);
-
- if (from.Map != Map.Felucca && gate.TargetMap == Map.Felucca && gate.ShowFeluccaWarning)
- AddHtmlLocalized(10, 40, 400, 200, 1062050, 32512, false,
- true); // This Gate goes to Felucca... Continue to enter the gate, Cancel to stay here
- else
- AddHtmlLocalized(10, 40, 400, 200, 1062049, 32512, false,
- true); // Dost thou wish to step into the moongate? Continue to enter the gate, Cancel to stay here
-
- AddImageTiled(10, 250, 400, 20, 2624);
- AddAlphaRegion(10, 250, 400, 20);
-
- AddButton(10, 250, 4005, 4007, 1);
- AddHtmlLocalized(40, 250, 170, 20, 1011036, 32767); // OKAY
-
- AddButton(210, 250, 4005, 4007, 0);
- AddHtmlLocalized(240, 250, 170, 20, 1011012, 32767); // CANCEL
- }
- else
- {
- AddPage(0);
-
- AddBackground(0, 0, 420, 400, 5054);
- AddBackground(10, 10, 400, 380, 3000);
-
- AddHtml(20, 40, 380, 60,
- @"Dost thou wish to step into the moongate? Continue to enter the gate, Cancel to stay here");
-
- AddHtmlLocalized(55, 110, 290, 20, 1011012); // CANCEL
- AddButton(20, 110, 4005, 4007, 0);
-
- AddHtmlLocalized(55, 140, 290, 40, 1011011); // CONTINUE
- AddButton(20, 140, 4005, 4007, 1);
- }
- }
-
- public override void OnResponse(NetState state, RelayInfo info)
- {
- if (info.ButtonID == 1)
- m_Gate.EndConfirmation(m_From);
- }
- }
-}
+using System;
+using Server.Factions;
+using Server.Gumps;
+using Server.Misc;
+using Server.Mobiles;
+using Server.Network;
+using Server.Regions;
+
+namespace Server.Items
+{
+ [DispellableField]
+ public class Moongate : Item
+ {
+[Constructible]
+ public Moongate(bool dispellable = true) : this(Point3D.Zero, null, dispellable)
+ {
+ }
+
+ [Constructible]
+ public Moongate(Point3D target, Map targetMap = null, bool dispellable = true) : base(0xF6C)
+ {
+ Movable = false;
+ Light = LightType.Circle300;
+
+ Target = target;
+ TargetMap = targetMap;
+ Dispellable = dispellable;
+ }
+
+ public Moongate(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Point3D Target { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Map TargetMap { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool Dispellable { get; set; }
+
+ public virtual bool ShowFeluccaWarning => false;
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!from.Player)
+ return;
+
+ if (from.InRange(GetWorldLocation(), 1))
+ CheckGate(from, 1);
+ else
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ if (m.Player)
+ CheckGate(m, 0);
+
+ return true;
+ }
+
+ public virtual void CheckGate(Mobile m, int range)
+ {
+ if (m.Hidden && m.AccessLevel == AccessLevel.Player && Core.ML)
+ m.RevealingAction();
+
+ new DelayTimer(m, this, range).Start();
+ }
+
+ public virtual void OnGateUsed(Mobile m)
+ {
+ }
+
+ public virtual void UseGate(Mobile m)
+ {
+ ClientFlags flags = m.NetState?.Flags ?? ClientFlags.None;
+
+ if (Sigil.ExistsOn(m))
+ {
+ m.SendLocalizedMessage(1061632); // You can't do that while carrying the sigil.
+ }
+ else if (TargetMap == Map.Felucca && m is PlayerMobile mobile && mobile.Young)
+ {
+ mobile.SendLocalizedMessage(1049543); // You decide against traveling to Felucca while you are still young.
+ }
+ else if ((m.Kills >= 5 && TargetMap != Map.Felucca) ||
+ (TargetMap == Map.Tokuno && (flags & ClientFlags.Tokuno) == 0) ||
+ (TargetMap == Map.Malas && (flags & ClientFlags.Malas) == 0) ||
+ (TargetMap == Map.Ilshenar && (flags & ClientFlags.Ilshenar) == 0))
+ {
+ m.SendLocalizedMessage(1019004); // You are not allowed to travel there.
+ }
+ else if (m.Spell != null)
+ {
+ m.SendLocalizedMessage(1049616); // You are too busy to do that at the moment.
+ }
+ else if (TargetMap != null && TargetMap != Map.Internal)
+ {
+ BaseCreature.TeleportPets(m, Target, TargetMap);
+
+ m.MoveToWorld(Target, TargetMap);
+
+ if (m.AccessLevel == AccessLevel.Player || !m.Hidden)
+ m.PlaySound(0x1FE);
+
+ OnGateUsed(m);
+ }
+ else
+ {
+ m.SendMessage("This moongate does not seem to go anywhere.");
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(Target);
+ writer.Write(TargetMap);
+
+ // Version 1
+ writer.Write(Dispellable);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ Target = reader.ReadPoint3D();
+ TargetMap = reader.ReadMap();
+
+ if (version >= 1)
+ Dispellable = reader.ReadBool();
+ }
+
+ public virtual bool ValidateUse(Mobile from, bool message)
+ {
+ if (from.Deleted || Deleted)
+ return false;
+
+ if (from.Map != Map || !from.InRange(this, 1))
+ {
+ if (message)
+ from.SendLocalizedMessage(500446); // That is too far away.
+
+ return false;
+ }
+
+ return true;
+ }
+
+ public virtual void BeginConfirmation(Mobile from)
+ {
+ if ((IsInTown(from.Location, from.Map) && !IsInTown(Target, TargetMap)) ||
+ (from.Map != Map.Felucca && TargetMap == Map.Felucca && ShowFeluccaWarning))
+ {
+ if (from.AccessLevel == AccessLevel.Player || !from.Hidden)
+ from.Send(new PlaySound(0x20E, from.Location));
+ from.CloseGump();
+ from.SendGump(new MoongateConfirmGump(from, this));
+ }
+ else
+ {
+ EndConfirmation(from);
+ }
+ }
+
+ public virtual void EndConfirmation(Mobile from)
+ {
+ if (!ValidateUse(from, true))
+ return;
+
+ UseGate(from);
+ }
+
+ public virtual void DelayCallback(Mobile from, int range)
+ {
+ if (!ValidateUse(from, false) || !from.InRange(this, range))
+ return;
+
+ if (TargetMap != null)
+ BeginConfirmation(from);
+ else
+ from.SendMessage("This moongate does not seem to go anywhere.");
+ }
+
+ public static bool IsInTown(Point3D p, Map map) => map != null && Region.Find(p, map).GetRegion()?.IsDisabled() == false;
+
+ private class DelayTimer : Timer
+ {
+ private readonly Mobile m_From;
+ private readonly Moongate m_Gate;
+ private readonly int m_Range;
+
+ public DelayTimer(Mobile from, Moongate gate, int range) : base(TimeSpan.FromSeconds(1.0))
+ {
+ m_From = from;
+ m_Gate = gate;
+ m_Range = range;
+ }
+
+ protected override void OnTick()
+ {
+ m_Gate.DelayCallback(m_From, m_Range);
+ }
+ }
+ }
+
+ public class ConfirmationMoongate : Moongate
+ {
+ [Constructible]
+ public ConfirmationMoongate() : this(Point3D.Zero)
+ {
+ }
+
+ [Constructible]
+ public ConfirmationMoongate(Point3D target, Map targetMap = null) : base(target, targetMap)
+ {
+ }
+
+ public ConfirmationMoongate(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int GumpWidth { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int GumpHeight { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int TitleColor { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int MessageColor { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int TitleNumber { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int MessageNumber { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public string MessageString { get; set; }
+
+ public virtual void Warning_Callback(Mobile from, bool okay)
+ {
+ if (okay)
+ EndConfirmation(from);
+ }
+
+ public override void BeginConfirmation(Mobile from)
+ {
+ if (GumpWidth > 0 && GumpHeight > 0 && TitleNumber > 0 && (MessageNumber > 0 || MessageString != null))
+ {
+ from.CloseGump();
+ from.SendGump(new WarningGump(TitleNumber, TitleColor,
+ MessageString ?? (object)MessageNumber, MessageColor, GumpWidth, GumpHeight,
+ okay => Warning_Callback(from, okay)));
+ }
+ else
+ {
+ base.BeginConfirmation(from);
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.WriteEncodedInt(GumpWidth);
+ writer.WriteEncodedInt(GumpHeight);
+
+ writer.WriteEncodedInt(TitleColor);
+ writer.WriteEncodedInt(MessageColor);
+
+ writer.WriteEncodedInt(TitleNumber);
+ writer.WriteEncodedInt(MessageNumber);
+
+ writer.Write(MessageString);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ GumpWidth = reader.ReadEncodedInt();
+ GumpHeight = reader.ReadEncodedInt();
+
+ TitleColor = reader.ReadEncodedInt();
+ MessageColor = reader.ReadEncodedInt();
+
+ TitleNumber = reader.ReadEncodedInt();
+ MessageNumber = reader.ReadEncodedInt();
+
+ MessageString = reader.ReadString();
+
+ break;
+ }
+ }
+ }
+ }
+
+ public class MoongateConfirmGump : Gump
+ {
+ private readonly Mobile m_From;
+ private readonly Moongate m_Gate;
+
+ public MoongateConfirmGump(Mobile from, Moongate gate) : base(Core.AOS ? 110 : 20, Core.AOS ? 100 : 30)
+ {
+ m_From = from;
+ m_Gate = gate;
+
+ if (Core.AOS)
+ {
+ Closable = false;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 420, 280, 5054);
+
+ AddImageTiled(10, 10, 400, 20, 2624);
+ AddAlphaRegion(10, 10, 400, 20);
+
+ AddHtmlLocalized(10, 10, 400, 20, 1062051, 30720); // Gate Warning
+
+ AddImageTiled(10, 40, 400, 200, 2624);
+ AddAlphaRegion(10, 40, 400, 200);
+
+ if (from.Map != Map.Felucca && gate.TargetMap == Map.Felucca && gate.ShowFeluccaWarning)
+ AddHtmlLocalized(10, 40, 400, 200, 1062050, 32512, false,
+ true); // This Gate goes to Felucca... Continue to enter the gate, Cancel to stay here
+ else
+ AddHtmlLocalized(10, 40, 400, 200, 1062049, 32512, false,
+ true); // Dost thou wish to step into the moongate? Continue to enter the gate, Cancel to stay here
+
+ AddImageTiled(10, 250, 400, 20, 2624);
+ AddAlphaRegion(10, 250, 400, 20);
+
+ AddButton(10, 250, 4005, 4007, 1);
+ AddHtmlLocalized(40, 250, 170, 20, 1011036, 32767); // OKAY
+
+ AddButton(210, 250, 4005, 4007, 0);
+ AddHtmlLocalized(240, 250, 170, 20, 1011012, 32767); // CANCEL
+ }
+ else
+ {
+ AddPage(0);
+
+ AddBackground(0, 0, 420, 400, 5054);
+ AddBackground(10, 10, 400, 380, 3000);
+
+ AddHtml(20, 40, 380, 60,
+ @"Dost thou wish to step into the moongate? Continue to enter the gate, Cancel to stay here");
+
+ AddHtmlLocalized(55, 110, 290, 20, 1011012); // CANCEL
+ AddButton(20, 110, 4005, 4007, 0);
+
+ AddHtmlLocalized(55, 140, 290, 40, 1011011); // CONTINUE
+ AddButton(20, 140, 4005, 4007, 1);
+ }
+ }
+
+ public override void OnResponse(NetState state, RelayInfo info)
+ {
+ if (info.ButtonID == 1)
+ m_Gate.EndConfirmation(m_From);
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Misc/PotionKeg.cs b/Projects/UOContent/Items/Skill Items/Magical/Misc/PotionKeg.cs
index f31b83df9..7d8fd5fa9 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Misc/PotionKeg.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Misc/PotionKeg.cs
@@ -1,329 +1,329 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- public class PotionKeg : Item
- {
- private int m_Held;
- private PotionEffect m_Type;
-
- [Constructible]
- public PotionKeg() : base(0x1940)
- {
- UpdateWeight();
- }
-
- public PotionKeg(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Held
- {
- get => m_Held;
- set
- {
- if (m_Held != value)
- {
- m_Held = value;
- UpdateWeight();
- InvalidateProperties();
- }
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public PotionEffect Type
- {
- get => m_Type;
- set
- {
- m_Type = value;
- InvalidateProperties();
- }
- }
-
- public override int LabelNumber
- {
- get
- {
- if (m_Held > 0 && (int)m_Type >= (int)PotionEffect.Conflagration)
- return 1072658 + (int)m_Type - (int)PotionEffect.Conflagration;
-
- return m_Held > 0 ? 1041620 + (int)m_Type : 1041641;
- }
- }
-
- public virtual void UpdateWeight()
- {
- int held = Math.Max(0, Math.Min(m_Held, 100));
-
- Weight = 20 + held * 80 / 100;
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write((int)m_Type);
- writer.Write(m_Held);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- case 0:
- {
- m_Type = (PotionEffect)reader.ReadInt();
- m_Held = reader.ReadInt();
-
- break;
- }
- }
-
- if (version < 1)
- Timer.DelayCall(UpdateWeight);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- int number;
-
- if (m_Held <= 0)
- number = 502246; // The keg is empty.
- else if (m_Held < 5)
- number = 502248; // The keg is nearly empty.
- else if (m_Held < 20)
- number = 502249; // The keg is not very full.
- else if (m_Held < 30)
- number = 502250; // The keg is about one quarter full.
- else if (m_Held < 40)
- number = 502251; // The keg is about one third full.
- else if (m_Held < 47)
- number = 502252; // The keg is almost half full.
- else if (m_Held < 54)
- number = 502254; // The keg is approximately half full.
- else if (m_Held < 70)
- number = 502253; // The keg is more than half full.
- else if (m_Held < 80)
- number = 502255; // The keg is about three quarters full.
- else if (m_Held < 96)
- number = 502256; // The keg is very full.
- else if (m_Held < 100)
- number = 502257; // The liquid is almost to the top of the keg.
- else
- number = 502258; // The keg is completely full.
-
- list.Add(number);
- }
-
- public override void OnSingleClick(Mobile from)
- {
- base.OnSingleClick(from);
-
- int number;
-
- if (m_Held <= 0)
- number = 502246; // The keg is empty.
- else if (m_Held < 5)
- number = 502248; // The keg is nearly empty.
- else if (m_Held < 20)
- number = 502249; // The keg is not very full.
- else if (m_Held < 30)
- number = 502250; // The keg is about one quarter full.
- else if (m_Held < 40)
- number = 502251; // The keg is about one third full.
- else if (m_Held < 47)
- number = 502252; // The keg is almost half full.
- else if (m_Held < 54)
- number = 502254; // The keg is approximately half full.
- else if (m_Held < 70)
- number = 502253; // The keg is more than half full.
- else if (m_Held < 80)
- number = 502255; // The keg is about three quarters full.
- else if (m_Held < 96)
- number = 502256; // The keg is very full.
- else if (m_Held < 100)
- number = 502257; // The liquid is almost to the top of the keg.
- else
- number = 502258; // The keg is completely full.
-
- LabelTo(from, number);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (from.InRange(GetWorldLocation(), 2))
- {
- if (m_Held > 0)
- {
- Container pack = from.Backpack;
-
- if (pack?.ConsumeTotal(typeof(Bottle)) == true)
- {
- from.SendLocalizedMessage(502242); // You pour some of the keg's contents into an empty bottle...
-
- BasePotion pot = FillBottle();
-
- if (pack.TryDropItem(from, pot, false))
- {
- from.SendLocalizedMessage(502243); // ...and place it into your backpack.
- from.PlaySound(0x240);
-
- if (--Held == 0)
- from.SendLocalizedMessage(502245); // The keg is now empty.
- }
- else
- {
- from.SendLocalizedMessage(502244); // ...but there is no room for the bottle in your backpack.
- pot.Delete();
- }
- }
- }
- else
- {
- from.SendLocalizedMessage(502246); // The keg is empty.
- }
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- public override bool OnDragDrop(Mobile from, Item item)
- {
- if (!(item is BasePotion pot))
- {
- from.SendLocalizedMessage(502232); // The keg is not designed to hold that type of object.
- return false;
- }
-
- int toHold = Math.Min(100 - m_Held, pot.Amount);
-
- if (toHold <= 0)
- {
- from.SendLocalizedMessage(502233); // The keg will not hold any more!
- return false;
- }
-
- if (m_Held == 0)
- {
- if ((int)pot.PotionEffect >= (int)PotionEffect.Invisibility)
- {
- from.SendLocalizedMessage(502232); // The keg is not designed to hold that type of object.
- return false;
- }
-
- if (GiveBottle(from, toHold))
- {
- m_Type = pot.PotionEffect;
- Held = toHold;
-
- from.PlaySound(0x240);
-
- from.SendLocalizedMessage(502237); // You place the empty bottle in your backpack.
-
- pot.Consume(toHold);
-
- if (!pot.Deleted)
- pot.Bounce(from);
-
- return true;
- }
-
- from.SendLocalizedMessage(502238); // You don't have room for the empty bottle in your backpack.
- return false;
- }
-
- if (pot.PotionEffect != m_Type)
- {
- from.SendLocalizedMessage(
- 502236); // You decide that it would be a bad idea to mix different types of potions.
- return false;
- }
-
- if (GiveBottle(from, toHold))
- {
- Held += toHold;
-
- from.PlaySound(0x240);
-
- from.SendLocalizedMessage(502237); // You place the empty bottle in your backpack.
-
- pot.Consume(toHold);
-
- if (!pot.Deleted)
- pot.Bounce(from);
-
- return true;
- }
-
- from.SendLocalizedMessage(502238); // You don't have room for the empty bottle in your backpack.
- return false;
- }
-
- public bool GiveBottle(Mobile m, int amount)
- {
- Container pack = m.Backpack;
-
- Bottle bottle = new Bottle(amount);
-
- if (pack?.TryDropItem(m, bottle, false) != true)
- {
- bottle.Delete();
- return false;
- }
-
- return true;
- }
-
- public BasePotion FillBottle()
- {
- return m_Type switch
- {
- PotionEffect.Nightsight => (BasePotion)new NightSightPotion(),
- PotionEffect.CureLesser => new LesserCurePotion(),
- PotionEffect.Cure => new CurePotion(),
- PotionEffect.CureGreater => new GreaterCurePotion(),
- PotionEffect.Agility => new AgilityPotion(),
- PotionEffect.AgilityGreater => new GreaterAgilityPotion(),
- PotionEffect.Strength => new StrengthPotion(),
- PotionEffect.StrengthGreater => new GreaterStrengthPotion(),
- PotionEffect.PoisonLesser => new LesserPoisonPotion(),
- PotionEffect.Poison => new PoisonPotion(),
- PotionEffect.PoisonGreater => new GreaterPoisonPotion(),
- PotionEffect.PoisonDeadly => new DeadlyPoisonPotion(),
- PotionEffect.Refresh => new RefreshPotion(),
- PotionEffect.RefreshTotal => new TotalRefreshPotion(),
- PotionEffect.HealLesser => new LesserHealPotion(),
- PotionEffect.Heal => new HealPotion(),
- PotionEffect.HealGreater => new GreaterHealPotion(),
- PotionEffect.ExplosionLesser => new LesserExplosionPotion(),
- PotionEffect.Explosion => new ExplosionPotion(),
- PotionEffect.ExplosionGreater => new GreaterExplosionPotion(),
- PotionEffect.Conflagration => new ConflagrationPotion(),
- PotionEffect.ConflagrationGreater => new GreaterConflagrationPotion(),
- PotionEffect.ConfusionBlast => new ConfusionBlastPotion(),
- PotionEffect.ConfusionBlastGreater => new GreaterConfusionBlastPotion(),
- _ => new NightSightPotion()
- };
- }
-
- public static void Initialize()
- {
- TileData.ItemTable[0x1940].Height = 4;
- }
- }
-}
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class PotionKeg : Item
+ {
+ private int m_Held;
+ private PotionEffect m_Type;
+
+ [Constructible]
+ public PotionKeg() : base(0x1940)
+ {
+ UpdateWeight();
+ }
+
+ public PotionKeg(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Held
+ {
+ get => m_Held;
+ set
+ {
+ if (m_Held != value)
+ {
+ m_Held = value;
+ UpdateWeight();
+ InvalidateProperties();
+ }
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public PotionEffect Type
+ {
+ get => m_Type;
+ set
+ {
+ m_Type = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override int LabelNumber
+ {
+ get
+ {
+ if (m_Held > 0 && (int)m_Type >= (int)PotionEffect.Conflagration)
+ return 1072658 + (int)m_Type - (int)PotionEffect.Conflagration;
+
+ return m_Held > 0 ? 1041620 + (int)m_Type : 1041641;
+ }
+ }
+
+ public virtual void UpdateWeight()
+ {
+ int held = Math.Max(0, Math.Min(m_Held, 100));
+
+ Weight = 20 + held * 80 / 100;
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write((int)m_Type);
+ writer.Write(m_Held);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ case 0:
+ {
+ m_Type = (PotionEffect)reader.ReadInt();
+ m_Held = reader.ReadInt();
+
+ break;
+ }
+ }
+
+ if (version < 1)
+ Timer.DelayCall(UpdateWeight);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ int number;
+
+ if (m_Held <= 0)
+ number = 502246; // The keg is empty.
+ else if (m_Held < 5)
+ number = 502248; // The keg is nearly empty.
+ else if (m_Held < 20)
+ number = 502249; // The keg is not very full.
+ else if (m_Held < 30)
+ number = 502250; // The keg is about one quarter full.
+ else if (m_Held < 40)
+ number = 502251; // The keg is about one third full.
+ else if (m_Held < 47)
+ number = 502252; // The keg is almost half full.
+ else if (m_Held < 54)
+ number = 502254; // The keg is approximately half full.
+ else if (m_Held < 70)
+ number = 502253; // The keg is more than half full.
+ else if (m_Held < 80)
+ number = 502255; // The keg is about three quarters full.
+ else if (m_Held < 96)
+ number = 502256; // The keg is very full.
+ else if (m_Held < 100)
+ number = 502257; // The liquid is almost to the top of the keg.
+ else
+ number = 502258; // The keg is completely full.
+
+ list.Add(number);
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ base.OnSingleClick(from);
+
+ int number;
+
+ if (m_Held <= 0)
+ number = 502246; // The keg is empty.
+ else if (m_Held < 5)
+ number = 502248; // The keg is nearly empty.
+ else if (m_Held < 20)
+ number = 502249; // The keg is not very full.
+ else if (m_Held < 30)
+ number = 502250; // The keg is about one quarter full.
+ else if (m_Held < 40)
+ number = 502251; // The keg is about one third full.
+ else if (m_Held < 47)
+ number = 502252; // The keg is almost half full.
+ else if (m_Held < 54)
+ number = 502254; // The keg is approximately half full.
+ else if (m_Held < 70)
+ number = 502253; // The keg is more than half full.
+ else if (m_Held < 80)
+ number = 502255; // The keg is about three quarters full.
+ else if (m_Held < 96)
+ number = 502256; // The keg is very full.
+ else if (m_Held < 100)
+ number = 502257; // The liquid is almost to the top of the keg.
+ else
+ number = 502258; // The keg is completely full.
+
+ LabelTo(from, number);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (from.InRange(GetWorldLocation(), 2))
+ {
+ if (m_Held > 0)
+ {
+ Container pack = from.Backpack;
+
+ if (pack?.ConsumeTotal(typeof(Bottle)) == true)
+ {
+ from.SendLocalizedMessage(502242); // You pour some of the keg's contents into an empty bottle...
+
+ BasePotion pot = FillBottle();
+
+ if (pack.TryDropItem(from, pot, false))
+ {
+ from.SendLocalizedMessage(502243); // ...and place it into your backpack.
+ from.PlaySound(0x240);
+
+ if (--Held == 0)
+ from.SendLocalizedMessage(502245); // The keg is now empty.
+ }
+ else
+ {
+ from.SendLocalizedMessage(502244); // ...but there is no room for the bottle in your backpack.
+ pot.Delete();
+ }
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(502246); // The keg is empty.
+ }
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ public override bool OnDragDrop(Mobile from, Item item)
+ {
+ if (!(item is BasePotion pot))
+ {
+ from.SendLocalizedMessage(502232); // The keg is not designed to hold that type of object.
+ return false;
+ }
+
+ int toHold = Math.Min(100 - m_Held, pot.Amount);
+
+ if (toHold <= 0)
+ {
+ from.SendLocalizedMessage(502233); // The keg will not hold any more!
+ return false;
+ }
+
+ if (m_Held == 0)
+ {
+ if ((int)pot.PotionEffect >= (int)PotionEffect.Invisibility)
+ {
+ from.SendLocalizedMessage(502232); // The keg is not designed to hold that type of object.
+ return false;
+ }
+
+ if (GiveBottle(from, toHold))
+ {
+ m_Type = pot.PotionEffect;
+ Held = toHold;
+
+ from.PlaySound(0x240);
+
+ from.SendLocalizedMessage(502237); // You place the empty bottle in your backpack.
+
+ pot.Consume(toHold);
+
+ if (!pot.Deleted)
+ pot.Bounce(from);
+
+ return true;
+ }
+
+ from.SendLocalizedMessage(502238); // You don't have room for the empty bottle in your backpack.
+ return false;
+ }
+
+ if (pot.PotionEffect != m_Type)
+ {
+ from.SendLocalizedMessage(
+ 502236); // You decide that it would be a bad idea to mix different types of potions.
+ return false;
+ }
+
+ if (GiveBottle(from, toHold))
+ {
+ Held += toHold;
+
+ from.PlaySound(0x240);
+
+ from.SendLocalizedMessage(502237); // You place the empty bottle in your backpack.
+
+ pot.Consume(toHold);
+
+ if (!pot.Deleted)
+ pot.Bounce(from);
+
+ return true;
+ }
+
+ from.SendLocalizedMessage(502238); // You don't have room for the empty bottle in your backpack.
+ return false;
+ }
+
+ public bool GiveBottle(Mobile m, int amount)
+ {
+ Container pack = m.Backpack;
+
+ Bottle bottle = new Bottle(amount);
+
+ if (pack?.TryDropItem(m, bottle, false) != true)
+ {
+ bottle.Delete();
+ return false;
+ }
+
+ return true;
+ }
+
+ public BasePotion FillBottle()
+ {
+ return m_Type switch
+ {
+ PotionEffect.Nightsight => (BasePotion)new NightSightPotion(),
+ PotionEffect.CureLesser => new LesserCurePotion(),
+ PotionEffect.Cure => new CurePotion(),
+ PotionEffect.CureGreater => new GreaterCurePotion(),
+ PotionEffect.Agility => new AgilityPotion(),
+ PotionEffect.AgilityGreater => new GreaterAgilityPotion(),
+ PotionEffect.Strength => new StrengthPotion(),
+ PotionEffect.StrengthGreater => new GreaterStrengthPotion(),
+ PotionEffect.PoisonLesser => new LesserPoisonPotion(),
+ PotionEffect.Poison => new PoisonPotion(),
+ PotionEffect.PoisonGreater => new GreaterPoisonPotion(),
+ PotionEffect.PoisonDeadly => new DeadlyPoisonPotion(),
+ PotionEffect.Refresh => new RefreshPotion(),
+ PotionEffect.RefreshTotal => new TotalRefreshPotion(),
+ PotionEffect.HealLesser => new LesserHealPotion(),
+ PotionEffect.Heal => new HealPotion(),
+ PotionEffect.HealGreater => new GreaterHealPotion(),
+ PotionEffect.ExplosionLesser => new LesserExplosionPotion(),
+ PotionEffect.Explosion => new ExplosionPotion(),
+ PotionEffect.ExplosionGreater => new GreaterExplosionPotion(),
+ PotionEffect.Conflagration => new ConflagrationPotion(),
+ PotionEffect.ConflagrationGreater => new GreaterConflagrationPotion(),
+ PotionEffect.ConfusionBlast => new ConfusionBlastPotion(),
+ PotionEffect.ConfusionBlastGreater => new GreaterConfusionBlastPotion(),
+ _ => new NightSightPotion()
+ };
+ }
+
+ public static void Initialize()
+ {
+ TileData.ItemTable[0x1940].Height = 4;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs b/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs
index 6fc8e1e31..f1ed83c64 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs
@@ -1,296 +1,296 @@
-using Server.Multis;
-using Server.Prompts;
-using Server.Regions;
-
-namespace Server.Items
-{
- [Flippable(0x1f14, 0x1f15, 0x1f16, 0x1f17)]
- public class RecallRune : Item
- {
- private const string RuneFormat = "a recall rune for {0}";
- private string m_Description;
- private BaseHouse m_House;
- private bool m_Marked;
- private Map m_TargetMap;
-
- [Constructible]
- public RecallRune() : base(0x1F14)
- {
- Weight = 1.0;
- CalculateHue();
- }
-
- public RecallRune(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
- public BaseHouse House
- {
- get
- {
- if (m_House?.Deleted == true)
- House = null;
-
- return m_House;
- }
- set
- {
- m_House = value;
- CalculateHue();
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
- public string Description
- {
- get => m_Description;
- set
- {
- m_Description = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
- public bool Marked
- {
- get => m_Marked;
- set
- {
- if (m_Marked != value)
- {
- m_Marked = value;
- CalculateHue();
- InvalidateProperties();
- }
- }
- }
-
- [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
- public Point3D Target { get; set; }
-
- [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
- public Map TargetMap
- {
- get => m_TargetMap;
- set
- {
- if (m_TargetMap != value)
- {
- m_TargetMap = value;
- CalculateHue();
- InvalidateProperties();
- }
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- if (m_House?.Deleted == false)
- {
- writer.Write(1); // version
-
- writer.Write(m_House);
- }
- else
- {
- writer.Write(0); // version
- }
-
- writer.Write(m_Description);
- writer.Write(m_Marked);
- writer.Write(Target);
- writer.Write(m_TargetMap);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- m_House = reader.ReadItem() as BaseHouse;
- goto case 0;
- }
- case 0:
- {
- m_Description = reader.ReadString();
- m_Marked = reader.ReadBool();
- Target = reader.ReadPoint3D();
- m_TargetMap = reader.ReadMap();
-
- CalculateHue();
-
- break;
- }
- }
- }
-
- private void CalculateHue()
- {
- if (!m_Marked)
- Hue = 0;
- else if (m_TargetMap == Map.Trammel)
- Hue = House != null ? 0x47F : 50;
- else if (m_TargetMap == Map.Felucca)
- Hue = House != null ? 0x66D : 0;
- else if (m_TargetMap == Map.Ilshenar)
- Hue = House != null ? 0x55F : 1102;
- else if (m_TargetMap == Map.Malas)
- Hue = House != null ? 0x55F : 1102;
- else if (m_TargetMap == Map.Tokuno)
- Hue = House != null ? 0x47F : 1154;
- }
-
- public void Mark(Mobile m)
- {
- m_Marked = true;
-
- bool setDesc = false;
- if (Core.AOS)
- {
- m_House = BaseHouse.FindHouseAt(m);
-
- if (m_House == null)
- {
- Target = m.Location;
- m_TargetMap = m.Map;
- }
- else
- {
- HouseSign sign = m_House.Sign;
-
- m_Description = sign?.Name?.Trim().IsNullOrDefault("an unnamed house");
-
- setDesc = true;
-
- int x = m_House.BanLocation.X;
- int y = m_House.BanLocation.Y + 2;
- int z = m_House.BanLocation.Z;
-
- Map map = m_House.Map;
-
- if (map?.CanFit(x, y, z, 16, false, false) == false)
- z = map.GetAverageZ(x, y);
-
- Target = new Point3D(x, y, z);
- m_TargetMap = map;
- }
- }
- else
- {
- m_House = null;
- Target = m.Location;
- m_TargetMap = m.Map;
- }
-
- if (!setDesc)
- m_Description = BaseRegion.GetRuneNameFor(Region.Find(Target, m_TargetMap));
-
- CalculateHue();
- InvalidateProperties();
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_Marked)
- {
- string desc;
-
- if ((desc = m_Description) == null || (desc = desc.Trim()).Length == 0)
- desc = "an unknown location";
-
- if (m_TargetMap == Map.Tokuno)
- list.Add(House != null ? 1063260 : 1063259, RuneFormat, desc); // ~1_val~ (Tokuno Islands)[(House)]
- else if (m_TargetMap == Map.Malas)
- list.Add(House != null ? 1062454 : 1060804, RuneFormat, desc); // ~1_val~ (Malas)[(House)]
- else if (m_TargetMap == Map.Felucca)
- list.Add(House != null ? 1062452 : 1060805, RuneFormat, desc); // ~1_val~ (Felucca)[(House)]
- else if (m_TargetMap == Map.Trammel)
- list.Add(House != null ? 1062453 : 1060806, RuneFormat, desc); // ~1_val~ (Trammel)[(House)]
- else
- list.Add(House != null ? "{0} ({1})(House)" : "{0} ({1})", string.Format(RuneFormat, desc), m_TargetMap);
- }
- }
-
- public override void OnSingleClick(Mobile from)
- {
- if (m_Marked)
- {
- string desc = m_Description?.Trim().IsNullOrDefault("an unknown location");
-
- if (m_TargetMap == Map.Tokuno)
- LabelTo(from, House != null ? 1063260 : 1063259,
- string.Format(RuneFormat, desc)); // ~1_val~ (Tokuno Islands)[(House)]
- else if (m_TargetMap == Map.Malas)
- LabelTo(from, House != null ? 1062454 : 1060804,
- string.Format(RuneFormat, desc)); // ~1_val~ (Malas)[(House)]
- else if (m_TargetMap == Map.Felucca)
- LabelTo(from, House != null ? 1062452 : 1060805,
- string.Format(RuneFormat, desc)); // ~1_val~ (Felucca)[(House)]
- else if (m_TargetMap == Map.Trammel)
- LabelTo(from, House != null ? 1062453 : 1060806,
- string.Format(RuneFormat, desc)); // ~1_val~ (Trammel)[(House)]
- else
- LabelTo(from, House != null ? "{0} ({1})(House)" : "{0} ({1})", string.Format(RuneFormat, desc),
- m_TargetMap);
- }
- else
- {
- LabelTo(from, "an unmarked recall rune");
- }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- int number;
-
- if (!IsChildOf(from.Backpack))
- {
- number = 1042001; // That must be in your pack for you to use it.
- }
- else if (House != null)
- {
- number = 1062399; // You cannot edit the description for this rune.
- }
- else if (m_Marked)
- {
- number = 501804; // Please enter a description for this marked object.
-
- from.Prompt = new RenamePrompt(this);
- }
- else
- {
- number = 501805; // That rune is not yet marked.
- }
-
- from.SendLocalizedMessage(number);
- }
-
- private class RenamePrompt : Prompt
- {
- private readonly RecallRune m_Rune;
-
- public RenamePrompt(RecallRune rune) => m_Rune = rune;
-
- public override void OnResponse(Mobile from, string text)
- {
- if (m_Rune.House == null && m_Rune.Marked)
- {
- m_Rune.Description = text;
- from.SendLocalizedMessage(1010474); // The etching on the rune has been changed.
- }
- }
- }
- }
-}
+using Server.Multis;
+using Server.Prompts;
+using Server.Regions;
+
+namespace Server.Items
+{
+ [Flippable(0x1f14, 0x1f15, 0x1f16, 0x1f17)]
+ public class RecallRune : Item
+ {
+ private const string RuneFormat = "a recall rune for {0}";
+ private string m_Description;
+ private BaseHouse m_House;
+ private bool m_Marked;
+ private Map m_TargetMap;
+
+ [Constructible]
+ public RecallRune() : base(0x1F14)
+ {
+ Weight = 1.0;
+ CalculateHue();
+ }
+
+ public RecallRune(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
+ public BaseHouse House
+ {
+ get
+ {
+ if (m_House?.Deleted == true)
+ House = null;
+
+ return m_House;
+ }
+ set
+ {
+ m_House = value;
+ CalculateHue();
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
+ public string Description
+ {
+ get => m_Description;
+ set
+ {
+ m_Description = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
+ public bool Marked
+ {
+ get => m_Marked;
+ set
+ {
+ if (m_Marked != value)
+ {
+ m_Marked = value;
+ CalculateHue();
+ InvalidateProperties();
+ }
+ }
+ }
+
+ [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
+ public Point3D Target { get; set; }
+
+ [CommandProperty(AccessLevel.Counselor, AccessLevel.GameMaster)]
+ public Map TargetMap
+ {
+ get => m_TargetMap;
+ set
+ {
+ if (m_TargetMap != value)
+ {
+ m_TargetMap = value;
+ CalculateHue();
+ InvalidateProperties();
+ }
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ if (m_House?.Deleted == false)
+ {
+ writer.Write(1); // version
+
+ writer.Write(m_House);
+ }
+ else
+ {
+ writer.Write(0); // version
+ }
+
+ writer.Write(m_Description);
+ writer.Write(m_Marked);
+ writer.Write(Target);
+ writer.Write(m_TargetMap);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ m_House = reader.ReadItem() as BaseHouse;
+ goto case 0;
+ }
+ case 0:
+ {
+ m_Description = reader.ReadString();
+ m_Marked = reader.ReadBool();
+ Target = reader.ReadPoint3D();
+ m_TargetMap = reader.ReadMap();
+
+ CalculateHue();
+
+ break;
+ }
+ }
+ }
+
+ private void CalculateHue()
+ {
+ if (!m_Marked)
+ Hue = 0;
+ else if (m_TargetMap == Map.Trammel)
+ Hue = House != null ? 0x47F : 50;
+ else if (m_TargetMap == Map.Felucca)
+ Hue = House != null ? 0x66D : 0;
+ else if (m_TargetMap == Map.Ilshenar)
+ Hue = House != null ? 0x55F : 1102;
+ else if (m_TargetMap == Map.Malas)
+ Hue = House != null ? 0x55F : 1102;
+ else if (m_TargetMap == Map.Tokuno)
+ Hue = House != null ? 0x47F : 1154;
+ }
+
+ public void Mark(Mobile m)
+ {
+ m_Marked = true;
+
+ bool setDesc = false;
+ if (Core.AOS)
+ {
+ m_House = BaseHouse.FindHouseAt(m);
+
+ if (m_House == null)
+ {
+ Target = m.Location;
+ m_TargetMap = m.Map;
+ }
+ else
+ {
+ HouseSign sign = m_House.Sign;
+
+ m_Description = sign?.Name?.Trim().IsNullOrDefault("an unnamed house");
+
+ setDesc = true;
+
+ int x = m_House.BanLocation.X;
+ int y = m_House.BanLocation.Y + 2;
+ int z = m_House.BanLocation.Z;
+
+ Map map = m_House.Map;
+
+ if (map?.CanFit(x, y, z, 16, false, false) == false)
+ z = map.GetAverageZ(x, y);
+
+ Target = new Point3D(x, y, z);
+ m_TargetMap = map;
+ }
+ }
+ else
+ {
+ m_House = null;
+ Target = m.Location;
+ m_TargetMap = m.Map;
+ }
+
+ if (!setDesc)
+ m_Description = BaseRegion.GetRuneNameFor(Region.Find(Target, m_TargetMap));
+
+ CalculateHue();
+ InvalidateProperties();
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_Marked)
+ {
+ string desc;
+
+ if ((desc = m_Description) == null || (desc = desc.Trim()).Length == 0)
+ desc = "an unknown location";
+
+ if (m_TargetMap == Map.Tokuno)
+ list.Add(House != null ? 1063260 : 1063259, RuneFormat, desc); // ~1_val~ (Tokuno Islands)[(House)]
+ else if (m_TargetMap == Map.Malas)
+ list.Add(House != null ? 1062454 : 1060804, RuneFormat, desc); // ~1_val~ (Malas)[(House)]
+ else if (m_TargetMap == Map.Felucca)
+ list.Add(House != null ? 1062452 : 1060805, RuneFormat, desc); // ~1_val~ (Felucca)[(House)]
+ else if (m_TargetMap == Map.Trammel)
+ list.Add(House != null ? 1062453 : 1060806, RuneFormat, desc); // ~1_val~ (Trammel)[(House)]
+ else
+ list.Add(House != null ? "{0} ({1})(House)" : "{0} ({1})", string.Format(RuneFormat, desc), m_TargetMap);
+ }
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ if (m_Marked)
+ {
+ string desc = m_Description?.Trim().IsNullOrDefault("an unknown location");
+
+ if (m_TargetMap == Map.Tokuno)
+ LabelTo(from, House != null ? 1063260 : 1063259,
+ string.Format(RuneFormat, desc)); // ~1_val~ (Tokuno Islands)[(House)]
+ else if (m_TargetMap == Map.Malas)
+ LabelTo(from, House != null ? 1062454 : 1060804,
+ string.Format(RuneFormat, desc)); // ~1_val~ (Malas)[(House)]
+ else if (m_TargetMap == Map.Felucca)
+ LabelTo(from, House != null ? 1062452 : 1060805,
+ string.Format(RuneFormat, desc)); // ~1_val~ (Felucca)[(House)]
+ else if (m_TargetMap == Map.Trammel)
+ LabelTo(from, House != null ? 1062453 : 1060806,
+ string.Format(RuneFormat, desc)); // ~1_val~ (Trammel)[(House)]
+ else
+ LabelTo(from, House != null ? "{0} ({1})(House)" : "{0} ({1})", string.Format(RuneFormat, desc),
+ m_TargetMap);
+ }
+ else
+ {
+ LabelTo(from, "an unmarked recall rune");
+ }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ int number;
+
+ if (!IsChildOf(from.Backpack))
+ {
+ number = 1042001; // That must be in your pack for you to use it.
+ }
+ else if (House != null)
+ {
+ number = 1062399; // You cannot edit the description for this rune.
+ }
+ else if (m_Marked)
+ {
+ number = 501804; // Please enter a description for this marked object.
+
+ from.Prompt = new RenamePrompt(this);
+ }
+ else
+ {
+ number = 501805; // That rune is not yet marked.
+ }
+
+ from.SendLocalizedMessage(number);
+ }
+
+ private class RenamePrompt : Prompt
+ {
+ private readonly RecallRune m_Rune;
+
+ public RenamePrompt(RecallRune rune) => m_Rune = rune;
+
+ public override void OnResponse(Mobile from, string text)
+ {
+ if (m_Rune.House == null && m_Rune.Marked)
+ {
+ m_Rune.Description = text;
+ from.SendLocalizedMessage(1010474); // The etching on the rune has been changed.
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/MysticSpellbook.cs b/Projects/UOContent/Items/Skill Items/Magical/MysticSpellbook.cs
index b5ea20796..8c2fc9c1e 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/MysticSpellbook.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/MysticSpellbook.cs
@@ -1,35 +1,35 @@
-namespace Server.Items
-{
- public class MysticSpellbook : Spellbook
- {
- [Constructible]
- public MysticSpellbook(ulong content = 0)
- : base(content, 0x2D9D) =>
- Layer = Layer.OneHanded;
-
- public MysticSpellbook(Serial serial)
- : base(serial)
- {
- }
-
- public override SpellbookType SpellbookType => SpellbookType.Mystic;
-
- public override int BookOffset => 677;
- public override int BookCount => 16;
-
- 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 MysticSpellbook : Spellbook
+ {
+ [Constructible]
+ public MysticSpellbook(ulong content = 0)
+ : base(content, 0x2D9D) =>
+ Layer = Layer.OneHanded;
+
+ public MysticSpellbook(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override SpellbookType SpellbookType => SpellbookType.Mystic;
+
+ public override int BookOffset => 677;
+ public override int BookCount => 16;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/NecromancerSpellbook.cs b/Projects/UOContent/Items/Skill Items/Magical/NecromancerSpellbook.cs
index a4d7254b5..0ea0e5fc1 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/NecromancerSpellbook.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/NecromancerSpellbook.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class NecromancerSpellbook : Spellbook
- {
- [Constructible]
- public NecromancerSpellbook(ulong content = 0) : base(content, 0x2253) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
-
- public NecromancerSpellbook(Serial serial) : base(serial)
- {
- }
-
- public override SpellbookType SpellbookType => SpellbookType.Necromancer;
- public override int BookOffset => 100;
- public override int BookCount => Core.SE ? 17 : 16;
-
- 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 == 0 && Core.ML)
- Layer = Layer.OneHanded;
- }
- }
-}
+namespace Server.Items
+{
+ public class NecromancerSpellbook : Spellbook
+ {
+ [Constructible]
+ public NecromancerSpellbook(ulong content = 0) : base(content, 0x2253) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
+
+ public NecromancerSpellbook(Serial serial) : base(serial)
+ {
+ }
+
+ public override SpellbookType SpellbookType => SpellbookType.Necromancer;
+ public override int BookOffset => 100;
+ public override int BookCount => Core.SE ? 17 : 16;
+
+ 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 == 0 && Core.ML)
+ Layer = Layer.OneHanded;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/AgilityPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/AgilityPotion.cs
index cdf154341..f045b4b63 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/AgilityPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/AgilityPotion.cs
@@ -1,33 +1,33 @@
-using System;
-
-namespace Server.Items
-{
- public class AgilityPotion : BaseAgilityPotion
- {
- [Constructible]
- public AgilityPotion() : base(PotionEffect.Agility)
- {
- }
-
- public AgilityPotion(Serial serial) : base(serial)
- {
- }
-
- public override int DexOffset => 10;
- public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
- }
- }
+using System;
+
+namespace Server.Items
+{
+ public class AgilityPotion : BaseAgilityPotion
+ {
+ [Constructible]
+ public AgilityPotion() : base(PotionEffect.Agility)
+ {
+ }
+
+ public AgilityPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int DexOffset => 10;
+ public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/BaseAgilityPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/BaseAgilityPotion.cs
index e993c8b40..c2cbafb3b 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/BaseAgilityPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/BaseAgilityPotion.cs
@@ -1,59 +1,59 @@
-using System;
-using Server.Engines.ConPVP;
-using Server.Spells;
-
-namespace Server.Items
-{
- public abstract class BaseAgilityPotion : BasePotion
- {
- public BaseAgilityPotion(PotionEffect effect) : base(0xF08, effect)
- {
- }
-
- public BaseAgilityPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract int DexOffset { get; }
- public abstract TimeSpan Duration { get; }
-
- 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 bool DoAgility(Mobile from)
- {
- // TODO: Verify scaled; is it offset, duration, or both?
- if (SpellHelper.AddStatOffset(from, StatType.Dex, Scale(from, DexOffset), Duration))
- {
- from.FixedEffect(0x375A, 10, 15);
- from.PlaySound(0x1E7);
- return true;
- }
-
- from.SendLocalizedMessage(502173); // You are already under a similar effect.
- return false;
- }
-
- public override void Drink(Mobile from)
- {
- if (DoAgility(from))
- {
- PlayDrinkEffect(from);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
- }
- }
- }
+using System;
+using Server.Engines.ConPVP;
+using Server.Spells;
+
+namespace Server.Items
+{
+ public abstract class BaseAgilityPotion : BasePotion
+ {
+ public BaseAgilityPotion(PotionEffect effect) : base(0xF08, effect)
+ {
+ }
+
+ public BaseAgilityPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract int DexOffset { get; }
+ public abstract TimeSpan Duration { get; }
+
+ 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 bool DoAgility(Mobile from)
+ {
+ // TODO: Verify scaled; is it offset, duration, or both?
+ if (SpellHelper.AddStatOffset(from, StatType.Dex, Scale(from, DexOffset), Duration))
+ {
+ from.FixedEffect(0x375A, 10, 15);
+ from.PlaySound(0x1E7);
+ return true;
+ }
+
+ from.SendLocalizedMessage(502173); // You are already under a similar effect.
+ return false;
+ }
+
+ public override void Drink(Mobile from)
+ {
+ if (DoAgility(from))
+ {
+ PlayDrinkEffect(from);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/GreaterAgilityPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/GreaterAgilityPotion.cs
index d3ad07f60..9c0e2f90e 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/GreaterAgilityPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Agility Potions/GreaterAgilityPotion.cs
@@ -1,33 +1,33 @@
-using System;
-
-namespace Server.Items
-{
- public class GreaterAgilityPotion : BaseAgilityPotion
- {
- [Constructible]
- public GreaterAgilityPotion() : base(PotionEffect.AgilityGreater)
- {
- }
-
- public GreaterAgilityPotion(Serial serial) : base(serial)
- {
- }
-
- public override int DexOffset => 20;
- public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
- }
- }
+using System;
+
+namespace Server.Items
+{
+ public class GreaterAgilityPotion : BaseAgilityPotion
+ {
+ [Constructible]
+ public GreaterAgilityPotion() : base(PotionEffect.AgilityGreater)
+ {
+ }
+
+ public GreaterAgilityPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int DexOffset => 20;
+ public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/BasePotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/BasePotion.cs
index c0bbb0d8a..6e38ab942 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/BasePotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/BasePotion.cs
@@ -1,254 +1,254 @@
-using System;
-using System.Collections.Generic;
-using Server.Engines.ConPVP;
-using Server.Engines.Craft;
-using Server.Utilities;
-
-namespace Server.Items
-{
- public enum PotionEffect
- {
- Nightsight,
- CureLesser,
- Cure,
- CureGreater,
- Agility,
- AgilityGreater,
- Strength,
- StrengthGreater,
- PoisonLesser,
- Poison,
- PoisonGreater,
- PoisonDeadly,
- Refresh,
- RefreshTotal,
- HealLesser,
- Heal,
- HealGreater,
- ExplosionLesser,
- Explosion,
- ExplosionGreater,
- Conflagration,
- ConflagrationGreater,
- MaskOfDeath, // Mask of Death is not available in OSI but does exist in cliloc files
- MaskOfDeathGreater, // included in enumeration for compatibility if later enabled by OSI
- ConfusionBlast,
- ConfusionBlastGreater,
- Invisibility,
- Parasitic,
- Darkglow
- }
-
- public abstract class BasePotion : Item, ICraftable, ICommodity
- {
- private PotionEffect m_PotionEffect;
-
- public BasePotion(int itemID, PotionEffect effect) : base(itemID)
- {
- m_PotionEffect = effect;
-
- Stackable = Core.ML;
- Weight = 1.0;
- }
-
- public BasePotion(Serial serial) : base(serial)
- {
- }
-
- public PotionEffect PotionEffect
- {
- get => m_PotionEffect;
- set
- {
- m_PotionEffect = value;
- InvalidateProperties();
- }
- }
-
- public override int LabelNumber => 1041314 + (int)m_PotionEffect;
-
- public virtual bool RequireFreeHand => true;
-
- int ICommodity.DescriptionNumber => LabelNumber;
- bool ICommodity.IsDeedable => Core.ML;
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- if (craftSystem is DefAlchemy)
- {
- Container pack = from.Backpack;
-
- if (pack != null)
- {
- if ((int)PotionEffect >= (int)PotionEffect.Invisibility)
- return 1;
-
- List kegs = pack.FindItemsByType();
-
- for (int i = 0; i < kegs.Count; ++i)
- {
- PotionKeg keg = kegs[i];
-
- // Should never happen
- // if (keg == null)
- // continue;
-
- if (keg.Held <= 0 || keg.Held >= 100)
- continue;
-
- if (keg.Type != PotionEffect)
- continue;
-
- ++keg.Held;
-
- Consume();
- from.AddToBackpack(new Bottle());
-
- return -1; // signal placed in keg
- }
- }
- }
-
- return 1;
- }
-
- public static bool HasFreeHand(Mobile m)
- {
- Item handOne = m.FindItemOnLayer(Layer.OneHanded);
- Item handTwo = m.FindItemOnLayer(Layer.TwoHanded);
-
- if (handTwo is BaseWeapon)
- handOne = handTwo;
-
- if (handTwo is BaseRanged ranged && ranged.Balanced)
- return true;
-
- return handOne == null || handTwo == null;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!Movable)
- return;
-
- if (from.InRange(GetWorldLocation(), 1))
- {
- if (!RequireFreeHand || HasFreeHand(from))
- {
- if (this is BaseExplosionPotion && Amount > 1)
- {
- BasePotion pot = (BasePotion)ActivatorUtil.CreateInstance(GetType());
-
- Amount--;
-
- if (from.Backpack?.Deleted != false)
- from.Backpack.DropItem(pot);
- else
- pot.MoveToWorld(from.Location, from.Map);
- pot.Drink(from);
- }
- else
- {
- Drink(from);
- }
- }
- else
- {
- from.SendLocalizedMessage(502172); // You must have a free hand to drink a potion.
- }
- }
- else
- {
- from.SendLocalizedMessage(502138); // That is too far away for you to use
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write((int)m_PotionEffect);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- case 0:
- {
- m_PotionEffect = (PotionEffect)reader.ReadInt();
- break;
- }
- }
-
- if (version == 0)
- Stackable = Core.ML;
- }
-
- public abstract void Drink(Mobile from);
-
- public static void PlayDrinkEffect(Mobile m)
- {
- m.RevealingAction();
-
- m.PlaySound(0x2D6);
-
- if (!DuelContext.IsFreeConsume(m))
- m.AddToBackpack(new Bottle());
-
- if (m.Body.IsHuman && !m.Mounted)
- m.Animate(34, 5, 1, true, false, 0);
- }
-
- public static int EnhancePotions(Mobile m)
- {
- int EP = AosAttributes.GetValue(m, AosAttribute.EnhancePotions);
- int skillBonus = m.Skills.Alchemy.Fixed / 330 * 10;
-
- if (Core.ML && EP > 50 && m.AccessLevel <= AccessLevel.Player)
- EP = 50;
-
- return EP + skillBonus;
- }
-
- public static TimeSpan Scale(Mobile m, TimeSpan v)
- {
- if (!Core.AOS)
- return v;
-
- double scalar = 1.0 + 0.01 * EnhancePotions(m);
-
- return TimeSpan.FromSeconds(v.TotalSeconds * scalar);
- }
-
- public static double Scale(Mobile m, double v)
- {
- if (!Core.AOS)
- return v;
-
- double scalar = 1.0 + 0.01 * EnhancePotions(m);
-
- return v * scalar;
- }
-
- public static int Scale(Mobile m, int v)
- {
- if (!Core.AOS)
- return v;
-
- return AOS.Scale(v, 100 + EnhancePotions(m));
- }
-
- public override bool StackWith(Mobile from, Item dropped, bool playSound) =>
- dropped is BasePotion potion && potion.m_PotionEffect == m_PotionEffect &&
- base.StackWith(from, potion, playSound);
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Engines.ConPVP;
+using Server.Engines.Craft;
+using Server.Utilities;
+
+namespace Server.Items
+{
+ public enum PotionEffect
+ {
+ Nightsight,
+ CureLesser,
+ Cure,
+ CureGreater,
+ Agility,
+ AgilityGreater,
+ Strength,
+ StrengthGreater,
+ PoisonLesser,
+ Poison,
+ PoisonGreater,
+ PoisonDeadly,
+ Refresh,
+ RefreshTotal,
+ HealLesser,
+ Heal,
+ HealGreater,
+ ExplosionLesser,
+ Explosion,
+ ExplosionGreater,
+ Conflagration,
+ ConflagrationGreater,
+ MaskOfDeath, // Mask of Death is not available in OSI but does exist in cliloc files
+ MaskOfDeathGreater, // included in enumeration for compatibility if later enabled by OSI
+ ConfusionBlast,
+ ConfusionBlastGreater,
+ Invisibility,
+ Parasitic,
+ Darkglow
+ }
+
+ public abstract class BasePotion : Item, ICraftable, ICommodity
+ {
+ private PotionEffect m_PotionEffect;
+
+ public BasePotion(int itemID, PotionEffect effect) : base(itemID)
+ {
+ m_PotionEffect = effect;
+
+ Stackable = Core.ML;
+ Weight = 1.0;
+ }
+
+ public BasePotion(Serial serial) : base(serial)
+ {
+ }
+
+ public PotionEffect PotionEffect
+ {
+ get => m_PotionEffect;
+ set
+ {
+ m_PotionEffect = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override int LabelNumber => 1041314 + (int)m_PotionEffect;
+
+ public virtual bool RequireFreeHand => true;
+
+ int ICommodity.DescriptionNumber => LabelNumber;
+ bool ICommodity.IsDeedable => Core.ML;
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ if (craftSystem is DefAlchemy)
+ {
+ Container pack = from.Backpack;
+
+ if (pack != null)
+ {
+ if ((int)PotionEffect >= (int)PotionEffect.Invisibility)
+ return 1;
+
+ List kegs = pack.FindItemsByType();
+
+ for (int i = 0; i < kegs.Count; ++i)
+ {
+ PotionKeg keg = kegs[i];
+
+ // Should never happen
+ // if (keg == null)
+ // continue;
+
+ if (keg.Held <= 0 || keg.Held >= 100)
+ continue;
+
+ if (keg.Type != PotionEffect)
+ continue;
+
+ ++keg.Held;
+
+ Consume();
+ from.AddToBackpack(new Bottle());
+
+ return -1; // signal placed in keg
+ }
+ }
+ }
+
+ return 1;
+ }
+
+ public static bool HasFreeHand(Mobile m)
+ {
+ Item handOne = m.FindItemOnLayer(Layer.OneHanded);
+ Item handTwo = m.FindItemOnLayer(Layer.TwoHanded);
+
+ if (handTwo is BaseWeapon)
+ handOne = handTwo;
+
+ if (handTwo is BaseRanged ranged && ranged.Balanced)
+ return true;
+
+ return handOne == null || handTwo == null;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!Movable)
+ return;
+
+ if (from.InRange(GetWorldLocation(), 1))
+ {
+ if (!RequireFreeHand || HasFreeHand(from))
+ {
+ if (this is BaseExplosionPotion && Amount > 1)
+ {
+ BasePotion pot = (BasePotion)ActivatorUtil.CreateInstance(GetType());
+
+ Amount--;
+
+ if (from.Backpack?.Deleted != false)
+ from.Backpack.DropItem(pot);
+ else
+ pot.MoveToWorld(from.Location, from.Map);
+ pot.Drink(from);
+ }
+ else
+ {
+ Drink(from);
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(502172); // You must have a free hand to drink a potion.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(502138); // That is too far away for you to use
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write((int)m_PotionEffect);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ case 0:
+ {
+ m_PotionEffect = (PotionEffect)reader.ReadInt();
+ break;
+ }
+ }
+
+ if (version == 0)
+ Stackable = Core.ML;
+ }
+
+ public abstract void Drink(Mobile from);
+
+ public static void PlayDrinkEffect(Mobile m)
+ {
+ m.RevealingAction();
+
+ m.PlaySound(0x2D6);
+
+ if (!DuelContext.IsFreeConsume(m))
+ m.AddToBackpack(new Bottle());
+
+ if (m.Body.IsHuman && !m.Mounted)
+ m.Animate(34, 5, 1, true, false, 0);
+ }
+
+ public static int EnhancePotions(Mobile m)
+ {
+ int EP = AosAttributes.GetValue(m, AosAttribute.EnhancePotions);
+ int skillBonus = m.Skills.Alchemy.Fixed / 330 * 10;
+
+ if (Core.ML && EP > 50 && m.AccessLevel <= AccessLevel.Player)
+ EP = 50;
+
+ return EP + skillBonus;
+ }
+
+ public static TimeSpan Scale(Mobile m, TimeSpan v)
+ {
+ if (!Core.AOS)
+ return v;
+
+ double scalar = 1.0 + 0.01 * EnhancePotions(m);
+
+ return TimeSpan.FromSeconds(v.TotalSeconds * scalar);
+ }
+
+ public static double Scale(Mobile m, double v)
+ {
+ if (!Core.AOS)
+ return v;
+
+ double scalar = 1.0 + 0.01 * EnhancePotions(m);
+
+ return v * scalar;
+ }
+
+ public static int Scale(Mobile m, int v)
+ {
+ if (!Core.AOS)
+ return v;
+
+ return AOS.Scale(v, 100 + EnhancePotions(m));
+ }
+
+ public override bool StackWith(Mobile from, Item dropped, bool playSound) =>
+ dropped is BasePotion potion && potion.m_PotionEffect == m_PotionEffect &&
+ base.StackWith(from, potion, playSound);
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs
index cf5603a98..4a25ce011 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs
@@ -1,292 +1,292 @@
-using System;
-using System.Collections.Generic;
-using Server.Spells;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public abstract class BaseConflagrationPotion : BasePotion
- {
- private readonly List m_Users = new List();
-
- public BaseConflagrationPotion(PotionEffect effect) : base(0xF06, effect) => Hue = 0x489;
-
- public BaseConflagrationPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract int MinDamage { get; }
- public abstract int MaxDamage { get; }
-
- public override bool RequireFreeHand => false;
-
- public override void Drink(Mobile from)
- {
- if (Core.AOS && (from.Paralyzed || from.Frozen || from.Spell?.IsCasting == true))
- {
- from.SendLocalizedMessage(1062725); // You can not use that potion while paralyzed.
- return;
- }
-
- int delay = GetDelay(from);
-
- if (delay > 0)
- {
- from.SendLocalizedMessage(1072529,
- $"{delay}\t{(delay > 1 ? "seconds." : "second.")}"); // You cannot use that for another ~1_NUM~ ~2_TIMEUNITS~
- return;
- }
-
- if (from.Target is ThrowTarget targ && targ.Potion == this)
- return;
-
- from.RevealingAction();
-
- if (!m_Users.Contains(from))
- m_Users.Add(from);
-
- from.Target = new ThrowTarget(this);
- }
-
- 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 virtual void Explode(Mobile from, Point3D loc, Map map)
- {
- if (Deleted || map == null)
- return;
-
- Consume();
-
- // Check if any other players are using this potion
- for (int i = 0; i < m_Users.Count; i++)
- if (m_Users[i].Target is ThrowTarget targ && targ.Potion == this)
- Target.Cancel(from);
-
- // Effects
- Effects.PlaySound(loc, map, 0x20C);
-
- for (int i = -2; i <= 2; i++)
- for (int j = -2; j <= 2; j++)
- {
- Point3D p = new Point3D(loc.X + i, loc.Y + j, loc.Z);
-
- if (map.CanFit(p, 12, true, false) && from.InLOS(p))
- new InternalItem(from, p, map, MinDamage, MaxDamage);
- }
- }
-
- private class ThrowTarget : Target
- {
- public ThrowTarget(BaseConflagrationPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
-
- public BaseConflagrationPotion Potion { get; }
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (Potion.Deleted || Potion.Map == Map.Internal)
- return;
-
- if (!(targeted is IPoint3D p) || from.Map == null)
- return;
-
- // Add delay
- AddDelay(from);
-
- SpellHelper.GetSurfaceTop(ref p);
-
- from.RevealingAction();
-
- IEntity to;
-
- if (p is Mobile mobile)
- to = mobile;
- else
- to = new Entity(Serial.Zero, new Point3D(p), from.Map);
-
- Effects.SendMovingEffect(from, to, 0xF0D, 7, 0, false, false, Potion.Hue);
- Timer.DelayCall(TimeSpan.FromSeconds(1.5), Potion.Explode, from, new Point3D(p), from.Map);
- }
- }
-
- public class InternalItem : Item
- {
- private DateTime m_End;
- private int m_MaxDamage;
- private int m_MinDamage;
- private Timer m_Timer;
-
- public InternalItem(Mobile from, Point3D loc, Map map, int min, int max) : base(0x398C)
- {
- Movable = false;
- Light = LightType.Circle300;
-
- MoveToWorld(loc, map);
-
- From = from;
- m_End = DateTime.UtcNow + TimeSpan.FromSeconds(10);
-
- SetDamage(min, max);
-
- m_Timer = new InternalTimer(this, m_End);
- m_Timer.Start();
- }
-
- public InternalItem(Serial serial) : base(serial)
- {
- }
-
- public Mobile From { get; private set; }
-
- public override bool BlocksFit => true;
-
- public override void OnAfterDelete()
- {
- base.OnAfterDelete();
-
- m_Timer?.Stop();
- }
-
- public int GetDamage() => Utility.RandomMinMax(m_MinDamage, m_MaxDamage);
-
- private void SetDamage(int min, int max)
- {
- /* new way to apply alchemy bonus according to Stratics' calculator.
- this gives a mean to values 25, 50, 75 and 100. Stratics' calculator is outdated.
- Those goals will give 2 to alchemy bonus. It's not really OSI-like but it's an approximation. */
-
- m_MinDamage = min;
- m_MaxDamage = max;
-
- if (From == null)
- return;
-
- int alchemySkill = From.Skills.Alchemy.Fixed;
- int alchemyBonus = alchemySkill / 125 + alchemySkill / 250;
-
- m_MinDamage = Scale(From, m_MinDamage + alchemyBonus);
- m_MaxDamage = Scale(From, m_MaxDamage + alchemyBonus);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(From);
- writer.Write(m_End);
- writer.Write(m_MinDamage);
- writer.Write(m_MaxDamage);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- From = reader.ReadMobile();
- m_End = reader.ReadDateTime();
- m_MinDamage = reader.ReadInt();
- m_MaxDamage = reader.ReadInt();
-
- m_Timer = new InternalTimer(this, m_End);
- m_Timer.Start();
- }
-
- public override bool OnMoveOver(Mobile m)
- {
- if (Visible && From != null && (!Core.AOS || m != From) && SpellHelper.ValidIndirectTarget(From, m) &&
- From.CanBeHarmful(m, false))
- {
- From.DoHarmful(m);
-
- AOS.Damage(m, From, GetDamage(), 0, 100, 0, 0, 0);
- m.PlaySound(0x208);
- }
-
- return true;
- }
-
- private class InternalTimer : Timer
- {
- private readonly DateTime m_End;
- private readonly InternalItem m_Item;
-
- public InternalTimer(InternalItem item, DateTime end) : base(TimeSpan.Zero, TimeSpan.FromSeconds(1.0))
- {
- m_Item = item;
- m_End = end;
-
- Priority = TimerPriority.FiftyMS;
- }
-
- protected override void OnTick()
- {
- if (m_Item.Deleted)
- return;
-
- if (DateTime.UtcNow > m_End)
- {
- m_Item.Delete();
- Stop();
- return;
- }
-
- Mobile from = m_Item.From;
-
- if (m_Item.Map == null || from == null)
- return;
-
- foreach (Mobile m in m_Item.GetMobilesInRange(0))
- if (m.Z + 16 > m_Item.Z && m_Item.Z + 12 > m.Z && (!Core.AOS || m != from) &&
- SpellHelper.ValidIndirectTarget(from, m) && from.CanBeHarmful(m, false))
- {
- from.DoHarmful(m);
-
- AOS.Damage(m, from, m_Item.GetDamage(), 0, 100, 0, 0, 0);
- m.PlaySound(0x208);
- }
- }
- }
- }
-
- private static readonly Dictionary m_Delay = new Dictionary();
-
- public static void AddDelay(Mobile m)
- {
- m_Delay.TryGetValue(m, out Timer timer);
- timer?.Stop();
- m_Delay[m] = Timer.DelayCall(TimeSpan.FromSeconds(30), EndDelay, m);
- }
-
- public static int GetDelay(Mobile m)
- {
- if (m_Delay.TryGetValue(m, out Timer timer) && timer.Next > DateTime.UtcNow)
- return (int)(timer.Next - DateTime.UtcNow).TotalSeconds;
-
- return 0;
- }
-
- public static void EndDelay(Mobile m)
- {
- if (m_Delay.TryGetValue(m, out Timer timer))
- {
- timer.Stop();
- m_Delay.Remove(m);
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Spells;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public abstract class BaseConflagrationPotion : BasePotion
+ {
+ private readonly List m_Users = new List();
+
+ public BaseConflagrationPotion(PotionEffect effect) : base(0xF06, effect) => Hue = 0x489;
+
+ public BaseConflagrationPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract int MinDamage { get; }
+ public abstract int MaxDamage { get; }
+
+ public override bool RequireFreeHand => false;
+
+ public override void Drink(Mobile from)
+ {
+ if (Core.AOS && (from.Paralyzed || from.Frozen || from.Spell?.IsCasting == true))
+ {
+ from.SendLocalizedMessage(1062725); // You can not use that potion while paralyzed.
+ return;
+ }
+
+ int delay = GetDelay(from);
+
+ if (delay > 0)
+ {
+ from.SendLocalizedMessage(1072529,
+ $"{delay}\t{(delay > 1 ? "seconds." : "second.")}"); // You cannot use that for another ~1_NUM~ ~2_TIMEUNITS~
+ return;
+ }
+
+ if (from.Target is ThrowTarget targ && targ.Potion == this)
+ return;
+
+ from.RevealingAction();
+
+ if (!m_Users.Contains(from))
+ m_Users.Add(from);
+
+ from.Target = new ThrowTarget(this);
+ }
+
+ 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 virtual void Explode(Mobile from, Point3D loc, Map map)
+ {
+ if (Deleted || map == null)
+ return;
+
+ Consume();
+
+ // Check if any other players are using this potion
+ for (int i = 0; i < m_Users.Count; i++)
+ if (m_Users[i].Target is ThrowTarget targ && targ.Potion == this)
+ Target.Cancel(from);
+
+ // Effects
+ Effects.PlaySound(loc, map, 0x20C);
+
+ for (int i = -2; i <= 2; i++)
+ for (int j = -2; j <= 2; j++)
+ {
+ Point3D p = new Point3D(loc.X + i, loc.Y + j, loc.Z);
+
+ if (map.CanFit(p, 12, true, false) && from.InLOS(p))
+ new InternalItem(from, p, map, MinDamage, MaxDamage);
+ }
+ }
+
+ private class ThrowTarget : Target
+ {
+ public ThrowTarget(BaseConflagrationPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
+
+ public BaseConflagrationPotion Potion { get; }
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (Potion.Deleted || Potion.Map == Map.Internal)
+ return;
+
+ if (!(targeted is IPoint3D p) || from.Map == null)
+ return;
+
+ // Add delay
+ AddDelay(from);
+
+ SpellHelper.GetSurfaceTop(ref p);
+
+ from.RevealingAction();
+
+ IEntity to;
+
+ if (p is Mobile mobile)
+ to = mobile;
+ else
+ to = new Entity(Serial.Zero, new Point3D(p), from.Map);
+
+ Effects.SendMovingEffect(from, to, 0xF0D, 7, 0, false, false, Potion.Hue);
+ Timer.DelayCall(TimeSpan.FromSeconds(1.5), Potion.Explode, from, new Point3D(p), from.Map);
+ }
+ }
+
+ public class InternalItem : Item
+ {
+ private DateTime m_End;
+ private int m_MaxDamage;
+ private int m_MinDamage;
+ private Timer m_Timer;
+
+ public InternalItem(Mobile from, Point3D loc, Map map, int min, int max) : base(0x398C)
+ {
+ Movable = false;
+ Light = LightType.Circle300;
+
+ MoveToWorld(loc, map);
+
+ From = from;
+ m_End = DateTime.UtcNow + TimeSpan.FromSeconds(10);
+
+ SetDamage(min, max);
+
+ m_Timer = new InternalTimer(this, m_End);
+ m_Timer.Start();
+ }
+
+ public InternalItem(Serial serial) : base(serial)
+ {
+ }
+
+ public Mobile From { get; private set; }
+
+ public override bool BlocksFit => true;
+
+ public override void OnAfterDelete()
+ {
+ base.OnAfterDelete();
+
+ m_Timer?.Stop();
+ }
+
+ public int GetDamage() => Utility.RandomMinMax(m_MinDamage, m_MaxDamage);
+
+ private void SetDamage(int min, int max)
+ {
+ /* new way to apply alchemy bonus according to Stratics' calculator.
+ this gives a mean to values 25, 50, 75 and 100. Stratics' calculator is outdated.
+ Those goals will give 2 to alchemy bonus. It's not really OSI-like but it's an approximation. */
+
+ m_MinDamage = min;
+ m_MaxDamage = max;
+
+ if (From == null)
+ return;
+
+ int alchemySkill = From.Skills.Alchemy.Fixed;
+ int alchemyBonus = alchemySkill / 125 + alchemySkill / 250;
+
+ m_MinDamage = Scale(From, m_MinDamage + alchemyBonus);
+ m_MaxDamage = Scale(From, m_MaxDamage + alchemyBonus);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(From);
+ writer.Write(m_End);
+ writer.Write(m_MinDamage);
+ writer.Write(m_MaxDamage);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ From = reader.ReadMobile();
+ m_End = reader.ReadDateTime();
+ m_MinDamage = reader.ReadInt();
+ m_MaxDamage = reader.ReadInt();
+
+ m_Timer = new InternalTimer(this, m_End);
+ m_Timer.Start();
+ }
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ if (Visible && From != null && (!Core.AOS || m != From) && SpellHelper.ValidIndirectTarget(From, m) &&
+ From.CanBeHarmful(m, false))
+ {
+ From.DoHarmful(m);
+
+ AOS.Damage(m, From, GetDamage(), 0, 100, 0, 0, 0);
+ m.PlaySound(0x208);
+ }
+
+ return true;
+ }
+
+ private class InternalTimer : Timer
+ {
+ private readonly DateTime m_End;
+ private readonly InternalItem m_Item;
+
+ public InternalTimer(InternalItem item, DateTime end) : base(TimeSpan.Zero, TimeSpan.FromSeconds(1.0))
+ {
+ m_Item = item;
+ m_End = end;
+
+ Priority = TimerPriority.FiftyMS;
+ }
+
+ protected override void OnTick()
+ {
+ if (m_Item.Deleted)
+ return;
+
+ if (DateTime.UtcNow > m_End)
+ {
+ m_Item.Delete();
+ Stop();
+ return;
+ }
+
+ Mobile from = m_Item.From;
+
+ if (m_Item.Map == null || from == null)
+ return;
+
+ foreach (Mobile m in m_Item.GetMobilesInRange(0))
+ if (m.Z + 16 > m_Item.Z && m_Item.Z + 12 > m.Z && (!Core.AOS || m != from) &&
+ SpellHelper.ValidIndirectTarget(from, m) && from.CanBeHarmful(m, false))
+ {
+ from.DoHarmful(m);
+
+ AOS.Damage(m, from, m_Item.GetDamage(), 0, 100, 0, 0, 0);
+ m.PlaySound(0x208);
+ }
+ }
+ }
+ }
+
+ private static readonly Dictionary m_Delay = new Dictionary();
+
+ public static void AddDelay(Mobile m)
+ {
+ m_Delay.TryGetValue(m, out Timer timer);
+ timer?.Stop();
+ m_Delay[m] = Timer.DelayCall(TimeSpan.FromSeconds(30), EndDelay, m);
+ }
+
+ public static int GetDelay(Mobile m)
+ {
+ if (m_Delay.TryGetValue(m, out Timer timer) && timer.Next > DateTime.UtcNow)
+ return (int)(timer.Next - DateTime.UtcNow).TotalSeconds;
+
+ return 0;
+ }
+
+ public static void EndDelay(Mobile m)
+ {
+ if (m_Delay.TryGetValue(m, out Timer timer))
+ {
+ timer.Stop();
+ m_Delay.Remove(m);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/ConflagrationPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/ConflagrationPotion.cs
index 1276d6bff..89154a4cf 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/ConflagrationPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/ConflagrationPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class ConflagrationPotion : BaseConflagrationPotion
- {
- [Constructible]
- public ConflagrationPotion() : base(PotionEffect.Conflagration)
- {
- }
-
- public ConflagrationPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinDamage => 2;
- public override int MaxDamage => 4;
-
- public override int LabelNumber => 1072095; // a Conflagration potion
-
- 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 ConflagrationPotion : BaseConflagrationPotion
+ {
+ [Constructible]
+ public ConflagrationPotion() : base(PotionEffect.Conflagration)
+ {
+ }
+
+ public ConflagrationPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinDamage => 2;
+ public override int MaxDamage => 4;
+
+ public override int LabelNumber => 1072095; // a Conflagration potion
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/GreaterConflagrationPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/GreaterConflagrationPotion.cs
index ed426c43c..f17113c04 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/GreaterConflagrationPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/GreaterConflagrationPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class GreaterConflagrationPotion : BaseConflagrationPotion
- {
- [Constructible]
- public GreaterConflagrationPotion() : base(PotionEffect.ConflagrationGreater)
- {
- }
-
- public GreaterConflagrationPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinDamage => 4;
- public override int MaxDamage => 8;
-
- public override int LabelNumber => 1072098; // a Greater Conflagration potion
-
- 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 GreaterConflagrationPotion : BaseConflagrationPotion
+ {
+ [Constructible]
+ public GreaterConflagrationPotion() : base(PotionEffect.ConflagrationGreater)
+ {
+ }
+
+ public GreaterConflagrationPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinDamage => 4;
+ public override int MaxDamage => 8;
+
+ public override int LabelNumber => 1072098; // a Greater Conflagration potion
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/BaseConfusionBlastPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/BaseConfusionBlastPotion.cs
index 70cfd8c8c..eaabe6925 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/BaseConfusionBlastPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/BaseConfusionBlastPotion.cs
@@ -1,165 +1,165 @@
-using System;
-using System.Collections.Generic;
-using Server.Misc;
-using Server.Mobiles;
-using Server.Spells;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public abstract class BaseConfusionBlastPotion : BasePotion
- {
- private readonly List m_Users = new List();
-
- public BaseConfusionBlastPotion(PotionEffect effect) : base(0xF06, effect) => Hue = 0x48D;
-
- public BaseConfusionBlastPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract int Radius { get; }
-
- public override bool RequireFreeHand => false;
-
- public override void Drink(Mobile from)
- {
- if (Core.AOS && (from.Paralyzed || from.Frozen || from.Spell?.IsCasting == true))
- {
- from.SendLocalizedMessage(1062725); // You can not use that potion while paralyzed.
- return;
- }
-
- int delay = GetDelay(from);
-
- if (delay > 0)
- {
- from.SendLocalizedMessage(1072529,
- $"{delay}\t{(delay > 1 ? "seconds." : "second.")}"); // You cannot use that for another ~1_NUM~ ~2_TIMEUNITS~
- return;
- }
-
- if (from.Target is ThrowTarget targ && targ.Potion == this)
- return;
-
- from.RevealingAction();
-
- if (!m_Users.Contains(from))
- m_Users.Add(from);
-
- from.Target = new ThrowTarget(this);
- }
-
- 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 virtual void Explode(Mobile from, Point3D loc, Map map)
- {
- if (Deleted || map == null)
- return;
-
- Consume();
-
- // Check if any other players are using this potion
- for (int i = 0; i < m_Users.Count; i++)
- if (m_Users[i].Target is ThrowTarget targ && targ.Potion == this)
- Target.Cancel(from);
-
- // Effects
- Effects.PlaySound(loc, map, 0x207);
-
- Geometry.Circle2D(loc, map, Radius, BlastEffect, 270, 90);
-
- Timer.DelayCall(TimeSpan.FromSeconds(0.3), CircleEffect2, loc, map);
-
- foreach (Mobile mobile in map.GetMobilesInRange(loc, Radius))
- if (mobile is BaseCreature mon)
- {
- if (mon.Controlled || mon.Summoned)
- continue;
-
- mon.Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(5.0)); // TODO check
- }
- }
-
- private class ThrowTarget : Target
- {
- public ThrowTarget(BaseConfusionBlastPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
-
- public BaseConfusionBlastPotion Potion { get; }
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (Potion.Deleted || Potion.Map == Map.Internal)
- return;
-
- if (!(targeted is IPoint3D p) || from.Map == null)
- return;
-
- // Add delay
- AddDelay(from);
-
- SpellHelper.GetSurfaceTop(ref p);
-
- from.RevealingAction();
-
- IEntity to;
-
- if (p is Mobile mobile)
- to = mobile;
- else
- to = new Entity(Serial.Zero, new Point3D(p), from.Map);
-
- Effects.SendMovingEffect(from, to, 0xF0D, 7, 0, false, false, Potion.Hue);
- Timer.DelayCall(TimeSpan.FromSeconds(1.0), Potion.Explode, from, new Point3D(p), from.Map);
- }
- }
-
- public virtual void BlastEffect(Point3D p, Map map)
- {
- if (map.CanFit(p, 12, true, false))
- Effects.SendLocationEffect(p, map, 0x376A, 4, 9);
- }
-
- public void CircleEffect2(Point3D p, Map m)
- {
- Geometry.Circle2D(p, m, Radius, BlastEffect, 90, 270);
- }
-
- private static readonly Dictionary m_Delay = new Dictionary();
-
- public static void AddDelay(Mobile m)
- {
- m_Delay.TryGetValue(m, out Timer timer);
- timer?.Stop();
- m_Delay[m] = Timer.DelayCall(TimeSpan.FromSeconds(60), EndDelay, m);
- }
-
- public static int GetDelay(Mobile m)
- {
- if (m_Delay.TryGetValue(m, out Timer timer) && timer.Next > DateTime.UtcNow)
- return (int)(timer.Next - DateTime.UtcNow).TotalSeconds;
-
- return 0;
- }
-
- public static void EndDelay(Mobile m)
- {
- if (m_Delay.TryGetValue(m, out Timer timer))
- {
- timer.Stop();
- m_Delay.Remove(m);
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Misc;
+using Server.Mobiles;
+using Server.Spells;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public abstract class BaseConfusionBlastPotion : BasePotion
+ {
+ private readonly List m_Users = new List();
+
+ public BaseConfusionBlastPotion(PotionEffect effect) : base(0xF06, effect) => Hue = 0x48D;
+
+ public BaseConfusionBlastPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract int Radius { get; }
+
+ public override bool RequireFreeHand => false;
+
+ public override void Drink(Mobile from)
+ {
+ if (Core.AOS && (from.Paralyzed || from.Frozen || from.Spell?.IsCasting == true))
+ {
+ from.SendLocalizedMessage(1062725); // You can not use that potion while paralyzed.
+ return;
+ }
+
+ int delay = GetDelay(from);
+
+ if (delay > 0)
+ {
+ from.SendLocalizedMessage(1072529,
+ $"{delay}\t{(delay > 1 ? "seconds." : "second.")}"); // You cannot use that for another ~1_NUM~ ~2_TIMEUNITS~
+ return;
+ }
+
+ if (from.Target is ThrowTarget targ && targ.Potion == this)
+ return;
+
+ from.RevealingAction();
+
+ if (!m_Users.Contains(from))
+ m_Users.Add(from);
+
+ from.Target = new ThrowTarget(this);
+ }
+
+ 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 virtual void Explode(Mobile from, Point3D loc, Map map)
+ {
+ if (Deleted || map == null)
+ return;
+
+ Consume();
+
+ // Check if any other players are using this potion
+ for (int i = 0; i < m_Users.Count; i++)
+ if (m_Users[i].Target is ThrowTarget targ && targ.Potion == this)
+ Target.Cancel(from);
+
+ // Effects
+ Effects.PlaySound(loc, map, 0x207);
+
+ Geometry.Circle2D(loc, map, Radius, BlastEffect, 270, 90);
+
+ Timer.DelayCall(TimeSpan.FromSeconds(0.3), CircleEffect2, loc, map);
+
+ foreach (Mobile mobile in map.GetMobilesInRange(loc, Radius))
+ if (mobile is BaseCreature mon)
+ {
+ if (mon.Controlled || mon.Summoned)
+ continue;
+
+ mon.Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(5.0)); // TODO check
+ }
+ }
+
+ private class ThrowTarget : Target
+ {
+ public ThrowTarget(BaseConfusionBlastPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
+
+ public BaseConfusionBlastPotion Potion { get; }
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (Potion.Deleted || Potion.Map == Map.Internal)
+ return;
+
+ if (!(targeted is IPoint3D p) || from.Map == null)
+ return;
+
+ // Add delay
+ AddDelay(from);
+
+ SpellHelper.GetSurfaceTop(ref p);
+
+ from.RevealingAction();
+
+ IEntity to;
+
+ if (p is Mobile mobile)
+ to = mobile;
+ else
+ to = new Entity(Serial.Zero, new Point3D(p), from.Map);
+
+ Effects.SendMovingEffect(from, to, 0xF0D, 7, 0, false, false, Potion.Hue);
+ Timer.DelayCall(TimeSpan.FromSeconds(1.0), Potion.Explode, from, new Point3D(p), from.Map);
+ }
+ }
+
+ public virtual void BlastEffect(Point3D p, Map map)
+ {
+ if (map.CanFit(p, 12, true, false))
+ Effects.SendLocationEffect(p, map, 0x376A, 4, 9);
+ }
+
+ public void CircleEffect2(Point3D p, Map m)
+ {
+ Geometry.Circle2D(p, m, Radius, BlastEffect, 90, 270);
+ }
+
+ private static readonly Dictionary m_Delay = new Dictionary();
+
+ public static void AddDelay(Mobile m)
+ {
+ m_Delay.TryGetValue(m, out Timer timer);
+ timer?.Stop();
+ m_Delay[m] = Timer.DelayCall(TimeSpan.FromSeconds(60), EndDelay, m);
+ }
+
+ public static int GetDelay(Mobile m)
+ {
+ if (m_Delay.TryGetValue(m, out Timer timer) && timer.Next > DateTime.UtcNow)
+ return (int)(timer.Next - DateTime.UtcNow).TotalSeconds;
+
+ return 0;
+ }
+
+ public static void EndDelay(Mobile m)
+ {
+ if (m_Delay.TryGetValue(m, out Timer timer))
+ {
+ timer.Stop();
+ m_Delay.Remove(m);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/ConfusionBlastPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/ConfusionBlastPotion.cs
index fe0fd4912..5270c4c6c 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/ConfusionBlastPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/ConfusionBlastPotion.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- public class ConfusionBlastPotion : BaseConfusionBlastPotion
- {
- [Constructible]
- public ConfusionBlastPotion() : base(PotionEffect.ConfusionBlast)
- {
- }
-
- public ConfusionBlastPotion(Serial serial) : base(serial)
- {
- }
-
- public override int Radius => 5;
-
- public override int LabelNumber => 1072105; // a Confusion Blast potion
-
- 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 ConfusionBlastPotion : BaseConfusionBlastPotion
+ {
+ [Constructible]
+ public ConfusionBlastPotion() : base(PotionEffect.ConfusionBlast)
+ {
+ }
+
+ public ConfusionBlastPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int Radius => 5;
+
+ public override int LabelNumber => 1072105; // a Confusion Blast potion
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/GreaterConfusionBlastPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/GreaterConfusionBlastPotion.cs
index 07137096c..3c75e7f9c 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/GreaterConfusionBlastPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Confusion Blast Potions/GreaterConfusionBlastPotion.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- public class GreaterConfusionBlastPotion : BaseConfusionBlastPotion
- {
- [Constructible]
- public GreaterConfusionBlastPotion() : base(PotionEffect.ConfusionBlastGreater)
- {
- }
-
- public GreaterConfusionBlastPotion(Serial serial) : base(serial)
- {
- }
-
- public override int Radius => 7;
-
- public override int LabelNumber => 1072108; // a Greater Confusion Blast potion
-
- 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 GreaterConfusionBlastPotion : BaseConfusionBlastPotion
+ {
+ [Constructible]
+ public GreaterConfusionBlastPotion() : base(PotionEffect.ConfusionBlastGreater)
+ {
+ }
+
+ public GreaterConfusionBlastPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int Radius => 7;
+
+ public override int LabelNumber => 1072108; // a Greater Confusion Blast potion
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/BaseCurePotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/BaseCurePotion.cs
index 77447cf5b..43f56ccd5 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/BaseCurePotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/BaseCurePotion.cs
@@ -1,100 +1,100 @@
-using Server.Engines.ConPVP;
-using Server.Spells;
-using Server.Spells.Necromancy;
-
-namespace Server.Items
-{
- public class CureLevelInfo
- {
- public CureLevelInfo(Poison poison, double chance)
- {
- Poison = poison;
- Chance = chance;
- }
-
- public Poison Poison { get; }
-
- public double Chance { get; }
- }
-
- public abstract class BaseCurePotion : BasePotion
- {
- public BaseCurePotion(PotionEffect effect) : base(0xF07, effect)
- {
- }
-
- public BaseCurePotion(Serial serial) : base(serial)
- {
- }
-
- public abstract CureLevelInfo[] LevelInfo { get; }
-
- 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 void DoCure(Mobile from)
- {
- bool cure = false;
-
- CureLevelInfo[] info = LevelInfo;
-
- for (int i = 0; i < info.Length; ++i)
- {
- CureLevelInfo li = info[i];
-
- if (li.Poison == from.Poison && Scale(from, li.Chance) > Utility.RandomDouble())
- {
- cure = true;
- break;
- }
- }
-
- if (cure && from.CurePoison(from))
- {
- from.SendLocalizedMessage(500231); // You feel cured of poison!
-
- from.FixedEffect(0x373A, 10, 15);
- from.PlaySound(0x1E0);
- }
- else if (!cure)
- {
- from.SendLocalizedMessage(500232); // That potion was not strong enough to cure your ailment!
- }
- }
-
- public override void Drink(Mobile from)
- {
- if (TransformationSpellHelper.UnderTransformation(from, typeof(VampiricEmbraceSpell)))
- {
- from.SendLocalizedMessage(1061652); // The garlic in the potion would surely kill you.
- }
- else if (from.Poisoned)
- {
- DoCure(from);
-
- PlayDrinkEffect(from);
-
- from.FixedParticles(0x373A, 10, 15, 5012, EffectLayer.Waist);
- from.PlaySound(0x1E0);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
- }
- else
- {
- from.SendLocalizedMessage(1042000); // You are not poisoned.
- }
- }
- }
+using Server.Engines.ConPVP;
+using Server.Spells;
+using Server.Spells.Necromancy;
+
+namespace Server.Items
+{
+ public class CureLevelInfo
+ {
+ public CureLevelInfo(Poison poison, double chance)
+ {
+ Poison = poison;
+ Chance = chance;
+ }
+
+ public Poison Poison { get; }
+
+ public double Chance { get; }
+ }
+
+ public abstract class BaseCurePotion : BasePotion
+ {
+ public BaseCurePotion(PotionEffect effect) : base(0xF07, effect)
+ {
+ }
+
+ public BaseCurePotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract CureLevelInfo[] LevelInfo { get; }
+
+ 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 void DoCure(Mobile from)
+ {
+ bool cure = false;
+
+ CureLevelInfo[] info = LevelInfo;
+
+ for (int i = 0; i < info.Length; ++i)
+ {
+ CureLevelInfo li = info[i];
+
+ if (li.Poison == from.Poison && Scale(from, li.Chance) > Utility.RandomDouble())
+ {
+ cure = true;
+ break;
+ }
+ }
+
+ if (cure && from.CurePoison(from))
+ {
+ from.SendLocalizedMessage(500231); // You feel cured of poison!
+
+ from.FixedEffect(0x373A, 10, 15);
+ from.PlaySound(0x1E0);
+ }
+ else if (!cure)
+ {
+ from.SendLocalizedMessage(500232); // That potion was not strong enough to cure your ailment!
+ }
+ }
+
+ public override void Drink(Mobile from)
+ {
+ if (TransformationSpellHelper.UnderTransformation(from, typeof(VampiricEmbraceSpell)))
+ {
+ from.SendLocalizedMessage(1061652); // The garlic in the potion would surely kill you.
+ }
+ else if (from.Poisoned)
+ {
+ DoCure(from);
+
+ PlayDrinkEffect(from);
+
+ from.FixedParticles(0x373A, 10, 15, 5012, EffectLayer.Waist);
+ from.PlaySound(0x1E0);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042000); // You are not poisoned.
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/CurePotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/CurePotion.cs
index 2ae310659..8431e85bf 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/CurePotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/CurePotion.cs
@@ -1,47 +1,47 @@
-namespace Server.Items
-{
- public class CurePotion : BaseCurePotion
- {
- private static readonly CureLevelInfo[] m_OldLevelInfo =
- {
- new CureLevelInfo(Poison.Lesser, 1.00), // 100% chance to cure lesser poison
- new CureLevelInfo(Poison.Regular, 0.75), // 75% chance to cure regular poison
- new CureLevelInfo(Poison.Greater, 0.50), // 50% chance to cure greater poison
- new CureLevelInfo(Poison.Deadly, 0.15) // 15% chance to cure deadly poison
- };
-
- private static readonly CureLevelInfo[] m_AosLevelInfo =
- {
- new CureLevelInfo(Poison.Lesser, 1.00),
- new CureLevelInfo(Poison.Regular, 0.95),
- new CureLevelInfo(Poison.Greater, 0.75),
- new CureLevelInfo(Poison.Deadly, 0.50),
- new CureLevelInfo(Poison.Lethal, 0.25)
- };
-
- [Constructible]
- public CurePotion() : base(PotionEffect.Cure)
- {
- }
-
- public CurePotion(Serial serial) : base(serial)
- {
- }
-
- public override CureLevelInfo[] LevelInfo => Core.AOS ? m_AosLevelInfo : m_OldLevelInfo;
-
- 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 CurePotion : BaseCurePotion
+ {
+ private static readonly CureLevelInfo[] m_OldLevelInfo =
+ {
+ new CureLevelInfo(Poison.Lesser, 1.00), // 100% chance to cure lesser poison
+ new CureLevelInfo(Poison.Regular, 0.75), // 75% chance to cure regular poison
+ new CureLevelInfo(Poison.Greater, 0.50), // 50% chance to cure greater poison
+ new CureLevelInfo(Poison.Deadly, 0.15) // 15% chance to cure deadly poison
+ };
+
+ private static readonly CureLevelInfo[] m_AosLevelInfo =
+ {
+ new CureLevelInfo(Poison.Lesser, 1.00),
+ new CureLevelInfo(Poison.Regular, 0.95),
+ new CureLevelInfo(Poison.Greater, 0.75),
+ new CureLevelInfo(Poison.Deadly, 0.50),
+ new CureLevelInfo(Poison.Lethal, 0.25)
+ };
+
+ [Constructible]
+ public CurePotion() : base(PotionEffect.Cure)
+ {
+ }
+
+ public CurePotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override CureLevelInfo[] LevelInfo => Core.AOS ? m_AosLevelInfo : m_OldLevelInfo;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/GreaterCurePotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/GreaterCurePotion.cs
index cf9543b51..d2513e31f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/GreaterCurePotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/GreaterCurePotion.cs
@@ -1,48 +1,48 @@
-namespace Server.Items
-{
- public class GreaterCurePotion : BaseCurePotion
- {
- private static readonly CureLevelInfo[] m_OldLevelInfo =
- {
- new CureLevelInfo(Poison.Lesser, 1.00), // 100% chance to cure lesser poison
- new CureLevelInfo(Poison.Regular, 1.00), // 100% chance to cure regular poison
- new CureLevelInfo(Poison.Greater, 1.00), // 100% chance to cure greater poison
- new CureLevelInfo(Poison.Deadly, 0.75), // 75% chance to cure deadly poison
- new CureLevelInfo(Poison.Lethal, 0.25) // 25% chance to cure lethal poison
- };
-
- private static readonly CureLevelInfo[] m_AosLevelInfo =
- {
- new CureLevelInfo(Poison.Lesser, 1.00),
- new CureLevelInfo(Poison.Regular, 1.00),
- new CureLevelInfo(Poison.Greater, 1.00),
- new CureLevelInfo(Poison.Deadly, 0.95),
- new CureLevelInfo(Poison.Lethal, 0.75)
- };
-
- [Constructible]
- public GreaterCurePotion() : base(PotionEffect.CureGreater)
- {
- }
-
- public GreaterCurePotion(Serial serial) : base(serial)
- {
- }
-
- public override CureLevelInfo[] LevelInfo => Core.AOS ? m_AosLevelInfo : m_OldLevelInfo;
-
- 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 GreaterCurePotion : BaseCurePotion
+ {
+ private static readonly CureLevelInfo[] m_OldLevelInfo =
+ {
+ new CureLevelInfo(Poison.Lesser, 1.00), // 100% chance to cure lesser poison
+ new CureLevelInfo(Poison.Regular, 1.00), // 100% chance to cure regular poison
+ new CureLevelInfo(Poison.Greater, 1.00), // 100% chance to cure greater poison
+ new CureLevelInfo(Poison.Deadly, 0.75), // 75% chance to cure deadly poison
+ new CureLevelInfo(Poison.Lethal, 0.25) // 25% chance to cure lethal poison
+ };
+
+ private static readonly CureLevelInfo[] m_AosLevelInfo =
+ {
+ new CureLevelInfo(Poison.Lesser, 1.00),
+ new CureLevelInfo(Poison.Regular, 1.00),
+ new CureLevelInfo(Poison.Greater, 1.00),
+ new CureLevelInfo(Poison.Deadly, 0.95),
+ new CureLevelInfo(Poison.Lethal, 0.75)
+ };
+
+ [Constructible]
+ public GreaterCurePotion() : base(PotionEffect.CureGreater)
+ {
+ }
+
+ public GreaterCurePotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override CureLevelInfo[] LevelInfo => Core.AOS ? m_AosLevelInfo : m_OldLevelInfo;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/LesserCurePotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/LesserCurePotion.cs
index 2196a9bd9..2758a8dd2 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/LesserCurePotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Cure Potions/LesserCurePotion.cs
@@ -1,44 +1,44 @@
-namespace Server.Items
-{
- public class LesserCurePotion : BaseCurePotion
- {
- private static readonly CureLevelInfo[] m_OldLevelInfo =
- {
- new CureLevelInfo(Poison.Lesser, 0.75), // 75% chance to cure lesser poison
- new CureLevelInfo(Poison.Regular, 0.50), // 50% chance to cure regular poison
- new CureLevelInfo(Poison.Greater, 0.15) // 15% chance to cure greater poison
- };
-
- private static readonly CureLevelInfo[] m_AosLevelInfo =
- {
- new CureLevelInfo(Poison.Lesser, 0.75),
- new CureLevelInfo(Poison.Regular, 0.50),
- new CureLevelInfo(Poison.Greater, 0.25)
- };
-
- [Constructible]
- public LesserCurePotion() : base(PotionEffect.CureLesser)
- {
- }
-
- public LesserCurePotion(Serial serial) : base(serial)
- {
- }
-
- public override CureLevelInfo[] LevelInfo => Core.AOS ? m_AosLevelInfo : m_OldLevelInfo;
-
- 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 LesserCurePotion : BaseCurePotion
+ {
+ private static readonly CureLevelInfo[] m_OldLevelInfo =
+ {
+ new CureLevelInfo(Poison.Lesser, 0.75), // 75% chance to cure lesser poison
+ new CureLevelInfo(Poison.Regular, 0.50), // 50% chance to cure regular poison
+ new CureLevelInfo(Poison.Greater, 0.15) // 15% chance to cure greater poison
+ };
+
+ private static readonly CureLevelInfo[] m_AosLevelInfo =
+ {
+ new CureLevelInfo(Poison.Lesser, 0.75),
+ new CureLevelInfo(Poison.Regular, 0.50),
+ new CureLevelInfo(Poison.Greater, 0.25)
+ };
+
+ [Constructible]
+ public LesserCurePotion() : base(PotionEffect.CureLesser)
+ {
+ }
+
+ public LesserCurePotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override CureLevelInfo[] LevelInfo => Core.AOS ? m_AosLevelInfo : m_OldLevelInfo;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/DarkglowPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/DarkglowPotion.cs
index 6a8236500..1ef5b8fe9 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/DarkglowPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/DarkglowPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class DarkglowPotion : BasePoisonPotion
- {
- [Constructible]
- public DarkglowPotion() : base(PotionEffect.Darkglow) => Hue = 0x96;
-
- public DarkglowPotion(Serial serial) : base(serial)
- {
- }
-
- public override Poison Poison => Poison.Greater; /* MUST be restored when prerequisites are done */
-
- public override double MinPoisoningSkill => 95.0;
- public override double MaxPoisoningSkill => 100.0;
-
- public override int LabelNumber => 1072849; // Darkglow Poison
-
- 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 DarkglowPotion : BasePoisonPotion
+ {
+ [Constructible]
+ public DarkglowPotion() : base(PotionEffect.Darkglow) => Hue = 0x96;
+
+ public DarkglowPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override Poison Poison => Poison.Greater; /* MUST be restored when prerequisites are done */
+
+ public override double MinPoisoningSkill => 95.0;
+ public override double MaxPoisoningSkill => 100.0;
+
+ public override int LabelNumber => 1072849; // Darkglow Poison
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/BaseExplosionPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/BaseExplosionPotion.cs
index ba561858b..64994e105 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/BaseExplosionPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/BaseExplosionPotion.cs
@@ -1,263 +1,263 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Server.Network;
-using Server.Spells;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public abstract class BaseExplosionPotion : BasePotion
- {
- private const int ExplosionRange = 2; // How long is the blast radius?
-
- private static readonly bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
- private static readonly bool InstantExplosion = false; // Should explosion potions explode on impact?
- private static readonly bool RelativeLocation = false; // Is the explosion target location relative for mobiles?
-
- private Timer m_Timer;
-
- public BaseExplosionPotion(PotionEffect effect) : base(0xF0D, effect)
- {
- }
-
- public BaseExplosionPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract int MinDamage { get; }
- public abstract int MaxDamage { get; }
-
- public override bool RequireFreeHand => false;
-
- public List Users { get; private set; }
-
- 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 virtual IEntity FindParent(Mobile from)
- {
- if (HeldBy?.Holding == this)
- return HeldBy;
-
- if (RootParent != null)
- return RootParent;
-
- if (Map == Map.Internal)
- return from;
-
- return this;
- }
-
- public override void Drink(Mobile from)
- {
- if (Core.AOS && (from.Paralyzed || from.Frozen || from.Spell?.IsCasting == true))
- {
- from.SendLocalizedMessage(1062725); // You can not use a purple potion while paralyzed.
- return;
- }
-
- ThrowTarget targ = from.Target as ThrowTarget;
- Stackable = false; // Scavenged explosion potions won't stack with those ones in backpack, and still will explode.
-
- if (targ?.Potion == this)
- return;
-
- from.RevealingAction();
-
- Users ??= new List();
-
- if (!Users.Contains(from))
- Users.Add(from);
-
- from.Target = new ThrowTarget(this);
-
- if (m_Timer == null)
- {
- from.SendLocalizedMessage(500236); // You should throw it now!
-
- int timer = 3;
-
- if (Core.ML)
- m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.25), 5,
- () => Detonate_OnTick(from, timer--)); // 3.6 seconds explosion delay
- else
- m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(0.75), TimeSpan.FromSeconds(1.0), 4,
- () => Detonate_OnTick(from, timer--)); // 2.6 seconds explosion delay
- }
- }
-
- private void Detonate_OnTick(Mobile from, int timer)
- {
- if (Deleted)
- return;
-
- IEntity parent = FindParent(from);
-
- if (timer == 0)
- {
- Point3D loc;
- Map map;
-
- if (parent is Item item)
- {
- loc = item.GetWorldLocation();
- map = item.Map;
- }
- else if (parent is Mobile m)
- {
- loc = m.Location;
- map = m.Map;
- }
- else
- {
- return;
- }
-
- Explode(from, true, loc, map);
- m_Timer = null;
- }
- else
- {
- if (parent is Item item)
- item.PublicOverheadMessage(MessageType.Regular, 0x22, false, timer.ToString());
- else if (parent is Mobile mobile)
- mobile.PublicOverheadMessage(MessageType.Regular, 0x22, false, timer.ToString());
- }
- }
-
- private void Reposition_OnTick(Mobile from, Point3D loc, Map map)
- {
- if (Deleted)
- return;
-
- if (InstantExplosion)
- Explode(from, true, loc, map);
- else
- MoveToWorld(loc, map);
- }
-
- public void Explode(Mobile from, bool direct, Point3D loc, Map map)
- {
- if (Deleted)
- return;
-
- Consume();
-
- for (int i = 0; Users != null && i < Users.Count; ++i)
- {
- Mobile m = Users[i];
-
- if (m.Target is ThrowTarget targ && targ.Potion == this)
- Target.Cancel(m);
- }
-
- if (map == null)
- return;
-
- Effects.PlaySound(loc, map, 0x307);
-
- Effects.SendLocationEffect(loc, map, 0x36B0, 9, 10, 0, 0);
- int alchemyBonus = 0;
-
- if (direct)
- alchemyBonus = (int)(from.Skills.Alchemy.Value / (Core.AOS ? 5 : 10));
-
- IPooledEnumerable eable = map.GetObjectsInRange(loc, ExplosionRange, LeveledExplosion);
- int toDamage = 0;
-
- List toExplode = eable.Where(o =>
- {
- if (!(o is Mobile mobile) || (from != null &&
- (!SpellHelper.ValidIndirectTarget(from, mobile) || !from.CanBeHarmful(mobile, false))))
- return o is BaseExplosionPotion && o != this;
-
- ++toDamage;
- return true;
- }).ToList();
-
- eable.Free();
-
- int min = Scale(from, MinDamage);
- int max = Scale(from, MaxDamage);
-
- for (int i = 0; i < toExplode.Count; ++i)
- {
- IEntity o = toExplode[i];
-
- if (o is Mobile m)
- {
- from?.DoHarmful(m);
-
- int damage = Utility.RandomMinMax(min, max);
-
- damage += alchemyBonus;
-
- if (!Core.AOS && damage > 40)
- damage = 40;
- else if (Core.AOS && toDamage > 2)
- damage /= toDamage - 1;
-
- AOS.Damage(m, from, damage, 0, 100, 0, 0, 0);
- }
- else if (o is BaseExplosionPotion pot)
- {
- pot.Explode(from, false, pot.GetWorldLocation(), pot.Map);
- }
- }
- }
-
- private class ThrowTarget : Target
- {
- public ThrowTarget(BaseExplosionPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
-
- public BaseExplosionPotion Potion { get; }
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (Potion.Deleted || Potion.Map == Map.Internal)
- return;
-
- if (!(targeted is IPoint3D p))
- return;
-
- Map map = from.Map;
-
- if (map == null)
- return;
-
- SpellHelper.GetSurfaceTop(ref p);
-
- from.RevealingAction();
-
- IEntity to = new Entity(Serial.Zero, new Point3D(p), map);
-
- if (p is Mobile m)
- {
- if (!RelativeLocation) // explosion location = current mob location.
- p = m.Location;
- else
- to = m;
- }
-
- Effects.SendMovingEffect(from, to, Potion.ItemID, 7, 0, false, false, Potion.Hue);
-
- if (Potion.Amount > 1) Mobile.LiftItemDupe(Potion, 1);
-
- Potion.Internalize();
- Timer.DelayCall(TimeSpan.FromSeconds(1.0), Potion.Reposition_OnTick, from, new Point3D(p), map);
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Server.Network;
+using Server.Spells;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public abstract class BaseExplosionPotion : BasePotion
+ {
+ private const int ExplosionRange = 2; // How long is the blast radius?
+
+ private static readonly bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
+ private static readonly bool InstantExplosion = false; // Should explosion potions explode on impact?
+ private static readonly bool RelativeLocation = false; // Is the explosion target location relative for mobiles?
+
+ private Timer m_Timer;
+
+ public BaseExplosionPotion(PotionEffect effect) : base(0xF0D, effect)
+ {
+ }
+
+ public BaseExplosionPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract int MinDamage { get; }
+ public abstract int MaxDamage { get; }
+
+ public override bool RequireFreeHand => false;
+
+ public List Users { get; private set; }
+
+ 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 virtual IEntity FindParent(Mobile from)
+ {
+ if (HeldBy?.Holding == this)
+ return HeldBy;
+
+ if (RootParent != null)
+ return RootParent;
+
+ if (Map == Map.Internal)
+ return from;
+
+ return this;
+ }
+
+ public override void Drink(Mobile from)
+ {
+ if (Core.AOS && (from.Paralyzed || from.Frozen || from.Spell?.IsCasting == true))
+ {
+ from.SendLocalizedMessage(1062725); // You can not use a purple potion while paralyzed.
+ return;
+ }
+
+ ThrowTarget targ = from.Target as ThrowTarget;
+ Stackable = false; // Scavenged explosion potions won't stack with those ones in backpack, and still will explode.
+
+ if (targ?.Potion == this)
+ return;
+
+ from.RevealingAction();
+
+ Users ??= new List();
+
+ if (!Users.Contains(from))
+ Users.Add(from);
+
+ from.Target = new ThrowTarget(this);
+
+ if (m_Timer == null)
+ {
+ from.SendLocalizedMessage(500236); // You should throw it now!
+
+ int timer = 3;
+
+ if (Core.ML)
+ m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.25), 5,
+ () => Detonate_OnTick(from, timer--)); // 3.6 seconds explosion delay
+ else
+ m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(0.75), TimeSpan.FromSeconds(1.0), 4,
+ () => Detonate_OnTick(from, timer--)); // 2.6 seconds explosion delay
+ }
+ }
+
+ private void Detonate_OnTick(Mobile from, int timer)
+ {
+ if (Deleted)
+ return;
+
+ IEntity parent = FindParent(from);
+
+ if (timer == 0)
+ {
+ Point3D loc;
+ Map map;
+
+ if (parent is Item item)
+ {
+ loc = item.GetWorldLocation();
+ map = item.Map;
+ }
+ else if (parent is Mobile m)
+ {
+ loc = m.Location;
+ map = m.Map;
+ }
+ else
+ {
+ return;
+ }
+
+ Explode(from, true, loc, map);
+ m_Timer = null;
+ }
+ else
+ {
+ if (parent is Item item)
+ item.PublicOverheadMessage(MessageType.Regular, 0x22, false, timer.ToString());
+ else if (parent is Mobile mobile)
+ mobile.PublicOverheadMessage(MessageType.Regular, 0x22, false, timer.ToString());
+ }
+ }
+
+ private void Reposition_OnTick(Mobile from, Point3D loc, Map map)
+ {
+ if (Deleted)
+ return;
+
+ if (InstantExplosion)
+ Explode(from, true, loc, map);
+ else
+ MoveToWorld(loc, map);
+ }
+
+ public void Explode(Mobile from, bool direct, Point3D loc, Map map)
+ {
+ if (Deleted)
+ return;
+
+ Consume();
+
+ for (int i = 0; Users != null && i < Users.Count; ++i)
+ {
+ Mobile m = Users[i];
+
+ if (m.Target is ThrowTarget targ && targ.Potion == this)
+ Target.Cancel(m);
+ }
+
+ if (map == null)
+ return;
+
+ Effects.PlaySound(loc, map, 0x307);
+
+ Effects.SendLocationEffect(loc, map, 0x36B0, 9, 10, 0, 0);
+ int alchemyBonus = 0;
+
+ if (direct)
+ alchemyBonus = (int)(from.Skills.Alchemy.Value / (Core.AOS ? 5 : 10));
+
+ IPooledEnumerable eable = map.GetObjectsInRange(loc, ExplosionRange, LeveledExplosion);
+ int toDamage = 0;
+
+ List toExplode = eable.Where(o =>
+ {
+ if (!(o is Mobile mobile) || (from != null &&
+ (!SpellHelper.ValidIndirectTarget(from, mobile) || !from.CanBeHarmful(mobile, false))))
+ return o is BaseExplosionPotion && o != this;
+
+ ++toDamage;
+ return true;
+ }).ToList();
+
+ eable.Free();
+
+ int min = Scale(from, MinDamage);
+ int max = Scale(from, MaxDamage);
+
+ for (int i = 0; i < toExplode.Count; ++i)
+ {
+ IEntity o = toExplode[i];
+
+ if (o is Mobile m)
+ {
+ from?.DoHarmful(m);
+
+ int damage = Utility.RandomMinMax(min, max);
+
+ damage += alchemyBonus;
+
+ if (!Core.AOS && damage > 40)
+ damage = 40;
+ else if (Core.AOS && toDamage > 2)
+ damage /= toDamage - 1;
+
+ AOS.Damage(m, from, damage, 0, 100, 0, 0, 0);
+ }
+ else if (o is BaseExplosionPotion pot)
+ {
+ pot.Explode(from, false, pot.GetWorldLocation(), pot.Map);
+ }
+ }
+ }
+
+ private class ThrowTarget : Target
+ {
+ public ThrowTarget(BaseExplosionPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
+
+ public BaseExplosionPotion Potion { get; }
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (Potion.Deleted || Potion.Map == Map.Internal)
+ return;
+
+ if (!(targeted is IPoint3D p))
+ return;
+
+ Map map = from.Map;
+
+ if (map == null)
+ return;
+
+ SpellHelper.GetSurfaceTop(ref p);
+
+ from.RevealingAction();
+
+ IEntity to = new Entity(Serial.Zero, new Point3D(p), map);
+
+ if (p is Mobile m)
+ {
+ if (!RelativeLocation) // explosion location = current mob location.
+ p = m.Location;
+ else
+ to = m;
+ }
+
+ Effects.SendMovingEffect(from, to, Potion.ItemID, 7, 0, false, false, Potion.Hue);
+
+ if (Potion.Amount > 1) Mobile.LiftItemDupe(Potion, 1);
+
+ Potion.Internalize();
+ Timer.DelayCall(TimeSpan.FromSeconds(1.0), Potion.Reposition_OnTick, from, new Point3D(p), map);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/ExplosionPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/ExplosionPotion.cs
index ee66f20d0..af1d142d5 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/ExplosionPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/ExplosionPotion.cs
@@ -1,31 +1,31 @@
-namespace Server.Items
-{
- public class ExplosionPotion : BaseExplosionPotion
- {
- [Constructible]
- public ExplosionPotion() : base(PotionEffect.Explosion)
- {
- }
-
- public ExplosionPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinDamage => 10;
- public override int MaxDamage => 20;
-
- 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 ExplosionPotion : BaseExplosionPotion
+ {
+ [Constructible]
+ public ExplosionPotion() : base(PotionEffect.Explosion)
+ {
+ }
+
+ public ExplosionPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinDamage => 10;
+ public override int MaxDamage => 20;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/GreaterExplosionPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/GreaterExplosionPotion.cs
index bcbdd78e2..03f9390dc 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/GreaterExplosionPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/GreaterExplosionPotion.cs
@@ -1,31 +1,31 @@
-namespace Server.Items
-{
- public class GreaterExplosionPotion : BaseExplosionPotion
- {
- [Constructible]
- public GreaterExplosionPotion() : base(PotionEffect.ExplosionGreater)
- {
- }
-
- public GreaterExplosionPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinDamage => Core.AOS ? 20 : 15;
- public override int MaxDamage => Core.AOS ? 40 : 30;
-
- 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 GreaterExplosionPotion : BaseExplosionPotion
+ {
+ [Constructible]
+ public GreaterExplosionPotion() : base(PotionEffect.ExplosionGreater)
+ {
+ }
+
+ public GreaterExplosionPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinDamage => Core.AOS ? 20 : 15;
+ public override int MaxDamage => Core.AOS ? 40 : 30;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/LesserExplosionPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/LesserExplosionPotion.cs
index 5e703eca3..1d727887f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/LesserExplosionPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Explosion Potions/LesserExplosionPotion.cs
@@ -1,31 +1,31 @@
-namespace Server.Items
-{
- public class LesserExplosionPotion : BaseExplosionPotion
- {
- [Constructible]
- public LesserExplosionPotion() : base(PotionEffect.ExplosionLesser)
- {
- }
-
- public LesserExplosionPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinDamage => 5;
- public override int MaxDamage => 10;
-
- 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 LesserExplosionPotion : BaseExplosionPotion
+ {
+ [Constructible]
+ public LesserExplosionPotion() : base(PotionEffect.ExplosionLesser)
+ {
+ }
+
+ public LesserExplosionPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinDamage => 5;
+ public override int MaxDamage => 10;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/BaseHealPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/BaseHealPotion.cs
index ef31f5781..0792552e6 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/BaseHealPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/BaseHealPotion.cs
@@ -1,79 +1,79 @@
-using System;
-using Server.Engines.ConPVP;
-using Server.Network;
-
-namespace Server.Items
-{
- public abstract class BaseHealPotion : BasePotion
- {
- public BaseHealPotion(PotionEffect effect) : base(0xF0C, effect)
- {
- }
-
- public BaseHealPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract int MinHeal { get; }
- public abstract int MaxHeal { get; }
- public abstract double Delay { get; }
-
- 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 void DoHeal(Mobile from)
- {
- int min = Scale(from, MinHeal);
- int max = Scale(from, MaxHeal);
-
- from.Heal(Utility.RandomMinMax(min, max));
- }
-
- public override void Drink(Mobile from)
- {
- if (from.Hits < from.HitsMax)
- {
- if (from.Poisoned || MortalStrike.IsWounded(from))
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x22,
- 1005000); // You can not heal yourself in your current state.
- }
- else
- {
- if (from.BeginAction())
- {
- DoHeal(from);
-
- PlayDrinkEffect(from);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
-
- Timer.DelayCall(TimeSpan.FromSeconds(Delay), from.EndAction);
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x22,
- 500235); // You must wait 10 seconds before using another healing potion.
- }
- }
- }
- else
- {
- from.SendLocalizedMessage(
- 1049547); // You decide against drinking this potion, as you are already at full health.
- }
- }
- }
+using System;
+using Server.Engines.ConPVP;
+using Server.Network;
+
+namespace Server.Items
+{
+ public abstract class BaseHealPotion : BasePotion
+ {
+ public BaseHealPotion(PotionEffect effect) : base(0xF0C, effect)
+ {
+ }
+
+ public BaseHealPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract int MinHeal { get; }
+ public abstract int MaxHeal { get; }
+ public abstract double Delay { get; }
+
+ 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 void DoHeal(Mobile from)
+ {
+ int min = Scale(from, MinHeal);
+ int max = Scale(from, MaxHeal);
+
+ from.Heal(Utility.RandomMinMax(min, max));
+ }
+
+ public override void Drink(Mobile from)
+ {
+ if (from.Hits < from.HitsMax)
+ {
+ if (from.Poisoned || MortalStrike.IsWounded(from))
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x22,
+ 1005000); // You can not heal yourself in your current state.
+ }
+ else
+ {
+ if (from.BeginAction())
+ {
+ DoHeal(from);
+
+ PlayDrinkEffect(from);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+
+ Timer.DelayCall(TimeSpan.FromSeconds(Delay), from.EndAction);
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x22,
+ 500235); // You must wait 10 seconds before using another healing potion.
+ }
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(
+ 1049547); // You decide against drinking this potion, as you are already at full health.
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/GreaterHealPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/GreaterHealPotion.cs
index e25d14652..0b63ebd5d 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/GreaterHealPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/GreaterHealPotion.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- public class GreaterHealPotion : BaseHealPotion
- {
- [Constructible]
- public GreaterHealPotion() : base(PotionEffect.HealGreater)
- {
- }
-
- public GreaterHealPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinHeal => Core.AOS ? 20 : 9;
- public override int MaxHeal => Core.AOS ? 25 : 30;
- public override double Delay => 10.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
+{
+ public class GreaterHealPotion : BaseHealPotion
+ {
+ [Constructible]
+ public GreaterHealPotion() : base(PotionEffect.HealGreater)
+ {
+ }
+
+ public GreaterHealPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinHeal => Core.AOS ? 20 : 9;
+ public override int MaxHeal => Core.AOS ? 25 : 30;
+ public override double Delay => 10.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/HealPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/HealPotion.cs
index 4440e63d8..787077973 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/HealPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/HealPotion.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- public class HealPotion : BaseHealPotion
- {
- [Constructible]
- public HealPotion() : base(PotionEffect.Heal)
- {
- }
-
- public HealPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinHeal => Core.AOS ? 13 : 6;
- public override int MaxHeal => Core.AOS ? 16 : 20;
- public override double Delay => Core.AOS ? 8.0 : 10.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
+{
+ public class HealPotion : BaseHealPotion
+ {
+ [Constructible]
+ public HealPotion() : base(PotionEffect.Heal)
+ {
+ }
+
+ public HealPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinHeal => Core.AOS ? 13 : 6;
+ public override int MaxHeal => Core.AOS ? 16 : 20;
+ public override double Delay => Core.AOS ? 8.0 : 10.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/LesserHealPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/LesserHealPotion.cs
index 80a9664ff..9aa705bee 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/LesserHealPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/LesserHealPotion.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- public class LesserHealPotion : BaseHealPotion
- {
- [Constructible]
- public LesserHealPotion() : base(PotionEffect.HealLesser)
- {
- }
-
- public LesserHealPotion(Serial serial) : base(serial)
- {
- }
-
- public override int MinHeal => Core.AOS ? 6 : 3;
- public override int MaxHeal => Core.AOS ? 8 : 10;
- public override double Delay => Core.AOS ? 3.0 : 10.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
+{
+ public class LesserHealPotion : BaseHealPotion
+ {
+ [Constructible]
+ public LesserHealPotion() : base(PotionEffect.HealLesser)
+ {
+ }
+
+ public LesserHealPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int MinHeal => Core.AOS ? 6 : 3;
+ public override int MaxHeal => Core.AOS ? 8 : 10;
+ public override double Delay => Core.AOS ? 3.0 : 10.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/InvisibilityPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/InvisibilityPotion.cs
index 168346a82..53bc97fa3 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/InvisibilityPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/InvisibilityPotion.cs
@@ -1,87 +1,87 @@
-using System;
-using System.Collections.Generic;
-
-namespace Server.Items
-{
- public class InvisibilityPotion : BasePotion
- {
- private static readonly Dictionary m_Table = new Dictionary();
-
- [Constructible]
- public InvisibilityPotion() : base(0xF0A, PotionEffect.Invisibility) => Hue = 0x48D;
-
- public InvisibilityPotion(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1072941; // Potion of Invisibility
-
- public override void Drink(Mobile from)
- {
- if (from.Hidden)
- {
- from.SendLocalizedMessage(1073185); // You are already unseen.
- return;
- }
-
- if (HasTimer(from))
- {
- from.SendLocalizedMessage(1073186); // An invisibility potion is already taking effect on your person.
- return;
- }
-
- Consume();
- m_Table[from] = Timer.DelayCall(TimeSpan.FromSeconds(2), Hide, from);
- PlayDrinkEffect(from);
- }
-
- public static void Hide(Mobile m)
- {
- Effects.SendLocationParticles(
- EffectItem.Create(new Point3D(m.X, m.Y, m.Z + 16), m.Map, EffectItem.DefaultDuration), 0x376A, 10, 15, 5045);
- m.PlaySound(0x3C4);
-
- m.Hidden = true;
-
- BuffInfo.RemoveBuff(m, BuffIcon.HidingAndOrStealth);
- BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Invisibility, 1075825)); // Invisibility/Invisible
-
- RemoveTimer(m);
-
- Timer.DelayCall(TimeSpan.FromSeconds(30), EndHide, m);
- }
-
- public static void EndHide(Mobile m)
- {
- m.RevealingAction();
- RemoveTimer(m);
- }
-
- public static bool HasTimer(Mobile m) => m_Table.ContainsKey(m);
-
- public static void RemoveTimer(Mobile m, bool interrupted = false)
- {
- if (m_Table.TryGetValue(m, out Timer timer))
- {
- if (interrupted)
- m.SendLocalizedMessage(1073187); // The invisibility effect is interrupted.
- timer.Stop();
- m_Table.Remove(m);
- }
- }
-
- 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 System;
+using System.Collections.Generic;
+
+namespace Server.Items
+{
+ public class InvisibilityPotion : BasePotion
+ {
+ private static readonly Dictionary m_Table = new Dictionary();
+
+ [Constructible]
+ public InvisibilityPotion() : base(0xF0A, PotionEffect.Invisibility) => Hue = 0x48D;
+
+ public InvisibilityPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1072941; // Potion of Invisibility
+
+ public override void Drink(Mobile from)
+ {
+ if (from.Hidden)
+ {
+ from.SendLocalizedMessage(1073185); // You are already unseen.
+ return;
+ }
+
+ if (HasTimer(from))
+ {
+ from.SendLocalizedMessage(1073186); // An invisibility potion is already taking effect on your person.
+ return;
+ }
+
+ Consume();
+ m_Table[from] = Timer.DelayCall(TimeSpan.FromSeconds(2), Hide, from);
+ PlayDrinkEffect(from);
+ }
+
+ public static void Hide(Mobile m)
+ {
+ Effects.SendLocationParticles(
+ EffectItem.Create(new Point3D(m.X, m.Y, m.Z + 16), m.Map, EffectItem.DefaultDuration), 0x376A, 10, 15, 5045);
+ m.PlaySound(0x3C4);
+
+ m.Hidden = true;
+
+ BuffInfo.RemoveBuff(m, BuffIcon.HidingAndOrStealth);
+ BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Invisibility, 1075825)); // Invisibility/Invisible
+
+ RemoveTimer(m);
+
+ Timer.DelayCall(TimeSpan.FromSeconds(30), EndHide, m);
+ }
+
+ public static void EndHide(Mobile m)
+ {
+ m.RevealingAction();
+ RemoveTimer(m);
+ }
+
+ public static bool HasTimer(Mobile m) => m_Table.ContainsKey(m);
+
+ public static void RemoveTimer(Mobile m, bool interrupted = false)
+ {
+ if (m_Table.TryGetValue(m, out Timer timer))
+ {
+ if (interrupted)
+ m.SendLocalizedMessage(1073187); // The invisibility effect is interrupted.
+ timer.Stop();
+ m_Table.Remove(m);
+ }
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/NightSight.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/NightSight.cs
index ef905e015..4a40f35a9 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/NightSight.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/NightSight.cs
@@ -1,51 +1,51 @@
-using Server.Engines.ConPVP;
-
-namespace Server.Items
-{
- public class NightSightPotion : BasePotion
- {
- [Constructible]
- public NightSightPotion() : base(0xF06, PotionEffect.Nightsight)
- {
- }
-
- public NightSightPotion(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 Drink(Mobile from)
- {
- if (from.BeginAction())
- {
- new LightCycle.NightSightTimer(from).Start();
- from.LightLevel = LightCycle.DungeonLevel / 2;
-
- from.FixedParticles(0x376A, 9, 32, 5007, EffectLayer.Waist);
- from.PlaySound(0x1E3);
-
- PlayDrinkEffect(from);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
- }
- else
- {
- from.SendMessage("You already have nightsight.");
- }
- }
- }
+using Server.Engines.ConPVP;
+
+namespace Server.Items
+{
+ public class NightSightPotion : BasePotion
+ {
+ [Constructible]
+ public NightSightPotion() : base(0xF06, PotionEffect.Nightsight)
+ {
+ }
+
+ public NightSightPotion(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 Drink(Mobile from)
+ {
+ if (from.BeginAction())
+ {
+ new LightCycle.NightSightTimer(from).Start();
+ from.LightLevel = LightCycle.DungeonLevel / 2;
+
+ from.FixedParticles(0x376A, 9, 32, 5007, EffectLayer.Waist);
+ from.PlaySound(0x1E3);
+
+ PlayDrinkEffect(from);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+ }
+ else
+ {
+ from.SendMessage("You already have nightsight.");
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/ParasiticPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/ParasiticPotion.cs
index 0b1300aab..df870e104 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/ParasiticPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/ParasiticPotion.cs
@@ -1,34 +1,34 @@
-namespace Server.Items
-{
- public class ParasiticPotion : BasePoisonPotion
- {
- [Constructible]
- public ParasiticPotion() : base(PotionEffect.Parasitic) => Hue = 0x17C;
-
- public ParasiticPotion(Serial serial) : base(serial)
- {
- }
-
- /* public override Poison Poison => Poison.Darkglow; MUST be restored when prerequisites are done */
- public override Poison Poison => Poison.Greater;
-
- public override double MinPoisoningSkill => 95.0;
- public override double MaxPoisoningSkill => 100.0;
-
- public override int LabelNumber => 1072848; // Parasitic Poison
-
- 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 ParasiticPotion : BasePoisonPotion
+ {
+ [Constructible]
+ public ParasiticPotion() : base(PotionEffect.Parasitic) => Hue = 0x17C;
+
+ public ParasiticPotion(Serial serial) : base(serial)
+ {
+ }
+
+ /* public override Poison Poison => Poison.Darkglow; MUST be restored when prerequisites are done */
+ public override Poison Poison => Poison.Greater;
+
+ public override double MinPoisoningSkill => 95.0;
+ public override double MaxPoisoningSkill => 100.0;
+
+ public override int LabelNumber => 1072848; // Parasitic Poison
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/BasePoisonPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/BasePoisonPotion.cs
index fb2ea428c..645ca93b8 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/BasePoisonPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/BasePoisonPotion.cs
@@ -1,49 +1,49 @@
-using Server.Engines.ConPVP;
-
-namespace Server.Items
-{
- public abstract class BasePoisonPotion : BasePotion
- {
- public BasePoisonPotion(PotionEffect effect) : base(0xF0A, effect)
- {
- }
-
- public BasePoisonPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract Poison Poison { get; }
-
- public abstract double MinPoisoningSkill { get; }
- public abstract double MaxPoisoningSkill { get; }
-
- 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 void DoPoison(Mobile from)
- {
- from.ApplyPoison(from, Poison);
- }
-
- public override void Drink(Mobile from)
- {
- DoPoison(from);
-
- PlayDrinkEffect(from);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
- }
- }
+using Server.Engines.ConPVP;
+
+namespace Server.Items
+{
+ public abstract class BasePoisonPotion : BasePotion
+ {
+ public BasePoisonPotion(PotionEffect effect) : base(0xF0A, effect)
+ {
+ }
+
+ public BasePoisonPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract Poison Poison { get; }
+
+ public abstract double MinPoisoningSkill { get; }
+ public abstract double MaxPoisoningSkill { get; }
+
+ 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 void DoPoison(Mobile from)
+ {
+ from.ApplyPoison(from, Poison);
+ }
+
+ public override void Drink(Mobile from)
+ {
+ DoPoison(from);
+
+ PlayDrinkEffect(from);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/DeadlyPoisonPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/DeadlyPoisonPotion.cs
index e3b3821a2..736b30e93 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/DeadlyPoisonPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/DeadlyPoisonPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class DeadlyPoisonPotion : BasePoisonPotion
- {
- [Constructible]
- public DeadlyPoisonPotion() : base(PotionEffect.PoisonDeadly)
- {
- }
-
- public DeadlyPoisonPotion(Serial serial) : base(serial)
- {
- }
-
- public override Poison Poison => Poison.Deadly;
-
- public override double MinPoisoningSkill => 95.0;
- public override double MaxPoisoningSkill => 100.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
+{
+ public class DeadlyPoisonPotion : BasePoisonPotion
+ {
+ [Constructible]
+ public DeadlyPoisonPotion() : base(PotionEffect.PoisonDeadly)
+ {
+ }
+
+ public DeadlyPoisonPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override Poison Poison => Poison.Deadly;
+
+ public override double MinPoisoningSkill => 95.0;
+ public override double MaxPoisoningSkill => 100.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/GreaterPoisonPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/GreaterPoisonPotion.cs
index ff5210904..9ea6722ac 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/GreaterPoisonPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/GreaterPoisonPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class GreaterPoisonPotion : BasePoisonPotion
- {
- [Constructible]
- public GreaterPoisonPotion() : base(PotionEffect.PoisonGreater)
- {
- }
-
- public GreaterPoisonPotion(Serial serial) : base(serial)
- {
- }
-
- public override Poison Poison => Poison.Greater;
-
- public override double MinPoisoningSkill => 60.0;
- public override double MaxPoisoningSkill => 100.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
+{
+ public class GreaterPoisonPotion : BasePoisonPotion
+ {
+ [Constructible]
+ public GreaterPoisonPotion() : base(PotionEffect.PoisonGreater)
+ {
+ }
+
+ public GreaterPoisonPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override Poison Poison => Poison.Greater;
+
+ public override double MinPoisoningSkill => 60.0;
+ public override double MaxPoisoningSkill => 100.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/LesserPoisonPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/LesserPoisonPotion.cs
index d2a5192e8..8f966ab0a 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/LesserPoisonPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/LesserPoisonPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class LesserPoisonPotion : BasePoisonPotion
- {
- [Constructible]
- public LesserPoisonPotion() : base(PotionEffect.PoisonLesser)
- {
- }
-
- public LesserPoisonPotion(Serial serial) : base(serial)
- {
- }
-
- public override Poison Poison => Poison.Lesser;
-
- public override double MinPoisoningSkill => 0.0;
- public override double MaxPoisoningSkill => 60.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
+{
+ public class LesserPoisonPotion : BasePoisonPotion
+ {
+ [Constructible]
+ public LesserPoisonPotion() : base(PotionEffect.PoisonLesser)
+ {
+ }
+
+ public LesserPoisonPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override Poison Poison => Poison.Lesser;
+
+ public override double MinPoisoningSkill => 0.0;
+ public override double MaxPoisoningSkill => 60.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/PoisonPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/PoisonPotion.cs
index 6a5d9bd93..8b687d118 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/PoisonPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Poison Potions/PoisonPotion.cs
@@ -1,33 +1,33 @@
-namespace Server.Items
-{
- public class PoisonPotion : BasePoisonPotion
- {
- [Constructible]
- public PoisonPotion() : base(PotionEffect.Poison)
- {
- }
-
- public PoisonPotion(Serial serial) : base(serial)
- {
- }
-
- public override Poison Poison => Poison.Regular;
-
- public override double MinPoisoningSkill => 30.0;
- public override double MaxPoisoningSkill => 70.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
+{
+ public class PoisonPotion : BasePoisonPotion
+ {
+ [Constructible]
+ public PoisonPotion() : base(PotionEffect.Poison)
+ {
+ }
+
+ public PoisonPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override Poison Poison => Poison.Regular;
+
+ public override double MinPoisoningSkill => 30.0;
+ public override double MaxPoisoningSkill => 70.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/BaseRefreshPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/BaseRefreshPotion.cs
index 60ff135e4..9006f98ff 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/BaseRefreshPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/BaseRefreshPotion.cs
@@ -1,48 +1,48 @@
-using Server.Engines.ConPVP;
-
-namespace Server.Items
-{
- public abstract class BaseRefreshPotion : BasePotion
- {
- public BaseRefreshPotion(PotionEffect effect) : base(0xF0B, effect)
- {
- }
-
- public BaseRefreshPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract double Refresh { get; }
-
- 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 Drink(Mobile from)
- {
- if (from.Stam < from.StamMax)
- {
- from.Stam += Scale(from, (int)(Refresh * from.StamMax));
-
- PlayDrinkEffect(from);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
- }
- else
- {
- from.SendMessage("You decide against drinking this potion, as you are already at full stamina.");
- }
- }
- }
+using Server.Engines.ConPVP;
+
+namespace Server.Items
+{
+ public abstract class BaseRefreshPotion : BasePotion
+ {
+ public BaseRefreshPotion(PotionEffect effect) : base(0xF0B, effect)
+ {
+ }
+
+ public BaseRefreshPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract double Refresh { get; }
+
+ 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 Drink(Mobile from)
+ {
+ if (from.Stam < from.StamMax)
+ {
+ from.Stam += Scale(from, (int)(Refresh * from.StamMax));
+
+ PlayDrinkEffect(from);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+ }
+ else
+ {
+ from.SendMessage("You decide against drinking this potion, as you are already at full stamina.");
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/RefreshPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/RefreshPotion.cs
index feae2a53e..8a01c6857 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/RefreshPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/RefreshPotion.cs
@@ -1,30 +1,30 @@
-namespace Server.Items
-{
- public class RefreshPotion : BaseRefreshPotion
- {
- [Constructible]
- public RefreshPotion() : base(PotionEffect.Refresh)
- {
- }
-
- public RefreshPotion(Serial serial) : base(serial)
- {
- }
-
- public override double Refresh => 0.25;
-
- 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 RefreshPotion : BaseRefreshPotion
+ {
+ [Constructible]
+ public RefreshPotion() : base(PotionEffect.Refresh)
+ {
+ }
+
+ public RefreshPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override double Refresh => 0.25;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/TotalRefreshPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/TotalRefreshPotion.cs
index 283986398..2fba59e2b 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/TotalRefreshPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Refresh Potions/TotalRefreshPotion.cs
@@ -1,30 +1,30 @@
-namespace Server.Items
-{
- public class TotalRefreshPotion : BaseRefreshPotion
- {
- [Constructible]
- public TotalRefreshPotion() : base(PotionEffect.RefreshTotal)
- {
- }
-
- public TotalRefreshPotion(Serial serial) : base(serial)
- {
- }
-
- public override double Refresh => 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
+{
+ public class TotalRefreshPotion : BaseRefreshPotion
+ {
+ [Constructible]
+ public TotalRefreshPotion() : base(PotionEffect.RefreshTotal)
+ {
+ }
+
+ public TotalRefreshPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override double Refresh => 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/BaseStrengthPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/BaseStrengthPotion.cs
index 4caa3daeb..d96c0e5cd 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/BaseStrengthPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/BaseStrengthPotion.cs
@@ -1,59 +1,59 @@
-using System;
-using Server.Engines.ConPVP;
-using Server.Spells;
-
-namespace Server.Items
-{
- public abstract class BaseStrengthPotion : BasePotion
- {
- public BaseStrengthPotion(PotionEffect effect) : base(0xF09, effect)
- {
- }
-
- public BaseStrengthPotion(Serial serial) : base(serial)
- {
- }
-
- public abstract int StrOffset { get; }
- public abstract TimeSpan Duration { get; }
-
- 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 bool DoStrength(Mobile from)
- {
- // TODO: Verify scaled; is it offset, duration, or both?
- if (SpellHelper.AddStatOffset(from, StatType.Str, Scale(from, StrOffset), Duration))
- {
- from.FixedEffect(0x375A, 10, 15);
- from.PlaySound(0x1E7);
- return true;
- }
-
- from.SendLocalizedMessage(502173); // You are already under a similar effect.
- return false;
- }
-
- public override void Drink(Mobile from)
- {
- if (DoStrength(from))
- {
- PlayDrinkEffect(from);
-
- if (!DuelContext.IsFreeConsume(from))
- Consume();
- }
- }
- }
+using System;
+using Server.Engines.ConPVP;
+using Server.Spells;
+
+namespace Server.Items
+{
+ public abstract class BaseStrengthPotion : BasePotion
+ {
+ public BaseStrengthPotion(PotionEffect effect) : base(0xF09, effect)
+ {
+ }
+
+ public BaseStrengthPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract int StrOffset { get; }
+ public abstract TimeSpan Duration { get; }
+
+ 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 bool DoStrength(Mobile from)
+ {
+ // TODO: Verify scaled; is it offset, duration, or both?
+ if (SpellHelper.AddStatOffset(from, StatType.Str, Scale(from, StrOffset), Duration))
+ {
+ from.FixedEffect(0x375A, 10, 15);
+ from.PlaySound(0x1E7);
+ return true;
+ }
+
+ from.SendLocalizedMessage(502173); // You are already under a similar effect.
+ return false;
+ }
+
+ public override void Drink(Mobile from)
+ {
+ if (DoStrength(from))
+ {
+ PlayDrinkEffect(from);
+
+ if (!DuelContext.IsFreeConsume(from))
+ Consume();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/GreaterStrengthPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/GreaterStrengthPotion.cs
index 16bdc0e4e..db1a4e1eb 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/GreaterStrengthPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/GreaterStrengthPotion.cs
@@ -1,33 +1,33 @@
-using System;
-
-namespace Server.Items
-{
- public class GreaterStrengthPotion : BaseStrengthPotion
- {
- [Constructible]
- public GreaterStrengthPotion() : base(PotionEffect.StrengthGreater)
- {
- }
-
- public GreaterStrengthPotion(Serial serial) : base(serial)
- {
- }
-
- public override int StrOffset => 20;
- public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
- }
- }
+using System;
+
+namespace Server.Items
+{
+ public class GreaterStrengthPotion : BaseStrengthPotion
+ {
+ [Constructible]
+ public GreaterStrengthPotion() : base(PotionEffect.StrengthGreater)
+ {
+ }
+
+ public GreaterStrengthPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int StrOffset => 20;
+ public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/StrengthPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/StrengthPotion.cs
index 0eb9961a0..25a976881 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/StrengthPotion.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Strength Potions/StrengthPotion.cs
@@ -1,33 +1,33 @@
-using System;
-
-namespace Server.Items
-{
- public class StrengthPotion : BaseStrengthPotion
- {
- [Constructible]
- public StrengthPotion() : base(PotionEffect.Strength)
- {
- }
-
- public StrengthPotion(Serial serial) : base(serial)
- {
- }
-
- public override int StrOffset => 10;
- public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
- }
- }
+using System;
+
+namespace Server.Items
+{
+ public class StrengthPotion : BaseStrengthPotion
+ {
+ [Constructible]
+ public StrengthPotion() : base(PotionEffect.Strength)
+ {
+ }
+
+ public StrengthPotion(Serial serial) : base(serial)
+ {
+ }
+
+ public override int StrOffset => 10;
+ public override TimeSpan Duration => TimeSpan.FromMinutes(2.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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs b/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs
index cd4b6be69..35c5cc158 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs
@@ -1,472 +1,472 @@
-using System;
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Engines.Craft;
-using Server.Gumps;
-using Server.Mobiles;
-using Server.Multis;
-using Server.Network;
-
-namespace Server.Items
-{
- public class Runebook : Item, ISecurable, ICraftable
- {
- public static readonly TimeSpan UseDelay = TimeSpan.FromSeconds(7.0);
- private Mobile m_Crafter;
- private int m_DefaultIndex;
-
- private string m_Description;
-
- private BookQuality m_Quality;
-
- [Constructible]
- public Runebook() : this(Core.SE ? 12 : 6)
- {
- }
-
- [Constructible]
- public Runebook(int maxCharges) : base(Core.AOS ? 0x22C5 : 0xEFA)
- {
- Weight = Core.SE ? 1.0 : 3.0;
- LootType = LootType.Blessed;
- Hue = 0x461;
-
- Layer = Core.AOS ? Layer.Invalid : Layer.OneHanded;
-
- Entries = new List();
-
- MaxCharges = maxCharges;
-
- m_DefaultIndex = -1;
-
- Level = SecureLevel.CoOwners;
- }
-
- public Runebook(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public BookQuality Quality
- {
- get => m_Quality;
- set
- {
- m_Quality = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public DateTime NextUse { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Crafter
- {
- get => m_Crafter;
- set
- {
- m_Crafter = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public string Description
- {
- get => m_Description;
- set
- {
- m_Description = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int CurCharges { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int MaxCharges { get; set; }
-
- public List Openers { get; set; } = new List();
-
- public override int LabelNumber => 1041267; // runebook
-
- public List Entries { get; private set; }
-
- public RunebookEntry Default
- {
- get
- {
- if (m_DefaultIndex >= 0 && m_DefaultIndex < Entries.Count)
- return Entries[m_DefaultIndex];
-
- return null;
- }
- set
- {
- if (value == null)
- m_DefaultIndex = -1;
- else
- m_DefaultIndex = Entries.IndexOf(value);
- }
- }
-
- public override bool DisplayLootType => Core.AOS;
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- int charges = 5 + quality + (int)(from.Skills.Inscribe.Value / 30);
-
- if (charges > 10)
- charges = 10;
-
- MaxCharges = Core.SE ? charges * 2 : charges;
-
- if (makersMark)
- Crafter = from;
-
- m_Quality = (BookQuality)(quality - 1);
-
- return quality;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SecureLevel Level { get; set; }
-
- public override bool AllowEquippedCast(Mobile from) => true;
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
- SetSecureLevelEntry.AddTo(from, this, list);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(3);
-
- writer.Write((byte)m_Quality);
-
- writer.Write(m_Crafter);
-
- writer.Write((int)Level);
-
- writer.Write(Entries.Count);
-
- for (int i = 0; i < Entries.Count; ++i)
- Entries[i].Serialize(writer);
-
- writer.Write(m_Description);
- writer.Write(CurCharges);
- writer.Write(MaxCharges);
- writer.Write(m_DefaultIndex);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- LootType = LootType.Blessed;
-
- if (Core.SE && Weight == 3.0)
- Weight = 1.0;
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 3:
- {
- m_Quality = (BookQuality)reader.ReadByte();
- goto case 2;
- }
- case 2:
- {
- m_Crafter = reader.ReadMobile();
- goto case 1;
- }
- case 1:
- {
- Level = (SecureLevel)reader.ReadInt();
- goto case 0;
- }
- case 0:
- {
- int count = reader.ReadInt();
-
- Entries = new List(count);
-
- for (int i = 0; i < count; ++i)
- Entries.Add(new RunebookEntry(reader));
-
- m_Description = reader.ReadString();
- CurCharges = reader.ReadInt();
- MaxCharges = reader.ReadInt();
- m_DefaultIndex = reader.ReadInt();
-
- break;
- }
- }
- }
-
- public void DropRune(Mobile from, RunebookEntry e, int index)
- {
- if (m_DefaultIndex > index)
- m_DefaultIndex -= 1;
- else if (m_DefaultIndex == index)
- m_DefaultIndex = -1;
-
- Entries.RemoveAt(index);
-
- RecallRune rune = new RecallRune();
-
- rune.Target = e.Location;
- rune.TargetMap = e.Map;
- rune.Description = e.Description;
- rune.House = e.House;
- rune.Marked = true;
-
- from.AddToBackpack(rune);
-
- from.SendLocalizedMessage(502421); // You have removed the rune.
- }
-
- public bool IsOpen(Mobile toCheck)
- {
- NetState ns = toCheck.NetState;
-
- if (ns == null)
- return false;
-
- foreach (Gump gump in ns.Gumps)
- if (gump is RunebookGump bookGump && bookGump.Book == this)
- return true;
-
- return false;
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_Quality == BookQuality.Exceptional)
- list.Add(1063341); // exceptional
-
- if (m_Crafter != null)
- list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
-
- if (!string.IsNullOrEmpty(m_Description))
- list.Add(m_Description);
- }
-
- public override bool OnDragLift(Mobile from)
- {
- if (from.HasGump())
- {
- from.SendLocalizedMessage(500169); // You cannot pick that up.
- return false;
- }
-
- foreach (Mobile m in Openers)
- if (IsOpen(m))
- m.CloseGump();
-
- Openers.Clear();
-
- return true;
- }
-
- public override void OnSingleClick(Mobile from)
- {
- if (m_Description?.Length > 0)
- LabelTo(from, m_Description);
-
- base.OnSingleClick(from);
-
- if (m_Crafter != null)
- LabelTo(from, 1050043, m_Crafter.Name);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (from.InRange(GetWorldLocation(), Core.ML ? 3 : 1) && CheckAccess(from))
- {
- if (RootParent is BaseCreature)
- {
- from.SendLocalizedMessage(502402); // That is inaccessible.
- return;
- }
-
- if (DateTime.UtcNow < NextUse)
- {
- from.SendLocalizedMessage(502406); // This book needs time to recharge.
- return;
- }
-
- from.CloseGump();
- from.SendGump(new RunebookGump(from, this));
-
- Openers.Add(from);
- }
- }
-
- public virtual void OnTravel()
- {
- if (!Core.SA)
- NextUse = DateTime.UtcNow + UseDelay;
- }
-
- public override void OnAfterDuped(Item newItem)
- {
- if (!(newItem is Runebook book))
- return;
-
- book.Entries = new List();
-
- for (int i = 0; i < Entries.Count; i++)
- {
- RunebookEntry entry = Entries[i];
-
- book.Entries.Add(new RunebookEntry(entry.Location, entry.Map, entry.Description, entry.House));
- }
- }
-
- public bool CheckAccess(Mobile m)
- {
- if (!IsLockedDown || m.AccessLevel >= AccessLevel.GameMaster)
- return true;
-
- BaseHouse house = BaseHouse.FindHouseAt(this);
-
- return (house?.IsAosRules != true || (house.Public && !house.IsBanned(m)) || house.HasAccess(m)) &&
- house?.HasSecureAccess(m, Level) == true;
- }
-
- public override bool OnDragDrop(Mobile from, Item dropped)
- {
- if (dropped is RecallRune rune)
- {
- if (IsLockedDown && from.AccessLevel < AccessLevel.GameMaster)
- {
- from.SendLocalizedMessage(502413, null, 0x35); // That cannot be done while the book is locked down.
- }
- else if (IsOpen(from))
- {
- from.SendLocalizedMessage(1005571); // You cannot place objects in the book while viewing the contents.
- }
- else if (Entries.Count < 16)
- {
- if (rune.Marked && rune.TargetMap != null)
- {
- Entries.Add(new RunebookEntry(rune.Target, rune.TargetMap, rune.Description, rune.House));
-
- rune.Delete();
-
- from.Send(new PlaySound(0x42, GetWorldLocation()));
-
- from.SendMessage(rune.Description?.Trim().IsNullOrDefault("(indescript)"));
-
- return true;
- }
-
- from.SendLocalizedMessage(502409); // This rune does not have a marked location.
- }
- else
- {
- from.SendLocalizedMessage(502401); // This runebook is full.
- }
- }
- else if (dropped is RecallScroll)
- {
- if (CurCharges < MaxCharges)
- {
- from.Send(new PlaySound(0x249, GetWorldLocation()));
-
- int amount = dropped.Amount;
-
- if (amount > MaxCharges - CurCharges)
- {
- dropped.Consume(MaxCharges - CurCharges);
- CurCharges = MaxCharges;
- }
- else
- {
- CurCharges += amount;
- dropped.Delete();
-
- return true;
- }
- }
- else
- {
- from.SendLocalizedMessage(502410); // This book already has the maximum amount of charges.
- }
- }
-
- return false;
- }
- }
-
- public class RunebookEntry
- {
- public RunebookEntry(Point3D loc, Map map, string desc, BaseHouse house = null)
- {
- Location = loc;
- Map = map;
- Description = desc;
- House = house;
- }
-
- public RunebookEntry(IGenericReader reader)
- {
- int version = reader.ReadByte();
-
- switch (version)
- {
- case 1:
- {
- House = reader.ReadItem() as BaseHouse;
- goto case 0;
- }
- case 0:
- {
- Location = reader.ReadPoint3D();
- Map = reader.ReadMap();
- Description = reader.ReadString();
-
- break;
- }
- }
- }
-
- public Point3D Location { get; }
-
- public Map Map { get; }
-
- public string Description { get; }
-
- public BaseHouse House { get; }
-
- public void Serialize(IGenericWriter writer)
- {
- if (House?.Deleted == false)
- {
- writer.Write((byte)1); // version
-
- writer.Write(House);
- }
- else
- {
- writer.Write((byte)0); // version
- }
-
- writer.Write(Location);
- writer.Write(Map);
- writer.Write(Description);
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Engines.Craft;
+using Server.Gumps;
+using Server.Mobiles;
+using Server.Multis;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class Runebook : Item, ISecurable, ICraftable
+ {
+ public static readonly TimeSpan UseDelay = TimeSpan.FromSeconds(7.0);
+ private Mobile m_Crafter;
+ private int m_DefaultIndex;
+
+ private string m_Description;
+
+ private BookQuality m_Quality;
+
+ [Constructible]
+ public Runebook() : this(Core.SE ? 12 : 6)
+ {
+ }
+
+ [Constructible]
+ public Runebook(int maxCharges) : base(Core.AOS ? 0x22C5 : 0xEFA)
+ {
+ Weight = Core.SE ? 1.0 : 3.0;
+ LootType = LootType.Blessed;
+ Hue = 0x461;
+
+ Layer = Core.AOS ? Layer.Invalid : Layer.OneHanded;
+
+ Entries = new List();
+
+ MaxCharges = maxCharges;
+
+ m_DefaultIndex = -1;
+
+ Level = SecureLevel.CoOwners;
+ }
+
+ public Runebook(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public BookQuality Quality
+ {
+ get => m_Quality;
+ set
+ {
+ m_Quality = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public DateTime NextUse { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Crafter
+ {
+ get => m_Crafter;
+ set
+ {
+ m_Crafter = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public string Description
+ {
+ get => m_Description;
+ set
+ {
+ m_Description = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int CurCharges { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int MaxCharges { get; set; }
+
+ public List Openers { get; set; } = new List();
+
+ public override int LabelNumber => 1041267; // runebook
+
+ public List Entries { get; private set; }
+
+ public RunebookEntry Default
+ {
+ get
+ {
+ if (m_DefaultIndex >= 0 && m_DefaultIndex < Entries.Count)
+ return Entries[m_DefaultIndex];
+
+ return null;
+ }
+ set
+ {
+ if (value == null)
+ m_DefaultIndex = -1;
+ else
+ m_DefaultIndex = Entries.IndexOf(value);
+ }
+ }
+
+ public override bool DisplayLootType => Core.AOS;
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ int charges = 5 + quality + (int)(from.Skills.Inscribe.Value / 30);
+
+ if (charges > 10)
+ charges = 10;
+
+ MaxCharges = Core.SE ? charges * 2 : charges;
+
+ if (makersMark)
+ Crafter = from;
+
+ m_Quality = (BookQuality)(quality - 1);
+
+ return quality;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SecureLevel Level { get; set; }
+
+ public override bool AllowEquippedCast(Mobile from) => true;
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+ SetSecureLevelEntry.AddTo(from, this, list);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(3);
+
+ writer.Write((byte)m_Quality);
+
+ writer.Write(m_Crafter);
+
+ writer.Write((int)Level);
+
+ writer.Write(Entries.Count);
+
+ for (int i = 0; i < Entries.Count; ++i)
+ Entries[i].Serialize(writer);
+
+ writer.Write(m_Description);
+ writer.Write(CurCharges);
+ writer.Write(MaxCharges);
+ writer.Write(m_DefaultIndex);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ LootType = LootType.Blessed;
+
+ if (Core.SE && Weight == 3.0)
+ Weight = 1.0;
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 3:
+ {
+ m_Quality = (BookQuality)reader.ReadByte();
+ goto case 2;
+ }
+ case 2:
+ {
+ m_Crafter = reader.ReadMobile();
+ goto case 1;
+ }
+ case 1:
+ {
+ Level = (SecureLevel)reader.ReadInt();
+ goto case 0;
+ }
+ case 0:
+ {
+ int count = reader.ReadInt();
+
+ Entries = new List(count);
+
+ for (int i = 0; i < count; ++i)
+ Entries.Add(new RunebookEntry(reader));
+
+ m_Description = reader.ReadString();
+ CurCharges = reader.ReadInt();
+ MaxCharges = reader.ReadInt();
+ m_DefaultIndex = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+
+ public void DropRune(Mobile from, RunebookEntry e, int index)
+ {
+ if (m_DefaultIndex > index)
+ m_DefaultIndex -= 1;
+ else if (m_DefaultIndex == index)
+ m_DefaultIndex = -1;
+
+ Entries.RemoveAt(index);
+
+ RecallRune rune = new RecallRune();
+
+ rune.Target = e.Location;
+ rune.TargetMap = e.Map;
+ rune.Description = e.Description;
+ rune.House = e.House;
+ rune.Marked = true;
+
+ from.AddToBackpack(rune);
+
+ from.SendLocalizedMessage(502421); // You have removed the rune.
+ }
+
+ public bool IsOpen(Mobile toCheck)
+ {
+ NetState ns = toCheck.NetState;
+
+ if (ns == null)
+ return false;
+
+ foreach (Gump gump in ns.Gumps)
+ if (gump is RunebookGump bookGump && bookGump.Book == this)
+ return true;
+
+ return false;
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_Quality == BookQuality.Exceptional)
+ list.Add(1063341); // exceptional
+
+ if (m_Crafter != null)
+ list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
+
+ if (!string.IsNullOrEmpty(m_Description))
+ list.Add(m_Description);
+ }
+
+ public override bool OnDragLift(Mobile from)
+ {
+ if (from.HasGump())
+ {
+ from.SendLocalizedMessage(500169); // You cannot pick that up.
+ return false;
+ }
+
+ foreach (Mobile m in Openers)
+ if (IsOpen(m))
+ m.CloseGump();
+
+ Openers.Clear();
+
+ return true;
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ if (m_Description?.Length > 0)
+ LabelTo(from, m_Description);
+
+ base.OnSingleClick(from);
+
+ if (m_Crafter != null)
+ LabelTo(from, 1050043, m_Crafter.Name);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (from.InRange(GetWorldLocation(), Core.ML ? 3 : 1) && CheckAccess(from))
+ {
+ if (RootParent is BaseCreature)
+ {
+ from.SendLocalizedMessage(502402); // That is inaccessible.
+ return;
+ }
+
+ if (DateTime.UtcNow < NextUse)
+ {
+ from.SendLocalizedMessage(502406); // This book needs time to recharge.
+ return;
+ }
+
+ from.CloseGump();
+ from.SendGump(new RunebookGump(from, this));
+
+ Openers.Add(from);
+ }
+ }
+
+ public virtual void OnTravel()
+ {
+ if (!Core.SA)
+ NextUse = DateTime.UtcNow + UseDelay;
+ }
+
+ public override void OnAfterDuped(Item newItem)
+ {
+ if (!(newItem is Runebook book))
+ return;
+
+ book.Entries = new List();
+
+ for (int i = 0; i < Entries.Count; i++)
+ {
+ RunebookEntry entry = Entries[i];
+
+ book.Entries.Add(new RunebookEntry(entry.Location, entry.Map, entry.Description, entry.House));
+ }
+ }
+
+ public bool CheckAccess(Mobile m)
+ {
+ if (!IsLockedDown || m.AccessLevel >= AccessLevel.GameMaster)
+ return true;
+
+ BaseHouse house = BaseHouse.FindHouseAt(this);
+
+ return (house?.IsAosRules != true || (house.Public && !house.IsBanned(m)) || house.HasAccess(m)) &&
+ house?.HasSecureAccess(m, Level) == true;
+ }
+
+ public override bool OnDragDrop(Mobile from, Item dropped)
+ {
+ if (dropped is RecallRune rune)
+ {
+ if (IsLockedDown && from.AccessLevel < AccessLevel.GameMaster)
+ {
+ from.SendLocalizedMessage(502413, null, 0x35); // That cannot be done while the book is locked down.
+ }
+ else if (IsOpen(from))
+ {
+ from.SendLocalizedMessage(1005571); // You cannot place objects in the book while viewing the contents.
+ }
+ else if (Entries.Count < 16)
+ {
+ if (rune.Marked && rune.TargetMap != null)
+ {
+ Entries.Add(new RunebookEntry(rune.Target, rune.TargetMap, rune.Description, rune.House));
+
+ rune.Delete();
+
+ from.Send(new PlaySound(0x42, GetWorldLocation()));
+
+ from.SendMessage(rune.Description?.Trim().IsNullOrDefault("(indescript)"));
+
+ return true;
+ }
+
+ from.SendLocalizedMessage(502409); // This rune does not have a marked location.
+ }
+ else
+ {
+ from.SendLocalizedMessage(502401); // This runebook is full.
+ }
+ }
+ else if (dropped is RecallScroll)
+ {
+ if (CurCharges < MaxCharges)
+ {
+ from.Send(new PlaySound(0x249, GetWorldLocation()));
+
+ int amount = dropped.Amount;
+
+ if (amount > MaxCharges - CurCharges)
+ {
+ dropped.Consume(MaxCharges - CurCharges);
+ CurCharges = MaxCharges;
+ }
+ else
+ {
+ CurCharges += amount;
+ dropped.Delete();
+
+ return true;
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(502410); // This book already has the maximum amount of charges.
+ }
+ }
+
+ return false;
+ }
+ }
+
+ public class RunebookEntry
+ {
+ public RunebookEntry(Point3D loc, Map map, string desc, BaseHouse house = null)
+ {
+ Location = loc;
+ Map = map;
+ Description = desc;
+ House = house;
+ }
+
+ public RunebookEntry(IGenericReader reader)
+ {
+ int version = reader.ReadByte();
+
+ switch (version)
+ {
+ case 1:
+ {
+ House = reader.ReadItem() as BaseHouse;
+ goto case 0;
+ }
+ case 0:
+ {
+ Location = reader.ReadPoint3D();
+ Map = reader.ReadMap();
+ Description = reader.ReadString();
+
+ break;
+ }
+ }
+ }
+
+ public Point3D Location { get; }
+
+ public Map Map { get; }
+
+ public string Description { get; }
+
+ public BaseHouse House { get; }
+
+ public void Serialize(IGenericWriter writer)
+ {
+ if (House?.Deleted == false)
+ {
+ writer.Write((byte)1); // version
+
+ writer.Write(House);
+ }
+ else
+ {
+ writer.Write((byte)0); // version
+ }
+
+ writer.Write(Location);
+ writer.Write(Map);
+ writer.Write(Description);
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EarthquakeScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EarthquakeScroll.cs
index 08288116b..f6d03d3f5 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EarthquakeScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EarthquakeScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class EarthquakeScroll : SpellScroll
- {
- [Constructible]
- public EarthquakeScroll(int amount = 1) : base(56, 0x1F65, amount)
- {
- }
-
- public EarthquakeScroll(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 EarthquakeScroll : SpellScroll
+ {
+ [Constructible]
+ public EarthquakeScroll(int amount = 1) : base(56, 0x1F65, amount)
+ {
+ }
+
+ public EarthquakeScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EnergyVortexScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EnergyVortexScroll.cs
index a92c35167..3edcd887b 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EnergyVortexScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/EnergyVortexScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class EnergyVortexScroll : SpellScroll
- {
- [Constructible]
- public EnergyVortexScroll(int amount = 1) : base(57, 0x1F66, amount)
- {
- }
-
- public EnergyVortexScroll(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 EnergyVortexScroll : SpellScroll
+ {
+ [Constructible]
+ public EnergyVortexScroll(int amount = 1) : base(57, 0x1F66, amount)
+ {
+ }
+
+ public EnergyVortexScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/ResurrectionScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/ResurrectionScroll.cs
index 1c3a015a9..9d65e4f58 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/ResurrectionScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/ResurrectionScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ResurrectionScroll : SpellScroll
- {
- [Constructible]
- public ResurrectionScroll(int amount = 1) : base(58, 0x1F67, amount)
- {
- }
-
- public ResurrectionScroll(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 ResurrectionScroll : SpellScroll
+ {
+ [Constructible]
+ public ResurrectionScroll(int amount = 1) : base(58, 0x1F67, amount)
+ {
+ }
+
+ public ResurrectionScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonAirElementalScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonAirElementalScroll.cs
index 0b07c6627..4e1c601f5 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonAirElementalScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonAirElementalScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonAirElementalScroll : SpellScroll
- {
- [Constructible]
- public SummonAirElementalScroll(int amount = 1) : base(59, 0x1F68, amount)
- {
- }
-
- public SummonAirElementalScroll(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 SummonAirElementalScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonAirElementalScroll(int amount = 1) : base(59, 0x1F68, amount)
+ {
+ }
+
+ public SummonAirElementalScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonDaemonScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonDaemonScroll.cs
index 26ef5be45..cfd3da6d6 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonDaemonScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonDaemonScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonDaemonScroll : SpellScroll
- {
- [Constructible]
- public SummonDaemonScroll(int amount = 1) : base(60, 0x1F69, amount)
- {
- }
-
- public SummonDaemonScroll(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 SummonDaemonScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonDaemonScroll(int amount = 1) : base(60, 0x1F69, amount)
+ {
+ }
+
+ public SummonDaemonScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs
index 63d0b84fc..a2c1c4230 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonEarthElementalScroll : SpellScroll
- {
- [Constructible]
- public SummonEarthElementalScroll(int amount = 1) : base(61, 0x1F6A, amount)
- {
- }
-
- public SummonEarthElementalScroll(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 SummonEarthElementalScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonEarthElementalScroll(int amount = 1) : base(61, 0x1F6A, amount)
+ {
+ }
+
+ public SummonEarthElementalScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonFireElementalScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonFireElementalScroll.cs
index c5e8399a2..3b858b25c 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonFireElementalScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonFireElementalScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonFireElementalScroll : SpellScroll
- {
- [Constructible]
- public SummonFireElementalScroll(int amount = 1) : base(62, 0x1F6B, amount)
- {
- }
-
- public SummonFireElementalScroll(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 SummonFireElementalScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonFireElementalScroll(int amount = 1) : base(62, 0x1F6B, amount)
+ {
+ }
+
+ public SummonFireElementalScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs
index 14cfaa303..e1ea9d030 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonWaterElementalScroll : SpellScroll
- {
- [Constructible]
- public SummonWaterElementalScroll(int amount = 1) : base(63, 0x1F6C, amount)
- {
- }
-
- public SummonWaterElementalScroll(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 SummonWaterElementalScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonWaterElementalScroll(int amount = 1) : base(63, 0x1F6C, amount)
+ {
+ }
+
+ public SummonWaterElementalScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/BladeSpiritsScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/BladeSpiritsScroll.cs
index dd4f3b01f..c259fdb0f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/BladeSpiritsScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/BladeSpiritsScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class BladeSpiritsScroll : SpellScroll
- {
- [Constructible]
- public BladeSpiritsScroll(int amount = 1) : base(32, 0x1F4D, amount)
- {
- }
-
- public BladeSpiritsScroll(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 BladeSpiritsScroll : SpellScroll
+ {
+ [Constructible]
+ public BladeSpiritsScroll(int amount = 1) : base(32, 0x1F4D, amount)
+ {
+ }
+
+ public BladeSpiritsScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/DispelFieldScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/DispelFieldScroll.cs
index 886f9425d..47f170dda 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/DispelFieldScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/DispelFieldScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class DispelFieldScroll : SpellScroll
- {
- [Constructible]
- public DispelFieldScroll(int amount = 1) : base(33, 0x1F4E, amount)
- {
- }
-
- public DispelFieldScroll(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 DispelFieldScroll : SpellScroll
+ {
+ [Constructible]
+ public DispelFieldScroll(int amount = 1) : base(33, 0x1F4E, amount)
+ {
+ }
+
+ public DispelFieldScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/IncognitoScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/IncognitoScroll.cs
index cdd81011d..06ad92040 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/IncognitoScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/IncognitoScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class IncognitoScroll : SpellScroll
- {
- [Constructible]
- public IncognitoScroll(int amount = 1) : base(34, 0x1F4F, amount)
- {
- }
-
- public IncognitoScroll(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 IncognitoScroll : SpellScroll
+ {
+ [Constructible]
+ public IncognitoScroll(int amount = 1) : base(34, 0x1F4F, amount)
+ {
+ }
+
+ public IncognitoScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MagicReflectScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MagicReflectScroll.cs
index a52911b83..21f5890d0 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MagicReflectScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MagicReflectScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MagicReflectScroll : SpellScroll
- {
- [Constructible]
- public MagicReflectScroll(int amount = 1) : base(35, 0x1F50, amount)
- {
- }
-
- public MagicReflectScroll(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 MagicReflectScroll : SpellScroll
+ {
+ [Constructible]
+ public MagicReflectScroll(int amount = 1) : base(35, 0x1F50, amount)
+ {
+ }
+
+ public MagicReflectScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MindBlastScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MindBlastScroll.cs
index b3440bea9..0710c1ea1 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MindBlastScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/MindBlastScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MindBlastScroll : SpellScroll
- {
- [Constructible]
- public MindBlastScroll(int amount = 1) : base(36, 0x1F51, amount)
- {
- }
-
- public MindBlastScroll(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 MindBlastScroll : SpellScroll
+ {
+ [Constructible]
+ public MindBlastScroll(int amount = 1) : base(36, 0x1F51, amount)
+ {
+ }
+
+ public MindBlastScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/ParalyzeScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/ParalyzeScroll.cs
index 43d34daa7..53d5483ad 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/ParalyzeScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/ParalyzeScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ParalyzeScroll : SpellScroll
- {
- [Constructible]
- public ParalyzeScroll(int amount = 1) : base(37, 0x1F52, amount)
- {
- }
-
- public ParalyzeScroll(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 ParalyzeScroll : SpellScroll
+ {
+ [Constructible]
+ public ParalyzeScroll(int amount = 1) : base(37, 0x1F52, amount)
+ {
+ }
+
+ public ParalyzeScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/PoisonFieldScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/PoisonFieldScroll.cs
index 7fc814558..7d5b23d43 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/PoisonFieldScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/PoisonFieldScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class PoisonFieldScroll : SpellScroll
- {
- [Constructible]
- public PoisonFieldScroll(int amount = 1) : base(38, 0x1F53, amount)
- {
- }
-
- public PoisonFieldScroll(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 PoisonFieldScroll : SpellScroll
+ {
+ [Constructible]
+ public PoisonFieldScroll(int amount = 1) : base(38, 0x1F53, amount)
+ {
+ }
+
+ public PoisonFieldScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/SummonCreatureScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/SummonCreatureScroll.cs
index dfcf63260..081070afb 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/SummonCreatureScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fifth Circle/SummonCreatureScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonCreatureScroll : SpellScroll
- {
- [Constructible]
- public SummonCreatureScroll(int amount = 1) : base(39, 0x1F54, amount)
- {
- }
-
- public SummonCreatureScroll(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 SummonCreatureScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonCreatureScroll(int amount = 1) : base(39, 0x1F54, amount)
+ {
+ }
+
+ public SummonCreatureScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ClumsyScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ClumsyScroll.cs
index a6d7c457d..6393906d1 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ClumsyScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ClumsyScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ClumsyScroll : SpellScroll
- {
- [Constructible]
- public ClumsyScroll(int amount = 1) : base(0, 0x1F2E, amount)
- {
- }
-
- public ClumsyScroll(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 ClumsyScroll : SpellScroll
+ {
+ [Constructible]
+ public ClumsyScroll(int amount = 1) : base(0, 0x1F2E, amount)
+ {
+ }
+
+ public ClumsyScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/CreateFoodScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/CreateFoodScroll.cs
index 418cc2315..7495b9a59 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/CreateFoodScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/CreateFoodScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class CreateFoodScroll : SpellScroll
- {
- [Constructible]
- public CreateFoodScroll(int amount = 1) : base(1, 0x1F2F, amount)
- {
- }
-
- public CreateFoodScroll(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 CreateFoodScroll : SpellScroll
+ {
+ [Constructible]
+ public CreateFoodScroll(int amount = 1) : base(1, 0x1F2F, amount)
+ {
+ }
+
+ public CreateFoodScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/FeeblemindScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/FeeblemindScroll.cs
index d17076503..89db72392 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/FeeblemindScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/FeeblemindScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class FeeblemindScroll : SpellScroll
- {
- [Constructible]
- public FeeblemindScroll(int amount = 1) : base(2, 0x1F30, amount)
- {
- }
-
- public FeeblemindScroll(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 FeeblemindScroll : SpellScroll
+ {
+ [Constructible]
+ public FeeblemindScroll(int amount = 1) : base(2, 0x1F30, amount)
+ {
+ }
+
+ public FeeblemindScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/HealScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/HealScroll.cs
index b42701bbd..e2fe67852 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/HealScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/HealScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class HealScroll : SpellScroll
- {
- [Constructible]
- public HealScroll(int amount = 1) : base(3, 0x1F31, amount)
- {
- }
-
- public HealScroll(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 HealScroll : SpellScroll
+ {
+ [Constructible]
+ public HealScroll(int amount = 1) : base(3, 0x1F31, amount)
+ {
+ }
+
+ public HealScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/MagicArrowScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/MagicArrowScroll.cs
index 9a4f0ff77..3a4a39924 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/MagicArrowScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/MagicArrowScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MagicArrowScroll : SpellScroll
- {
- [Constructible]
- public MagicArrowScroll(int amount = 1) : base(4, 0x1F32, amount)
- {
- }
-
- public MagicArrowScroll(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 MagicArrowScroll : SpellScroll
+ {
+ [Constructible]
+ public MagicArrowScroll(int amount = 1) : base(4, 0x1F32, amount)
+ {
+ }
+
+ public MagicArrowScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/NightSightScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/NightSightScroll.cs
index 55133a537..63d134999 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/NightSightScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/NightSightScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class NightSightScroll : SpellScroll
- {
- [Constructible]
- public NightSightScroll(int amount = 1) : base(5, 0x1F33, amount)
- {
- }
-
- public NightSightScroll(Serial ser) : base(ser)
- {
- }
-
- 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 NightSightScroll : SpellScroll
+ {
+ [Constructible]
+ public NightSightScroll(int amount = 1) : base(5, 0x1F33, amount)
+ {
+ }
+
+ public NightSightScroll(Serial ser) : base(ser)
+ {
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ReactiveArmorScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ReactiveArmorScroll.cs
index a436dd472..100ca186b 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ReactiveArmorScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/ReactiveArmorScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ReactiveArmorScroll : SpellScroll
- {
- [Constructible]
- public ReactiveArmorScroll(int amount = 1) : base(6, 0x1F2D, amount)
- {
- }
-
- public ReactiveArmorScroll(Serial ser) : base(ser)
- {
- }
-
- 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 ReactiveArmorScroll : SpellScroll
+ {
+ [Constructible]
+ public ReactiveArmorScroll(int amount = 1) : base(6, 0x1F2D, amount)
+ {
+ }
+
+ public ReactiveArmorScroll(Serial ser) : base(ser)
+ {
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/WeakenScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/WeakenScroll.cs
index 4f2186a7b..95053a810 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/WeakenScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/First Circle/WeakenScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class WeakenScroll : SpellScroll
- {
- [Constructible]
- public WeakenScroll(int amount = 1) : base(7, 0x1F34, amount)
- {
- }
-
- public WeakenScroll(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 WeakenScroll : SpellScroll
+ {
+ [Constructible]
+ public WeakenScroll(int amount = 1) : base(7, 0x1F34, amount)
+ {
+ }
+
+ public WeakenScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchProtectionScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchProtectionScroll.cs
index 547efdb01..2addcef70 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchProtectionScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchProtectionScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ArchProtectionScroll : SpellScroll
- {
- [Constructible]
- public ArchProtectionScroll(int amount = 1) : base(25, 0x1F46, amount)
- {
- }
-
- public ArchProtectionScroll(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 ArchProtectionScroll : SpellScroll
+ {
+ [Constructible]
+ public ArchProtectionScroll(int amount = 1) : base(25, 0x1F46, amount)
+ {
+ }
+
+ public ArchProtectionScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchcureScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchcureScroll.cs
index b83686564..2c3af4e81 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchcureScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ArchcureScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ArchCureScroll : SpellScroll
- {
- [Constructible]
- public ArchCureScroll(int amount = 1) : base(24, 0x1F45, amount)
- {
- }
-
- public ArchCureScroll(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 ArchCureScroll : SpellScroll
+ {
+ [Constructible]
+ public ArchCureScroll(int amount = 1) : base(24, 0x1F45, amount)
+ {
+ }
+
+ public ArchCureScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/CurseScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/CurseScroll.cs
index f29aa5b80..500c58625 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/CurseScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/CurseScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class CurseScroll : SpellScroll
- {
- [Constructible]
- public CurseScroll(int amount = 1) : base(26, 0x1F47, amount)
- {
- }
-
- public CurseScroll(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 CurseScroll : SpellScroll
+ {
+ [Constructible]
+ public CurseScroll(int amount = 1) : base(26, 0x1F47, amount)
+ {
+ }
+
+ public CurseScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/FireFieldScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/FireFieldScroll.cs
index 396a2d761..7d9ed95e9 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/FireFieldScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/FireFieldScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class FireFieldScroll : SpellScroll
- {
- [Constructible]
- public FireFieldScroll(int amount = 1) : base(27, 0x1F48, amount)
- {
- }
-
- public FireFieldScroll(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 FireFieldScroll : SpellScroll
+ {
+ [Constructible]
+ public FireFieldScroll(int amount = 1) : base(27, 0x1F48, amount)
+ {
+ }
+
+ public FireFieldScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/GreaterHealScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/GreaterHealScroll.cs
index 8d35ae5c0..96d4c6aed 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/GreaterHealScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/GreaterHealScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class GreaterHealScroll : SpellScroll
- {
- [Constructible]
- public GreaterHealScroll(int amount = 1) : base(28, 0x1F49, amount)
- {
- }
-
- public GreaterHealScroll(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 GreaterHealScroll : SpellScroll
+ {
+ [Constructible]
+ public GreaterHealScroll(int amount = 1) : base(28, 0x1F49, amount)
+ {
+ }
+
+ public GreaterHealScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/LightningScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/LightningScroll.cs
index 825224573..01b180bf6 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/LightningScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/LightningScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class LightningScroll : SpellScroll
- {
- [Constructible]
- public LightningScroll(int amount = 1) : base(29, 0x1F4A, amount)
- {
- }
-
- public LightningScroll(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 LightningScroll : SpellScroll
+ {
+ [Constructible]
+ public LightningScroll(int amount = 1) : base(29, 0x1F4A, amount)
+ {
+ }
+
+ public LightningScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ManaDrainScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ManaDrainScroll.cs
index dad5cf1a5..817e8756c 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ManaDrainScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/ManaDrainScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ManaDrainScroll : SpellScroll
- {
- [Constructible]
- public ManaDrainScroll(int amount = 1) : base(30, 0x1F4B, amount)
- {
- }
-
- public ManaDrainScroll(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 ManaDrainScroll : SpellScroll
+ {
+ [Constructible]
+ public ManaDrainScroll(int amount = 1) : base(30, 0x1F4B, amount)
+ {
+ }
+
+ public ManaDrainScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/RecallScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/RecallScroll.cs
index c54c88dd1..aca7bd7d1 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/RecallScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Fourth Circle/RecallScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class RecallScroll : SpellScroll
- {
- [Constructible]
- public RecallScroll(int amount = 1) : base(31, 0x1F4C, amount)
- {
- }
-
- public RecallScroll(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 RecallScroll : SpellScroll
+ {
+ [Constructible]
+ public RecallScroll(int amount = 1) : base(31, 0x1F4C, amount)
+ {
+ }
+
+ public RecallScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/AnimateDeadScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/AnimateDeadScroll.cs
index ebedcc89f..5fb741e8f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/AnimateDeadScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/AnimateDeadScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class AnimateDeadScroll : SpellScroll
- {
- [Constructible]
- public AnimateDeadScroll(int amount = 1) : base(100, 0x2260, amount)
- {
- }
-
- public AnimateDeadScroll(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 AnimateDeadScroll : SpellScroll
+ {
+ [Constructible]
+ public AnimateDeadScroll(int amount = 1) : base(100, 0x2260, amount)
+ {
+ }
+
+ public AnimateDeadScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/BloodOathScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/BloodOathScroll.cs
index 5c23a761e..8c4e05bc8 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/BloodOathScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/BloodOathScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class BloodOathScroll : SpellScroll
- {
- [Constructible]
- public BloodOathScroll(int amount = 1) : base(101, 0x2261, amount)
- {
- }
-
- public BloodOathScroll(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 BloodOathScroll : SpellScroll
+ {
+ [Constructible]
+ public BloodOathScroll(int amount = 1) : base(101, 0x2261, amount)
+ {
+ }
+
+ public BloodOathScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CorpseSkinScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CorpseSkinScroll.cs
index 9140c0abb..6c2ab4009 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CorpseSkinScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CorpseSkinScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class CorpseSkinScroll : SpellScroll
- {
- [Constructible]
- public CorpseSkinScroll(int amount = 1) : base(102, 0x2262, amount)
- {
- }
-
- public CorpseSkinScroll(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 CorpseSkinScroll : SpellScroll
+ {
+ [Constructible]
+ public CorpseSkinScroll(int amount = 1) : base(102, 0x2262, amount)
+ {
+ }
+
+ public CorpseSkinScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CurseWeaponScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CurseWeaponScroll.cs
index f3014fc0b..24a55bbee 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CurseWeaponScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/CurseWeaponScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class CurseWeaponScroll : SpellScroll
- {
- [Constructible]
- public CurseWeaponScroll(int amount = 1) : base(103, 0x2263, amount)
- {
- }
-
- public CurseWeaponScroll(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 CurseWeaponScroll : SpellScroll
+ {
+ [Constructible]
+ public CurseWeaponScroll(int amount = 1) : base(103, 0x2263, amount)
+ {
+ }
+
+ public CurseWeaponScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/EvilOmenScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/EvilOmenScroll.cs
index ec3de3f42..2c6a3c650 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/EvilOmenScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/EvilOmenScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class EvilOmenScroll : SpellScroll
- {
- [Constructible]
- public EvilOmenScroll(int amount = 1) : base(104, 0x2264, amount)
- {
- }
-
- public EvilOmenScroll(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 EvilOmenScroll : SpellScroll
+ {
+ [Constructible]
+ public EvilOmenScroll(int amount = 1) : base(104, 0x2264, amount)
+ {
+ }
+
+ public EvilOmenScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/ExorcismScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/ExorcismScroll.cs
index 7187f2e8e..e2b1c7f40 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/ExorcismScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/ExorcismScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ExorcismScroll : SpellScroll
- {
- [Constructible]
- public ExorcismScroll(int amount = 1) : base(116, 0x2270, amount)
- {
- }
-
- public ExorcismScroll(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 ExorcismScroll : SpellScroll
+ {
+ [Constructible]
+ public ExorcismScroll(int amount = 1) : base(116, 0x2270, amount)
+ {
+ }
+
+ public ExorcismScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/HorrificBeastScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/HorrificBeastScroll.cs
index c18f222e4..37d4c423d 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/HorrificBeastScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/HorrificBeastScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class HorrificBeastScroll : SpellScroll
- {
- [Constructible]
- public HorrificBeastScroll(int amount = 1) : base(105, 0x2265, amount)
- {
- }
-
- public HorrificBeastScroll(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 HorrificBeastScroll : SpellScroll
+ {
+ [Constructible]
+ public HorrificBeastScroll(int amount = 1) : base(105, 0x2265, amount)
+ {
+ }
+
+ public HorrificBeastScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/LichFormScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/LichFormScroll.cs
index 3f9dd054d..2b719af60 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/LichFormScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/LichFormScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class LichFormScroll : SpellScroll
- {
- [Constructible]
- public LichFormScroll(int amount = 1) : base(106, 0x2266, amount)
- {
- }
-
- public LichFormScroll(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 LichFormScroll : SpellScroll
+ {
+ [Constructible]
+ public LichFormScroll(int amount = 1) : base(106, 0x2266, amount)
+ {
+ }
+
+ public LichFormScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/MindRotScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/MindRotScroll.cs
index 40b2908ba..de5f6b942 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/MindRotScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/MindRotScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MindRotScroll : SpellScroll
- {
- [Constructible]
- public MindRotScroll(int amount = 1) : base(107, 0x2267, amount)
- {
- }
-
- public MindRotScroll(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 MindRotScroll : SpellScroll
+ {
+ [Constructible]
+ public MindRotScroll(int amount = 1) : base(107, 0x2267, amount)
+ {
+ }
+
+ public MindRotScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PainSpikeScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PainSpikeScroll.cs
index d5417c318..04b1af65c 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PainSpikeScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PainSpikeScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class PainSpikeScroll : SpellScroll
- {
- [Constructible]
- public PainSpikeScroll(int amount = 1) : base(108, 0x2268, amount)
- {
- }
-
- public PainSpikeScroll(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 PainSpikeScroll : SpellScroll
+ {
+ [Constructible]
+ public PainSpikeScroll(int amount = 1) : base(108, 0x2268, amount)
+ {
+ }
+
+ public PainSpikeScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PoisonStrikeScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PoisonStrikeScroll.cs
index e624dec47..968225c83 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PoisonStrikeScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/PoisonStrikeScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class PoisonStrikeScroll : SpellScroll
- {
- [Constructible]
- public PoisonStrikeScroll(int amount = 1) : base(109, 0x2269, amount)
- {
- }
-
- public PoisonStrikeScroll(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 PoisonStrikeScroll : SpellScroll
+ {
+ [Constructible]
+ public PoisonStrikeScroll(int amount = 1) : base(109, 0x2269, amount)
+ {
+ }
+
+ public PoisonStrikeScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/StrangleScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/StrangleScroll.cs
index 6ee55d3ed..d51fd0706 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/StrangleScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/StrangleScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class StrangleScroll : SpellScroll
- {
- [Constructible]
- public StrangleScroll(int amount = 1) : base(110, 0x226A, amount)
- {
- }
-
- public StrangleScroll(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 StrangleScroll : SpellScroll
+ {
+ [Constructible]
+ public StrangleScroll(int amount = 1) : base(110, 0x226A, amount)
+ {
+ }
+
+ public StrangleScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/SummonFamiliarScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/SummonFamiliarScroll.cs
index 531c947b2..cc086a2da 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/SummonFamiliarScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/SummonFamiliarScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class SummonFamiliarScroll : SpellScroll
- {
- [Constructible]
- public SummonFamiliarScroll(int amount = 1) : base(111, 0x226B, amount)
- {
- }
-
- public SummonFamiliarScroll(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 SummonFamiliarScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonFamiliarScroll(int amount = 1) : base(111, 0x226B, amount)
+ {
+ }
+
+ public SummonFamiliarScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VampiricEmbraceScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VampiricEmbraceScroll.cs
index c0f8d6e03..5fdc7712e 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VampiricEmbraceScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VampiricEmbraceScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class VampiricEmbraceScroll : SpellScroll
- {
- [Constructible]
- public VampiricEmbraceScroll(int amount = 1) : base(112, 0x226C, amount)
- {
- }
-
- public VampiricEmbraceScroll(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 VampiricEmbraceScroll : SpellScroll
+ {
+ [Constructible]
+ public VampiricEmbraceScroll(int amount = 1) : base(112, 0x226C, amount)
+ {
+ }
+
+ public VampiricEmbraceScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VengefulSpiritScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VengefulSpiritScroll.cs
index 6923fd2d1..5d1578b29 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VengefulSpiritScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/VengefulSpiritScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class VengefulSpiritScroll : SpellScroll
- {
- [Constructible]
- public VengefulSpiritScroll(int amount = 1) : base(113, 0x226D, amount)
- {
- }
-
- public VengefulSpiritScroll(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 VengefulSpiritScroll : SpellScroll
+ {
+ [Constructible]
+ public VengefulSpiritScroll(int amount = 1) : base(113, 0x226D, amount)
+ {
+ }
+
+ public VengefulSpiritScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WitherScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WitherScroll.cs
index aaff4db07..75542d832 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WitherScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WitherScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class WitherScroll : SpellScroll
- {
- [Constructible]
- public WitherScroll(int amount = 1) : base(114, 0x226E, amount)
- {
- }
-
- public WitherScroll(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 WitherScroll : SpellScroll
+ {
+ [Constructible]
+ public WitherScroll(int amount = 1) : base(114, 0x226E, amount)
+ {
+ }
+
+ public WitherScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WraithFormScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WraithFormScroll.cs
index 8001f900c..f0745f3ee 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WraithFormScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Necromancy/WraithFormScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class WraithFormScroll : SpellScroll
- {
- [Constructible]
- public WraithFormScroll(int amount = 1) : base(115, 0x226F, amount)
- {
- }
-
- public WraithFormScroll(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 WraithFormScroll : SpellScroll
+ {
+ [Constructible]
+ public WraithFormScroll(int amount = 1) : base(115, 0x226F, amount)
+ {
+ }
+
+ public WraithFormScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/AgilityScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/AgilityScroll.cs
index 80fecd4d5..18f55d42d 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/AgilityScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/AgilityScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class AgilityScroll : SpellScroll
- {
- [Constructible]
- public AgilityScroll(int amount = 1) : base(8, 0x1F35, amount)
- {
- }
-
- public AgilityScroll(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 AgilityScroll : SpellScroll
+ {
+ [Constructible]
+ public AgilityScroll(int amount = 1) : base(8, 0x1F35, amount)
+ {
+ }
+
+ public AgilityScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CunningScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CunningScroll.cs
index 8ef5f5423..4a32656b8 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CunningScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CunningScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class CunningScroll : SpellScroll
- {
- [Constructible]
- public CunningScroll(int amount = 1) : base(9, 0x1F36, amount)
- {
- }
-
- public CunningScroll(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 CunningScroll : SpellScroll
+ {
+ [Constructible]
+ public CunningScroll(int amount = 1) : base(9, 0x1F36, amount)
+ {
+ }
+
+ public CunningScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CureScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CureScroll.cs
index 4e3535a9e..22ae0049c 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CureScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/CureScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class CureScroll : SpellScroll
- {
- [Constructible]
- public CureScroll(int amount = 1) : base(10, 0x1F37, amount)
- {
- }
-
- public CureScroll(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 CureScroll : SpellScroll
+ {
+ [Constructible]
+ public CureScroll(int amount = 1) : base(10, 0x1F37, amount)
+ {
+ }
+
+ public CureScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/HarmScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/HarmScroll.cs
index 799412b4e..18cfa7e49 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/HarmScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/HarmScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class HarmScroll : SpellScroll
- {
- [Constructible]
- public HarmScroll(int amount = 1) : base(11, 0x1F38, amount)
- {
- }
-
- public HarmScroll(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 HarmScroll : SpellScroll
+ {
+ [Constructible]
+ public HarmScroll(int amount = 1) : base(11, 0x1F38, amount)
+ {
+ }
+
+ public HarmScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicTrapScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicTrapScroll.cs
index 9cd68e6e9..f1e0a7306 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicTrapScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicTrapScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MagicTrapScroll : SpellScroll
- {
- [Constructible]
- public MagicTrapScroll(int amount = 1) : base(12, 0x1F39, amount)
- {
- }
-
- public MagicTrapScroll(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 MagicTrapScroll : SpellScroll
+ {
+ [Constructible]
+ public MagicTrapScroll(int amount = 1) : base(12, 0x1F39, amount)
+ {
+ }
+
+ public MagicTrapScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicUnTrapScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicUnTrapScroll.cs
index b236df317..f73902519 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicUnTrapScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/MagicUnTrapScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MagicUnTrapScroll : SpellScroll
- {
- [Constructible]
- public MagicUnTrapScroll(int amount = 1) : base(13, 0x1F3A, amount)
- {
- }
-
- public MagicUnTrapScroll(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 MagicUnTrapScroll : SpellScroll
+ {
+ [Constructible]
+ public MagicUnTrapScroll(int amount = 1) : base(13, 0x1F3A, amount)
+ {
+ }
+
+ public MagicUnTrapScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/ProtectionScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/ProtectionScroll.cs
index 94c7848b6..cee720001 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/ProtectionScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/ProtectionScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ProtectionScroll : SpellScroll
- {
- [Constructible]
- public ProtectionScroll(int amount = 1) : base(14, 0x1F3B, amount)
- {
- }
-
- public ProtectionScroll(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 ProtectionScroll : SpellScroll
+ {
+ [Constructible]
+ public ProtectionScroll(int amount = 1) : base(14, 0x1F3B, amount)
+ {
+ }
+
+ public ProtectionScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/StrengthScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/StrengthScroll.cs
index e5f58c00b..5a3841e32 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/StrengthScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Second Circle/StrengthScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class StrengthScroll : SpellScroll
- {
- [Constructible]
- public StrengthScroll(int amount = 1) : base(15, 0x1F3C, amount)
- {
- }
-
- public StrengthScroll(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 StrengthScroll : SpellScroll
+ {
+ [Constructible]
+ public StrengthScroll(int amount = 1) : base(15, 0x1F3C, amount)
+ {
+ }
+
+ public StrengthScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ChainLightningScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ChainLightningScroll.cs
index 0111f68de..02ea8fc2f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ChainLightningScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ChainLightningScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ChainLightningScroll : SpellScroll
- {
- [Constructible]
- public ChainLightningScroll(int amount = 1) : base(48, 0x1F5D, amount)
- {
- }
-
- public ChainLightningScroll(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 ChainLightningScroll : SpellScroll
+ {
+ [Constructible]
+ public ChainLightningScroll(int amount = 1) : base(48, 0x1F5D, amount)
+ {
+ }
+
+ public ChainLightningScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/EnergyFieldScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/EnergyFieldScroll.cs
index ae74fd5e2..59c74bbbe 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/EnergyFieldScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/EnergyFieldScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class EnergyFieldScroll : SpellScroll
- {
- [Constructible]
- public EnergyFieldScroll(int amount = 1) : base(49, 0x1F5E, amount)
- {
- }
-
- public EnergyFieldScroll(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 EnergyFieldScroll : SpellScroll
+ {
+ [Constructible]
+ public EnergyFieldScroll(int amount = 1) : base(49, 0x1F5E, amount)
+ {
+ }
+
+ public EnergyFieldScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/FlamestrikeScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/FlamestrikeScroll.cs
index 31b089b44..8fd7df8b9 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/FlamestrikeScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/FlamestrikeScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class FlamestrikeScroll : SpellScroll
- {
- [Constructible]
- public FlamestrikeScroll(int amount = 1) : base(50, 0x1F5F, amount)
- {
- }
-
- public FlamestrikeScroll(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 FlamestrikeScroll : SpellScroll
+ {
+ [Constructible]
+ public FlamestrikeScroll(int amount = 1) : base(50, 0x1F5F, amount)
+ {
+ }
+
+ public FlamestrikeScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/GateTravelScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/GateTravelScroll.cs
index e6d810994..620594174 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/GateTravelScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/GateTravelScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class GateTravelScroll : SpellScroll
- {
- [Constructible]
- public GateTravelScroll(int amount = 1) : base(51, 0x1F60, amount)
- {
- }
-
- public GateTravelScroll(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 GateTravelScroll : SpellScroll
+ {
+ [Constructible]
+ public GateTravelScroll(int amount = 1) : base(51, 0x1F60, amount)
+ {
+ }
+
+ public GateTravelScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ManaVampireScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ManaVampireScroll.cs
index 516ea8523..523748157 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ManaVampireScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/ManaVampireScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ManaVampireScroll : SpellScroll
- {
- [Constructible]
- public ManaVampireScroll(int amount = 1) : base(52, 0x1F61, amount)
- {
- }
-
- public ManaVampireScroll(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 ManaVampireScroll : SpellScroll
+ {
+ [Constructible]
+ public ManaVampireScroll(int amount = 1) : base(52, 0x1F61, amount)
+ {
+ }
+
+ public ManaVampireScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MassDispelScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MassDispelScroll.cs
index faddb7112..dfc01b114 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MassDispelScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MassDispelScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MassDispelScroll : SpellScroll
- {
- [Constructible]
- public MassDispelScroll(int amount = 1) : base(53, 0x1F62, amount)
- {
- }
-
- public MassDispelScroll(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 MassDispelScroll : SpellScroll
+ {
+ [Constructible]
+ public MassDispelScroll(int amount = 1) : base(53, 0x1F62, amount)
+ {
+ }
+
+ public MassDispelScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MeteorStormScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MeteorStormScroll.cs
index 2c6ba8c6e..4c0397aff 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MeteorStormScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/MeteorStormScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MeteorSwarmScroll : SpellScroll
- {
- [Constructible]
- public MeteorSwarmScroll(int amount = 1) : base(54, 0x1F63, amount)
- {
- }
-
- public MeteorSwarmScroll(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 MeteorSwarmScroll : SpellScroll
+ {
+ [Constructible]
+ public MeteorSwarmScroll(int amount = 1) : base(54, 0x1F63, amount)
+ {
+ }
+
+ public MeteorSwarmScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/PolymorphScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/PolymorphScroll.cs
index 2f9f6fa0c..0c7d8d0e5 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/PolymorphScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Seventh Circle/PolymorphScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class PolymorphScroll : SpellScroll
- {
- [Constructible]
- public PolymorphScroll(int amount = 1) : base(55, 0x1F64, amount)
- {
- }
-
- public PolymorphScroll(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 PolymorphScroll : SpellScroll
+ {
+ [Constructible]
+ public PolymorphScroll(int amount = 1) : base(55, 0x1F64, amount)
+ {
+ }
+
+ public PolymorphScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/DispelScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/DispelScroll.cs
index eda8b5a39..d7c4a3441 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/DispelScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/DispelScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class DispelScroll : SpellScroll
- {
- [Constructible]
- public DispelScroll(int amount = 1) : base(40, 0x1F55, amount)
- {
- }
-
- public DispelScroll(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 DispelScroll : SpellScroll
+ {
+ [Constructible]
+ public DispelScroll(int amount = 1) : base(40, 0x1F55, amount)
+ {
+ }
+
+ public DispelScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/EnergyBoltScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/EnergyBoltScroll.cs
index c21f11fce..25e0b9054 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/EnergyBoltScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/EnergyBoltScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class EnergyBoltScroll : SpellScroll
- {
- [Constructible]
- public EnergyBoltScroll(int amount = 1) : base(41, 0x1F56, amount)
- {
- }
-
- public EnergyBoltScroll(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 EnergyBoltScroll : SpellScroll
+ {
+ [Constructible]
+ public EnergyBoltScroll(int amount = 1) : base(41, 0x1F56, amount)
+ {
+ }
+
+ public EnergyBoltScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ExplosionScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ExplosionScroll.cs
index 070a9fa45..9ad3c13a5 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ExplosionScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ExplosionScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ExplosionScroll : SpellScroll
- {
- [Constructible]
- public ExplosionScroll(int amount = 1) : base(42, 0x1F57, amount)
- {
- }
-
- public ExplosionScroll(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 ExplosionScroll : SpellScroll
+ {
+ [Constructible]
+ public ExplosionScroll(int amount = 1) : base(42, 0x1F57, amount)
+ {
+ }
+
+ public ExplosionScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/InvisibilityScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/InvisibilityScroll.cs
index 47a2af8b0..0248ce936 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/InvisibilityScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/InvisibilityScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class InvisibilityScroll : SpellScroll
- {
- [Constructible]
- public InvisibilityScroll(int amount = 1) : base(43, 0x1F58, amount)
- {
- }
-
- public InvisibilityScroll(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 InvisibilityScroll : SpellScroll
+ {
+ [Constructible]
+ public InvisibilityScroll(int amount = 1) : base(43, 0x1F58, amount)
+ {
+ }
+
+ public InvisibilityScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MarkScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MarkScroll.cs
index 000999584..d782e4cf9 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MarkScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MarkScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MarkScroll : SpellScroll
- {
- [Constructible]
- public MarkScroll(int amount = 1) : base(44, 0x1F59, amount)
- {
- }
-
- public MarkScroll(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 MarkScroll : SpellScroll
+ {
+ [Constructible]
+ public MarkScroll(int amount = 1) : base(44, 0x1F59, amount)
+ {
+ }
+
+ public MarkScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MassCurseScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MassCurseScroll.cs
index 280617c76..d4d5f1d64 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MassCurseScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/MassCurseScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MassCurseScroll : SpellScroll
- {
- [Constructible]
- public MassCurseScroll(int amount = 1) : base(45, 0x1F5A, amount)
- {
- }
-
- public MassCurseScroll(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 MassCurseScroll : SpellScroll
+ {
+ [Constructible]
+ public MassCurseScroll(int amount = 1) : base(45, 0x1F5A, amount)
+ {
+ }
+
+ public MassCurseScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs
index fa9092e84..85f6247d6 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class ParalyzeFieldScroll : SpellScroll
- {
- [Constructible]
- public ParalyzeFieldScroll(int amount = 1) : base(46, 0x1F5B, amount)
- {
- }
-
- public ParalyzeFieldScroll(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 ParalyzeFieldScroll : SpellScroll
+ {
+ [Constructible]
+ public ParalyzeFieldScroll(int amount = 1) : base(46, 0x1F5B, amount)
+ {
+ }
+
+ public ParalyzeFieldScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/RevealScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/RevealScroll.cs
index 160181a63..9a8b604a0 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/RevealScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Sixth Circle/RevealScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class RevealScroll : SpellScroll
- {
- [Constructible]
- public RevealScroll(int amount = 1) : base(47, 0x1F5C, amount)
- {
- }
-
- public RevealScroll(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 RevealScroll : SpellScroll
+ {
+ [Constructible]
+ public RevealScroll(int amount = 1) : base(47, 0x1F5C, amount)
+ {
+ }
+
+ public RevealScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellScroll.cs
index d140f8b25..4395d5b02 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellScroll.cs
@@ -1,82 +1,82 @@
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Multis;
-using Server.Spells;
-
-namespace Server.Items
-{
- public class SpellScroll : Item, ICommodity
- {
- [Constructible]
- public SpellScroll(int spellID, int itemID, int amount = 1) : base(itemID)
- {
- Stackable = true;
- Weight = 1.0;
- Amount = amount;
-
- SpellID = spellID;
- }
-
- public SpellScroll(Serial serial) : base(serial)
- {
- }
-
- public int SpellID { get; private set; }
-
- int ICommodity.DescriptionNumber => LabelNumber;
- bool ICommodity.IsDeedable => Core.ML;
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(SpellID);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- SpellID = reader.ReadInt();
-
- break;
- }
- }
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- if (from.Alive && Movable)
- list.Add(new AddToSpellbookEntry());
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!DesignContext.Check(from))
- return; // They are customizing
-
- if (!IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- return;
- }
-
- Spell spell = SpellRegistry.NewSpell(SpellID, from, this);
-
- if (spell != null)
- spell.Cast();
- else
- from.SendLocalizedMessage(502345); // This spell has been temporarily disabled.
- }
- }
-}
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Multis;
+using Server.Spells;
+
+namespace Server.Items
+{
+ public class SpellScroll : Item, ICommodity
+ {
+ [Constructible]
+ public SpellScroll(int spellID, int itemID, int amount = 1) : base(itemID)
+ {
+ Stackable = true;
+ Weight = 1.0;
+ Amount = amount;
+
+ SpellID = spellID;
+ }
+
+ public SpellScroll(Serial serial) : base(serial)
+ {
+ }
+
+ public int SpellID { get; private set; }
+
+ int ICommodity.DescriptionNumber => LabelNumber;
+ bool ICommodity.IsDeedable => Core.ML;
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(SpellID);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ SpellID = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ if (from.Alive && Movable)
+ list.Add(new AddToSpellbookEntry());
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!DesignContext.Check(from))
+ return; // They are customizing
+
+ if (!IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ return;
+ }
+
+ Spell spell = SpellRegistry.NewSpell(SpellID, from, this);
+
+ if (spell != null)
+ spell.Cast();
+ else
+ from.SendLocalizedMessage(502345); // This spell has been temporarily disabled.
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellweavingScrolls.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellweavingScrolls.cs
index 69fb5fa85..903f7307b 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellweavingScrolls.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/SpellweavingScrolls.cs
@@ -1,434 +1,434 @@
-namespace Server.Items
-{
- public class ArcaneCircleScroll : SpellScroll
- {
- [Constructible]
- public ArcaneCircleScroll(int amount = 1)
- : base(600, 0x2D51, amount) =>
- Hue = 0x8FD;
-
- public ArcaneCircleScroll(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 GiftOfRenewalScroll : SpellScroll
- {
- [Constructible]
- public GiftOfRenewalScroll(int amount = 1)
- : base(601, 0x2D52, amount) =>
- Hue = 0x8FD;
-
- public GiftOfRenewalScroll(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 ImmolatingWeaponScroll : SpellScroll
- {
- [Constructible]
- public ImmolatingWeaponScroll(int amount = 1)
- : base(602, 0x2D53, amount) =>
- Hue = 0x8FD;
-
- public ImmolatingWeaponScroll(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 AttuneWeaponScroll : SpellScroll
- {
- [Constructible]
- public AttuneWeaponScroll(int amount = 1)
- : base(603, 0x2D54, amount) =>
- Hue = 0x8FD;
-
- public AttuneWeaponScroll(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 ThunderstormScroll : SpellScroll
- {
- [Constructible]
- public ThunderstormScroll(int amount = 1)
- : base(604, 0x2D55, amount) =>
- Hue = 0x8FD;
-
- public ThunderstormScroll(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 NatureFuryScroll : SpellScroll
- {
- [Constructible]
- public NatureFuryScroll(int amount = 1)
- : base(605, 0x2D56, amount) =>
- Hue = 0x8FD;
-
- public NatureFuryScroll(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 SummonFeyScroll : SpellScroll
- {
- [Constructible]
- public SummonFeyScroll(int amount = 1)
- : base(606, 0x2D57, amount) =>
- Hue = 0x8FD;
-
- public SummonFeyScroll(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 SummonFiendScroll : SpellScroll
- {
- [Constructible]
- public SummonFiendScroll(int amount = 1)
- : base(607, 0x2D58, amount) =>
- Hue = 0x8FD;
-
- public SummonFiendScroll(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 ReaperFormScroll : SpellScroll
- {
- [Constructible]
- public ReaperFormScroll(int amount = 1)
- : base(608, 0x2D59, amount) =>
- Hue = 0x8FD;
-
- public ReaperFormScroll(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 WildfireScroll : SpellScroll
- {
- [Constructible]
- public WildfireScroll(int amount = 1)
- : base(609, 0x2D5A, amount) =>
- Hue = 0x8FD;
-
- public WildfireScroll(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 EssenceOfWindScroll : SpellScroll
- {
- [Constructible]
- public EssenceOfWindScroll(int amount = 1)
- : base(610, 0x2D5B, amount) =>
- Hue = 0x8FD;
-
- public EssenceOfWindScroll(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 DryadAllureScroll : SpellScroll
- {
- [Constructible]
- public DryadAllureScroll(int amount = 1)
- : base(611, 0x2D5C, amount) =>
- Hue = 0x8FD;
-
- public DryadAllureScroll(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 EtherealVoyageScroll : SpellScroll
- {
- [Constructible]
- public EtherealVoyageScroll(int amount = 1)
- : base(612, 0x2D5D, amount) =>
- Hue = 0x8FD;
-
- public EtherealVoyageScroll(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 WordOfDeathScroll : SpellScroll
- {
- [Constructible]
- public WordOfDeathScroll(int amount = 1)
- : base(613, 0x2D5E, amount) =>
- Hue = 0x8FD;
-
- public WordOfDeathScroll(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 GiftOfLifeScroll : SpellScroll
- {
- [Constructible]
- public GiftOfLifeScroll(int amount = 1)
- : base(614, 0x2D5F, amount) =>
- Hue = 0x8FD;
-
- public GiftOfLifeScroll(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 ArcaneEmpowermentScroll : SpellScroll
- {
- [Constructible]
- public ArcaneEmpowermentScroll(int amount = 1)
- : base(615, 0x2D60, amount) =>
- Hue = 0x8FD;
-
- public ArcaneEmpowermentScroll(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 ArcaneCircleScroll : SpellScroll
+ {
+ [Constructible]
+ public ArcaneCircleScroll(int amount = 1)
+ : base(600, 0x2D51, amount) =>
+ Hue = 0x8FD;
+
+ public ArcaneCircleScroll(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 GiftOfRenewalScroll : SpellScroll
+ {
+ [Constructible]
+ public GiftOfRenewalScroll(int amount = 1)
+ : base(601, 0x2D52, amount) =>
+ Hue = 0x8FD;
+
+ public GiftOfRenewalScroll(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 ImmolatingWeaponScroll : SpellScroll
+ {
+ [Constructible]
+ public ImmolatingWeaponScroll(int amount = 1)
+ : base(602, 0x2D53, amount) =>
+ Hue = 0x8FD;
+
+ public ImmolatingWeaponScroll(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 AttuneWeaponScroll : SpellScroll
+ {
+ [Constructible]
+ public AttuneWeaponScroll(int amount = 1)
+ : base(603, 0x2D54, amount) =>
+ Hue = 0x8FD;
+
+ public AttuneWeaponScroll(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 ThunderstormScroll : SpellScroll
+ {
+ [Constructible]
+ public ThunderstormScroll(int amount = 1)
+ : base(604, 0x2D55, amount) =>
+ Hue = 0x8FD;
+
+ public ThunderstormScroll(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 NatureFuryScroll : SpellScroll
+ {
+ [Constructible]
+ public NatureFuryScroll(int amount = 1)
+ : base(605, 0x2D56, amount) =>
+ Hue = 0x8FD;
+
+ public NatureFuryScroll(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 SummonFeyScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonFeyScroll(int amount = 1)
+ : base(606, 0x2D57, amount) =>
+ Hue = 0x8FD;
+
+ public SummonFeyScroll(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 SummonFiendScroll : SpellScroll
+ {
+ [Constructible]
+ public SummonFiendScroll(int amount = 1)
+ : base(607, 0x2D58, amount) =>
+ Hue = 0x8FD;
+
+ public SummonFiendScroll(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 ReaperFormScroll : SpellScroll
+ {
+ [Constructible]
+ public ReaperFormScroll(int amount = 1)
+ : base(608, 0x2D59, amount) =>
+ Hue = 0x8FD;
+
+ public ReaperFormScroll(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 WildfireScroll : SpellScroll
+ {
+ [Constructible]
+ public WildfireScroll(int amount = 1)
+ : base(609, 0x2D5A, amount) =>
+ Hue = 0x8FD;
+
+ public WildfireScroll(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 EssenceOfWindScroll : SpellScroll
+ {
+ [Constructible]
+ public EssenceOfWindScroll(int amount = 1)
+ : base(610, 0x2D5B, amount) =>
+ Hue = 0x8FD;
+
+ public EssenceOfWindScroll(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 DryadAllureScroll : SpellScroll
+ {
+ [Constructible]
+ public DryadAllureScroll(int amount = 1)
+ : base(611, 0x2D5C, amount) =>
+ Hue = 0x8FD;
+
+ public DryadAllureScroll(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 EtherealVoyageScroll : SpellScroll
+ {
+ [Constructible]
+ public EtherealVoyageScroll(int amount = 1)
+ : base(612, 0x2D5D, amount) =>
+ Hue = 0x8FD;
+
+ public EtherealVoyageScroll(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 WordOfDeathScroll : SpellScroll
+ {
+ [Constructible]
+ public WordOfDeathScroll(int amount = 1)
+ : base(613, 0x2D5E, amount) =>
+ Hue = 0x8FD;
+
+ public WordOfDeathScroll(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 GiftOfLifeScroll : SpellScroll
+ {
+ [Constructible]
+ public GiftOfLifeScroll(int amount = 1)
+ : base(614, 0x2D5F, amount) =>
+ Hue = 0x8FD;
+
+ public GiftOfLifeScroll(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 ArcaneEmpowermentScroll : SpellScroll
+ {
+ [Constructible]
+ public ArcaneEmpowermentScroll(int amount = 1)
+ : base(615, 0x2D60, amount) =>
+ Hue = 0x8FD;
+
+ public ArcaneEmpowermentScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/BlessScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/BlessScroll.cs
index 265b4f4b4..a01d191aa 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/BlessScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/BlessScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class BlessScroll : SpellScroll
- {
- [Constructible]
- public BlessScroll(int amount = 1) : base(16, 0x1F3D, amount)
- {
- }
-
- public BlessScroll(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 BlessScroll : SpellScroll
+ {
+ [Constructible]
+ public BlessScroll(int amount = 1) : base(16, 0x1F3D, amount)
+ {
+ }
+
+ public BlessScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/FireballScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/FireballScroll.cs
index e47254102..f93965561 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/FireballScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/FireballScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class FireballScroll : SpellScroll
- {
- [Constructible]
- public FireballScroll(int amount = 1) : base(17, 0x1F3E, amount)
- {
- }
-
- public FireballScroll(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 FireballScroll : SpellScroll
+ {
+ [Constructible]
+ public FireballScroll(int amount = 1) : base(17, 0x1F3E, amount)
+ {
+ }
+
+ public FireballScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/MagicLockScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/MagicLockScroll.cs
index 0cf013fe4..f9991fe73 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/MagicLockScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/MagicLockScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class MagicLockScroll : SpellScroll
- {
- [Constructible]
- public MagicLockScroll(int amount = 1) : base(18, 0x1F3F, amount)
- {
- }
-
- public MagicLockScroll(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 MagicLockScroll : SpellScroll
+ {
+ [Constructible]
+ public MagicLockScroll(int amount = 1) : base(18, 0x1F3F, amount)
+ {
+ }
+
+ public MagicLockScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/PoisonScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/PoisonScroll.cs
index 41f15b646..158a7a43b 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/PoisonScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/PoisonScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class PoisonScroll : SpellScroll
- {
- [Constructible]
- public PoisonScroll(int amount = 1) : base(19, 0x1F40, amount)
- {
- }
-
- public PoisonScroll(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 PoisonScroll : SpellScroll
+ {
+ [Constructible]
+ public PoisonScroll(int amount = 1) : base(19, 0x1F40, amount)
+ {
+ }
+
+ public PoisonScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TelekinesisScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TelekinesisScroll.cs
index fb3e92809..d75a89775 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TelekinesisScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TelekinesisScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class TelekinesisScroll : SpellScroll
- {
- [Constructible]
- public TelekinesisScroll(int amount = 1) : base(20, 0x1F41, amount)
- {
- }
-
- public TelekinesisScroll(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 TelekinesisScroll : SpellScroll
+ {
+ [Constructible]
+ public TelekinesisScroll(int amount = 1) : base(20, 0x1F41, amount)
+ {
+ }
+
+ public TelekinesisScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TeleportScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TeleportScroll.cs
index 00ee42245..b7035cf41 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TeleportScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/TeleportScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class TeleportScroll : SpellScroll
- {
- [Constructible]
- public TeleportScroll(int amount = 1) : base(21, 0x1F42, amount)
- {
- }
-
- public TeleportScroll(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 TeleportScroll : SpellScroll
+ {
+ [Constructible]
+ public TeleportScroll(int amount = 1) : base(21, 0x1F42, amount)
+ {
+ }
+
+ public TeleportScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/UnlockScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/UnlockScroll.cs
index b8faef75b..9a061480f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/UnlockScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/UnlockScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class UnlockScroll : SpellScroll
- {
- [Constructible]
- public UnlockScroll(int amount = 1) : base(22, 0x1F43, amount)
- {
- }
-
- public UnlockScroll(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 UnlockScroll : SpellScroll
+ {
+ [Constructible]
+ public UnlockScroll(int amount = 1) : base(22, 0x1F43, amount)
+ {
+ }
+
+ public UnlockScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/WallOfStoneScroll.cs b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/WallOfStoneScroll.cs
index 4ac20553e..e61cc6436 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/WallOfStoneScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Scrolls/Third Circle/WallOfStoneScroll.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class WallOfStoneScroll : SpellScroll
- {
- [Constructible]
- public WallOfStoneScroll(int amount = 1) : base(23, 0x1F44, amount)
- {
- }
-
- public WallOfStoneScroll(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 WallOfStoneScroll : SpellScroll
+ {
+ [Constructible]
+ public WallOfStoneScroll(int amount = 1) : base(23, 0x1F44, amount)
+ {
+ }
+
+ public WallOfStoneScroll(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs
index 96bf610a5..1b2a4cd2f 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs
@@ -1,859 +1,859 @@
-using System;
-using System.Collections.Generic;
-using Server.Commands;
-using Server.Engines.Craft;
-using Server.Ethics;
-using Server.Multis;
-using Server.Network;
-using Server.Spells;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public enum SpellbookType
- {
- Invalid = -1,
- Regular,
- Necromancer,
- Paladin,
- Ninja,
- Samurai,
- Arcanist,
- Mystic
- }
-
- public enum BookQuality
- {
- Regular,
- Exceptional
- }
-
- public class Spellbook : Item, ICraftable, ISlayer
- {
- private static readonly Dictionary> m_Table = new Dictionary>();
-
- private static readonly int[] m_LegendPropertyCounts =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 properties : 21/52 : 40%
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 property : 15/52 : 29%
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 2 properties : 10/52 : 19%
- 3, 3, 3, 3, 3, 3 // 3 properties : 6/52 : 12%
- };
-
- private static readonly int[] m_ElderPropertyCounts =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 properties : 15/34 : 44%
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 property : 10/34 : 29%
- 2, 2, 2, 2, 2, 2, // 2 properties : 6/34 : 18%
- 3, 3, 3 // 3 properties : 3/34 : 9%
- };
-
- private static readonly int[] m_GrandPropertyCounts =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 properties : 10/20 : 50%
- 1, 1, 1, 1, 1, 1, // 1 property : 6/20 : 30%
- 2, 2, 2, // 2 properties : 3/20 : 15%
- 3 // 3 properties : 1/20 : 5%
- };
-
- private static readonly int[] m_MasterPropertyCounts =
- {
- 0, 0, 0, 0, 0, 0, // 0 properties : 6/10 : 60%
- 1, 1, 1, // 1 property : 3/10 : 30%
- 2 // 2 properties : 1/10 : 10%
- };
-
- private static readonly int[] m_AdeptPropertyCounts =
- {
- 0, 0, 0, // 0 properties : 3/4 : 75%
- 1 // 1 property : 1/4 : 25%
- };
-
- private ulong m_Content;
-
- private Mobile m_Crafter;
- private string m_EngravedText;
- private BookQuality m_Quality;
-
- private SlayerName m_Slayer;
- private SlayerName m_Slayer2;
-
- [Constructible]
- public Spellbook(ulong content = 0, int itemID = 0xEFA) : base(itemID)
- {
- Attributes = new AosAttributes(this);
- SkillBonuses = new AosSkillBonuses(this);
-
- Weight = 3.0;
- Layer = Layer.OneHanded;
- LootType = LootType.Blessed;
-
- Content = content;
- }
-
- public Spellbook(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public string EngravedText
- {
- get => m_EngravedText;
- set
- {
- m_EngravedText = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public BookQuality Quality
- {
- get => m_Quality;
- set
- {
- m_Quality = value;
- InvalidateProperties();
- }
- }
-
- public override bool DisplayWeight => false;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public AosAttributes Attributes { get; private set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public AosSkillBonuses SkillBonuses { get; private set; }
-
- public virtual SpellbookType SpellbookType => SpellbookType.Regular;
- public virtual int BookOffset => 0;
- public virtual int BookCount => 64;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public ulong Content
- {
- get => m_Content;
- set
- {
- if (m_Content != value)
- {
- m_Content = value;
-
- SpellCount = 0;
-
- while (value > 0)
- {
- SpellCount += (int)(value & 0x1);
- value >>= 1;
- }
-
- InvalidateProperties();
- }
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int SpellCount { get; private set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Crafter
- {
- get => m_Crafter;
- set
- {
- m_Crafter = value;
- InvalidateProperties();
- }
- }
-
- public override bool DisplayLootType => Core.AOS;
-
- public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes,
- BaseTool tool, CraftItem craftItem, int resHue)
- {
- int magery = from.Skills.Magery.BaseFixedPoint;
-
- if (magery >= 800)
- {
- int[] propertyCounts;
- int minIntensity;
- int maxIntensity;
-
- if (magery >= 1000)
- {
- if (magery >= 1200)
- propertyCounts = m_LegendPropertyCounts;
- else if (magery >= 1100)
- propertyCounts = m_ElderPropertyCounts;
- else
- propertyCounts = m_GrandPropertyCounts;
-
- minIntensity = 55;
- maxIntensity = 75;
- }
- else if (magery >= 900)
- {
- propertyCounts = m_MasterPropertyCounts;
- minIntensity = 25;
- maxIntensity = 45;
- }
- else
- {
- propertyCounts = m_AdeptPropertyCounts;
- minIntensity = 0;
- maxIntensity = 15;
- }
-
- int propertyCount = propertyCounts.RandomElement();
-
- BaseRunicTool.ApplyAttributesTo(this, true, 0, propertyCount, minIntensity, maxIntensity);
- }
-
- if (makersMark)
- Crafter = from;
-
- m_Quality = (BookQuality)(quality - 1);
-
- return quality;
- }
- // Currently though there are no dual slayer spellbooks, OSI has a habit of putting dual slayer stuff in later
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SlayerName Slayer
- {
- get => m_Slayer;
- set
- {
- m_Slayer = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SlayerName Slayer2
- {
- get => m_Slayer2;
- set
- {
- m_Slayer2 = value;
- InvalidateProperties();
- }
- }
-
- public static void Initialize()
- {
- EventSink.OpenSpellbookRequest += EventSink_OpenSpellbookRequest;
- EventSink.CastSpellRequest += EventSink_CastSpellRequest;
- EventSink.TargetedSpell += EventSink_TargetedSpell;
-
- CommandSystem.Register("AllSpells", AccessLevel.GameMaster, AllSpells_OnCommand);
- }
-
- [Usage("AllSpells")]
- [Description("Completely fills a targeted spellbook with scrolls.")]
- private static void AllSpells_OnCommand(CommandEventArgs e)
- {
- e.Mobile.BeginTarget(-1, false, TargetFlags.None, AllSpells_OnTarget);
- e.Mobile.SendMessage("Target the spellbook to fill.");
- }
-
- private static void AllSpells_OnTarget(Mobile from, object obj)
- {
- if (obj is Spellbook book)
- {
- if (book.BookCount == 64)
- book.Content = ulong.MaxValue;
- else
- book.Content = (1ul << book.BookCount) - 1;
-
- from.SendMessage("The spellbook has been filled.");
-
- CommandLogging.WriteLine(from, "{0} {1} filling spellbook {2}", from.AccessLevel,
- CommandLogging.Format(from), CommandLogging.Format(book));
- }
- else
- {
- from.BeginTarget(-1, false, TargetFlags.None, AllSpells_OnTarget);
- from.SendMessage("That is not a spellbook. Try again.");
- }
- }
-
- private static void EventSink_OpenSpellbookRequest(Mobile from, int typeID)
- {
- if (!DesignContext.Check(from))
- return; // They are customizing
-
- var type = typeID switch
- {
- 1 => SpellbookType.Regular,
- 2 => SpellbookType.Necromancer,
- 3 => SpellbookType.Paladin,
- 4 => SpellbookType.Ninja,
- 5 => SpellbookType.Samurai,
- 6 => SpellbookType.Arcanist,
- 7 => SpellbookType.Mystic,
- _ => SpellbookType.Regular
- };
-
- Spellbook book = Find(from, -1, type);
-
- book?.DisplayTo(from);
- }
-
- private static void EventSink_TargetedSpell(Mobile from, IEntity target, int spellId)
- {
- if (!DesignContext.Check(from)) return; // They are customizing
-
- Spellbook book = Find(from, spellId);
-
- if (book?.HasSpell(spellId) != true)
- {
- from.SendLocalizedMessage(500015); // You do not have that spell!
- return;
- }
-
- SpecialMove move = SpellRegistry.GetSpecialMove(spellId);
-
- if (move != null)
- SpecialMove.SetCurrentMove(from, move);
- else
- SpellRegistry.NewSpell(spellId, from, null)?.Cast();
- }
-
- private static void EventSink_CastSpellRequest(Mobile from, int spellID, Item item)
- {
- if (!DesignContext.Check(from))
- return; // They are customizing
-
- Spellbook book = item as Spellbook;
-
- if (book?.HasSpell(spellID) != true)
- book = Find(from, spellID);
-
- if (book?.HasSpell(spellID) == true)
- {
- SpecialMove move = SpellRegistry.GetSpecialMove(spellID);
-
- if (move != null)
- {
- SpecialMove.SetCurrentMove(from, move);
- }
- else
- {
- Spell spell = SpellRegistry.NewSpell(spellID, from, null);
-
- if (spell != null)
- spell.Cast();
- else
- from.SendLocalizedMessage(502345); // This spell has been temporarily disabled.
- }
- }
- else
- {
- from.SendLocalizedMessage(500015); // You do not have that spell!
- }
- }
-
- public static SpellbookType GetTypeForSpell(int spellID)
- {
- if (spellID >= 0 && spellID < 64)
- return SpellbookType.Regular;
- if (spellID >= 100 && spellID < 117)
- return SpellbookType.Necromancer;
- if (spellID >= 200 && spellID < 210)
- return SpellbookType.Paladin;
- if (spellID >= 400 && spellID < 406)
- return SpellbookType.Samurai;
- if (spellID >= 500 && spellID < 508)
- return SpellbookType.Ninja;
- if (spellID >= 600 && spellID < 617)
- return SpellbookType.Arcanist;
- if (spellID >= 677 && spellID < 693)
- return SpellbookType.Mystic;
-
- return SpellbookType.Invalid;
- }
-
- public static Spellbook FindRegular(Mobile from) => Find(from, -1, SpellbookType.Regular);
-
- public static Spellbook FindNecromancer(Mobile from) => Find(from, -1, SpellbookType.Necromancer);
-
- public static Spellbook FindPaladin(Mobile from) => Find(from, -1, SpellbookType.Paladin);
-
- public static Spellbook FindSamurai(Mobile from) => Find(from, -1, SpellbookType.Samurai);
-
- public static Spellbook FindNinja(Mobile from) => Find(from, -1, SpellbookType.Ninja);
-
- public static Spellbook FindArcanist(Mobile from) => Find(from, -1, SpellbookType.Arcanist);
-
- public static Spellbook FindMystic(Mobile from) => Find(from, -1, SpellbookType.Mystic);
-
- public static Spellbook Find(Mobile from, int spellID) => Find(from, spellID, GetTypeForSpell(spellID));
-
- public static Spellbook Find(Mobile from, int spellID, SpellbookType type)
- {
- if (from == null)
- return null;
-
- if (from.Deleted)
- {
- m_Table.Remove(from);
- return null;
- }
-
- bool searchAgain = false;
-
- if (!m_Table.TryGetValue(from, out List list))
- m_Table[from] = list = FindAllSpellbooks(from);
- else
- searchAgain = true;
-
- Spellbook book = FindSpellbookInList(list, from, spellID, type);
-
- if (book == null && searchAgain)
- {
- m_Table[from] = list = FindAllSpellbooks(from);
-
- book = FindSpellbookInList(list, from, spellID, type);
- }
-
- return book;
- }
-
- public static Spellbook FindSpellbookInList(List list, Mobile from, int spellID, SpellbookType type)
- {
- Container pack = from.Backpack;
-
- for (int i = list.Count - 1; i >= 0; --i)
- {
- if (i >= list.Count)
- continue;
-
- Spellbook book = list[i];
-
- if (!book.Deleted && (book.Parent == from || (pack != null && book.Parent == pack)) &&
- ValidateSpellbook(book, spellID, type))
- return book;
-
- list.RemoveAt(i);
- }
-
- return null;
- }
-
- public static List FindAllSpellbooks(Mobile from)
- {
- List list = new List();
-
- Spellbook spellbook = FindEquippedSpellbook(from);
-
- if (spellbook != null)
- list.Add(spellbook);
-
- Container pack = from.Backpack;
-
- for (int i = 0; i < pack?.Items.Count; ++i)
- if (pack.Items[i] is Spellbook sp)
- list.Add(sp);
-
- return list;
- }
-
- public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer(Layer.OneHanded) as Spellbook;
-
- public static bool ValidateSpellbook(Spellbook book, int spellID, SpellbookType type) => book.SpellbookType == type && (spellID == -1 || book.HasSpell(spellID));
-
- public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted)
- {
- if (!Ethic.CheckTrade(from, to, newOwner, this))
- return false;
-
- return base.AllowSecureTrade(from, to, newOwner, accepted);
- }
-
- public override bool CanEquip(Mobile from)
- {
- if (!Ethic.CheckEquip(from, this)) return false;
-
- if (!from.CanBeginAction()) return false;
-
- return base.CanEquip(from);
- }
-
- public override bool AllowEquippedCast(Mobile from) => true;
-
- public override bool OnDragDrop(Mobile from, Item dropped)
- {
- if (dropped is SpellScroll scroll && scroll.Amount == 1)
- {
- SpellbookType type = GetTypeForSpell(scroll.SpellID);
-
- if (type != SpellbookType) return false;
-
- if (HasSpell(scroll.SpellID))
- {
- from.SendLocalizedMessage(500179); // That spell is already present in that spellbook.
- return false;
- }
-
- int val = scroll.SpellID - BookOffset;
-
- if (val >= 0 && val < BookCount)
- {
- m_Content |= (ulong)1 << val;
- ++SpellCount;
-
- InvalidateProperties();
-
- scroll.Delete();
-
- from.Send(new PlaySound(0x249, GetWorldLocation()));
- return true;
- }
- }
-
- return false;
- }
-
- public override void OnAfterDuped(Item newItem)
- {
- if (!(newItem is Spellbook book))
- return;
-
- book.Attributes = new AosAttributes(newItem, Attributes);
- book.SkillBonuses = new AosSkillBonuses(newItem, SkillBonuses);
- }
-
- public override void OnAdded(IEntity parent)
- {
- if (Core.AOS && parent is Mobile from)
- {
- SkillBonuses.AddTo(from);
-
- int strBonus = Attributes.BonusStr;
- int dexBonus = Attributes.BonusDex;
- int intBonus = Attributes.BonusInt;
-
- if (strBonus != 0 || dexBonus != 0 || intBonus != 0)
- {
- string modName = Serial.ToString();
-
- if (strBonus != 0)
- from.AddStatMod(new StatMod(StatType.Str, $"{modName}Str", strBonus, TimeSpan.Zero));
-
- if (dexBonus != 0)
- from.AddStatMod(new StatMod(StatType.Dex, $"{modName}Dex", dexBonus, TimeSpan.Zero));
-
- if (intBonus != 0)
- from.AddStatMod(new StatMod(StatType.Int, $"{modName}Int", intBonus, TimeSpan.Zero));
- }
-
- from.CheckStatTimers();
- }
- }
-
- public override void OnRemoved(IEntity parent)
- {
- if (Core.AOS && parent is Mobile from)
- {
- SkillBonuses.Remove();
-
- string modName = Serial.ToString();
-
- from.RemoveStatMod($"{modName}Str");
- from.RemoveStatMod($"{modName}Dex");
- from.RemoveStatMod($"{modName}Int");
-
- from.CheckStatTimers();
- }
- }
-
- public bool HasSpell(int spellID)
- {
- spellID -= BookOffset;
-
- return spellID >= 0 && spellID < BookCount && (m_Content & (ulong)1 << spellID) != 0;
- }
-
- public void DisplayTo(Mobile to)
- {
- // The client must know about the spellbook or it will crash!
-
- NetState ns = to.NetState;
-
- if (ns == null)
- return;
-
- if (Parent == null)
- {
- to.Send(WorldPacket);
- }
- else if (Parent is Item)
- {
- // What will happen if the client doesn't know about our parent?
- if (ns.ContainerGridLines)
- to.Send(new ContainerContentUpdate6017(this));
- else
- to.Send(new ContainerContentUpdate(this));
- }
- else if (Parent is Mobile)
- {
- // What will happen if the client doesn't know about our parent?
- to.Send(new EquipUpdate(this));
- }
-
- if (ns.HighSeas)
- to.Send(new DisplaySpellbookHS(Serial));
- else
- to.Send(new DisplaySpellbook(Serial));
-
- if (ObjectPropertyList.Enabled)
- {
- if (ns.NewSpellbook)
- {
- to.Send(new NewSpellbookContent(Serial, ItemID, BookOffset + 1, m_Content));
- }
- else
- {
- if (ns.ContainerGridLines)
- to.Send(new SpellbookContent6017(Serial, BookOffset + 1, m_Content));
- else
- to.Send(new SpellbookContent(Serial, BookOffset + 1, m_Content));
- }
- }
- else
- {
- if (ns.ContainerGridLines)
- to.Send(new SpellbookContent6017(Serial, BookOffset + 1, m_Content));
- else
- to.Send(new SpellbookContent(Serial, BookOffset + 1, m_Content));
- }
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_Quality == BookQuality.Exceptional)
- list.Add(1063341); // exceptional
-
- if (m_EngravedText != null)
- list.Add(1072305, m_EngravedText); // Engraved: ~1_INSCRIPTION~
-
- if (m_Crafter != null)
- list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
-
- SkillBonuses.GetProperties(list);
-
- if (m_Slayer != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
- if (entry != null)
- list.Add(entry.Title);
- }
-
- if (m_Slayer2 != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
- if (entry != null)
- list.Add(entry.Title);
- }
-
- int prop;
-
- if ((prop = Attributes.WeaponDamage) != 0)
- list.Add(1060401, prop.ToString()); // damage increase ~1_val~%
-
- 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 (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 (Attributes.SpellChanneling != 0)
- list.Add(1060482); // spell channeling
-
- 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 (Core.ML && (prop = Attributes.IncreasedKarmaLoss) != 0)
- list.Add(1075210, prop.ToString()); // Increased Karma Loss ~1val~%
-
- list.Add(1042886, SpellCount.ToString()); // ~1_NUMBERS_OF_SPELLS~ Spells
- }
-
- public override void OnSingleClick(Mobile from)
- {
- base.OnSingleClick(from);
-
- if (m_Crafter != null)
- LabelTo(from, 1050043, m_Crafter.Name); // crafted by ~1_NAME~
-
- LabelTo(from, 1042886, SpellCount.ToString());
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- Container pack = from.Backpack;
-
- if (Parent == from || (pack != null && Parent == pack))
- DisplayTo(from);
- else
- from.SendLocalizedMessage(
- 500207); // The spellbook must be in your backpack (and not in a container within) to open.
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(5); // version
-
- writer.Write((byte)m_Quality);
-
- writer.Write(m_EngravedText);
-
- writer.Write(m_Crafter);
-
- writer.Write((int)m_Slayer);
- writer.Write((int)m_Slayer2);
-
- Attributes.Serialize(writer);
- SkillBonuses.Serialize(writer);
-
- writer.Write(m_Content);
- writer.Write(SpellCount);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 5:
- {
- m_Quality = (BookQuality)reader.ReadByte();
-
- goto case 4;
- }
- case 4:
- {
- m_EngravedText = reader.ReadString();
-
- goto case 3;
- }
- case 3:
- {
- m_Crafter = reader.ReadMobile();
- goto case 2;
- }
- case 2:
- {
- m_Slayer = (SlayerName)reader.ReadInt();
- m_Slayer2 = (SlayerName)reader.ReadInt();
- goto case 1;
- }
- case 1:
- {
- Attributes = new AosAttributes(this, reader);
- SkillBonuses = new AosSkillBonuses(this, reader);
-
- goto case 0;
- }
- case 0:
- {
- m_Content = reader.ReadULong();
- SpellCount = reader.ReadInt();
-
- break;
- }
- }
-
- Attributes ??= new AosAttributes(this);
- SkillBonuses ??= new AosSkillBonuses(this);
-
- if (Core.AOS && Parent is Mobile mobile)
- SkillBonuses.AddTo(mobile);
-
- int strBonus = Attributes.BonusStr;
- int dexBonus = Attributes.BonusDex;
- int intBonus = Attributes.BonusInt;
-
- if (Parent is Mobile m)
- {
- if (strBonus != 0 || dexBonus != 0 || intBonus != 0)
- {
- string modName = Serial.ToString();
-
- if (strBonus != 0)
- m.AddStatMod(new StatMod(StatType.Str, $"{modName}Str", strBonus, TimeSpan.Zero));
-
- if (dexBonus != 0)
- m.AddStatMod(new StatMod(StatType.Dex, $"{modName}Dex", dexBonus, TimeSpan.Zero));
-
- if (intBonus != 0)
- m.AddStatMod(new StatMod(StatType.Int, $"{modName}Int", intBonus, TimeSpan.Zero));
- }
-
- m.CheckStatTimers();
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Commands;
+using Server.Engines.Craft;
+using Server.Ethics;
+using Server.Multis;
+using Server.Network;
+using Server.Spells;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public enum SpellbookType
+ {
+ Invalid = -1,
+ Regular,
+ Necromancer,
+ Paladin,
+ Ninja,
+ Samurai,
+ Arcanist,
+ Mystic
+ }
+
+ public enum BookQuality
+ {
+ Regular,
+ Exceptional
+ }
+
+ public class Spellbook : Item, ICraftable, ISlayer
+ {
+ private static readonly Dictionary> m_Table = new Dictionary>();
+
+ private static readonly int[] m_LegendPropertyCounts =
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 properties : 21/52 : 40%
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 property : 15/52 : 29%
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 2 properties : 10/52 : 19%
+ 3, 3, 3, 3, 3, 3 // 3 properties : 6/52 : 12%
+ };
+
+ private static readonly int[] m_ElderPropertyCounts =
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 properties : 15/34 : 44%
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 property : 10/34 : 29%
+ 2, 2, 2, 2, 2, 2, // 2 properties : 6/34 : 18%
+ 3, 3, 3 // 3 properties : 3/34 : 9%
+ };
+
+ private static readonly int[] m_GrandPropertyCounts =
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 properties : 10/20 : 50%
+ 1, 1, 1, 1, 1, 1, // 1 property : 6/20 : 30%
+ 2, 2, 2, // 2 properties : 3/20 : 15%
+ 3 // 3 properties : 1/20 : 5%
+ };
+
+ private static readonly int[] m_MasterPropertyCounts =
+ {
+ 0, 0, 0, 0, 0, 0, // 0 properties : 6/10 : 60%
+ 1, 1, 1, // 1 property : 3/10 : 30%
+ 2 // 2 properties : 1/10 : 10%
+ };
+
+ private static readonly int[] m_AdeptPropertyCounts =
+ {
+ 0, 0, 0, // 0 properties : 3/4 : 75%
+ 1 // 1 property : 1/4 : 25%
+ };
+
+ private ulong m_Content;
+
+ private Mobile m_Crafter;
+ private string m_EngravedText;
+ private BookQuality m_Quality;
+
+ private SlayerName m_Slayer;
+ private SlayerName m_Slayer2;
+
+ [Constructible]
+ public Spellbook(ulong content = 0, int itemID = 0xEFA) : base(itemID)
+ {
+ Attributes = new AosAttributes(this);
+ SkillBonuses = new AosSkillBonuses(this);
+
+ Weight = 3.0;
+ Layer = Layer.OneHanded;
+ LootType = LootType.Blessed;
+
+ Content = content;
+ }
+
+ public Spellbook(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public string EngravedText
+ {
+ get => m_EngravedText;
+ set
+ {
+ m_EngravedText = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public BookQuality Quality
+ {
+ get => m_Quality;
+ set
+ {
+ m_Quality = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override bool DisplayWeight => false;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public AosAttributes Attributes { get; private set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public AosSkillBonuses SkillBonuses { get; private set; }
+
+ public virtual SpellbookType SpellbookType => SpellbookType.Regular;
+ public virtual int BookOffset => 0;
+ public virtual int BookCount => 64;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public ulong Content
+ {
+ get => m_Content;
+ set
+ {
+ if (m_Content != value)
+ {
+ m_Content = value;
+
+ SpellCount = 0;
+
+ while (value > 0)
+ {
+ SpellCount += (int)(value & 0x1);
+ value >>= 1;
+ }
+
+ InvalidateProperties();
+ }
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int SpellCount { get; private set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Crafter
+ {
+ get => m_Crafter;
+ set
+ {
+ m_Crafter = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override bool DisplayLootType => Core.AOS;
+
+ public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes,
+ BaseTool tool, CraftItem craftItem, int resHue)
+ {
+ int magery = from.Skills.Magery.BaseFixedPoint;
+
+ if (magery >= 800)
+ {
+ int[] propertyCounts;
+ int minIntensity;
+ int maxIntensity;
+
+ if (magery >= 1000)
+ {
+ if (magery >= 1200)
+ propertyCounts = m_LegendPropertyCounts;
+ else if (magery >= 1100)
+ propertyCounts = m_ElderPropertyCounts;
+ else
+ propertyCounts = m_GrandPropertyCounts;
+
+ minIntensity = 55;
+ maxIntensity = 75;
+ }
+ else if (magery >= 900)
+ {
+ propertyCounts = m_MasterPropertyCounts;
+ minIntensity = 25;
+ maxIntensity = 45;
+ }
+ else
+ {
+ propertyCounts = m_AdeptPropertyCounts;
+ minIntensity = 0;
+ maxIntensity = 15;
+ }
+
+ int propertyCount = propertyCounts.RandomElement();
+
+ BaseRunicTool.ApplyAttributesTo(this, true, 0, propertyCount, minIntensity, maxIntensity);
+ }
+
+ if (makersMark)
+ Crafter = from;
+
+ m_Quality = (BookQuality)(quality - 1);
+
+ return quality;
+ }
+ // Currently though there are no dual slayer spellbooks, OSI has a habit of putting dual slayer stuff in later
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SlayerName Slayer
+ {
+ get => m_Slayer;
+ set
+ {
+ m_Slayer = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SlayerName Slayer2
+ {
+ get => m_Slayer2;
+ set
+ {
+ m_Slayer2 = value;
+ InvalidateProperties();
+ }
+ }
+
+ public static void Initialize()
+ {
+ EventSink.OpenSpellbookRequest += EventSink_OpenSpellbookRequest;
+ EventSink.CastSpellRequest += EventSink_CastSpellRequest;
+ EventSink.TargetedSpell += EventSink_TargetedSpell;
+
+ CommandSystem.Register("AllSpells", AccessLevel.GameMaster, AllSpells_OnCommand);
+ }
+
+ [Usage("AllSpells")]
+ [Description("Completely fills a targeted spellbook with scrolls.")]
+ private static void AllSpells_OnCommand(CommandEventArgs e)
+ {
+ e.Mobile.BeginTarget(-1, false, TargetFlags.None, AllSpells_OnTarget);
+ e.Mobile.SendMessage("Target the spellbook to fill.");
+ }
+
+ private static void AllSpells_OnTarget(Mobile from, object obj)
+ {
+ if (obj is Spellbook book)
+ {
+ if (book.BookCount == 64)
+ book.Content = ulong.MaxValue;
+ else
+ book.Content = (1ul << book.BookCount) - 1;
+
+ from.SendMessage("The spellbook has been filled.");
+
+ CommandLogging.WriteLine(from, "{0} {1} filling spellbook {2}", from.AccessLevel,
+ CommandLogging.Format(from), CommandLogging.Format(book));
+ }
+ else
+ {
+ from.BeginTarget(-1, false, TargetFlags.None, AllSpells_OnTarget);
+ from.SendMessage("That is not a spellbook. Try again.");
+ }
+ }
+
+ private static void EventSink_OpenSpellbookRequest(Mobile from, int typeID)
+ {
+ if (!DesignContext.Check(from))
+ return; // They are customizing
+
+ var type = typeID switch
+ {
+ 1 => SpellbookType.Regular,
+ 2 => SpellbookType.Necromancer,
+ 3 => SpellbookType.Paladin,
+ 4 => SpellbookType.Ninja,
+ 5 => SpellbookType.Samurai,
+ 6 => SpellbookType.Arcanist,
+ 7 => SpellbookType.Mystic,
+ _ => SpellbookType.Regular
+ };
+
+ Spellbook book = Find(from, -1, type);
+
+ book?.DisplayTo(from);
+ }
+
+ private static void EventSink_TargetedSpell(Mobile from, IEntity target, int spellId)
+ {
+ if (!DesignContext.Check(from)) return; // They are customizing
+
+ Spellbook book = Find(from, spellId);
+
+ if (book?.HasSpell(spellId) != true)
+ {
+ from.SendLocalizedMessage(500015); // You do not have that spell!
+ return;
+ }
+
+ SpecialMove move = SpellRegistry.GetSpecialMove(spellId);
+
+ if (move != null)
+ SpecialMove.SetCurrentMove(from, move);
+ else
+ SpellRegistry.NewSpell(spellId, from, null)?.Cast();
+ }
+
+ private static void EventSink_CastSpellRequest(Mobile from, int spellID, Item item)
+ {
+ if (!DesignContext.Check(from))
+ return; // They are customizing
+
+ Spellbook book = item as Spellbook;
+
+ if (book?.HasSpell(spellID) != true)
+ book = Find(from, spellID);
+
+ if (book?.HasSpell(spellID) == true)
+ {
+ SpecialMove move = SpellRegistry.GetSpecialMove(spellID);
+
+ if (move != null)
+ {
+ SpecialMove.SetCurrentMove(from, move);
+ }
+ else
+ {
+ Spell spell = SpellRegistry.NewSpell(spellID, from, null);
+
+ if (spell != null)
+ spell.Cast();
+ else
+ from.SendLocalizedMessage(502345); // This spell has been temporarily disabled.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(500015); // You do not have that spell!
+ }
+ }
+
+ public static SpellbookType GetTypeForSpell(int spellID)
+ {
+ if (spellID >= 0 && spellID < 64)
+ return SpellbookType.Regular;
+ if (spellID >= 100 && spellID < 117)
+ return SpellbookType.Necromancer;
+ if (spellID >= 200 && spellID < 210)
+ return SpellbookType.Paladin;
+ if (spellID >= 400 && spellID < 406)
+ return SpellbookType.Samurai;
+ if (spellID >= 500 && spellID < 508)
+ return SpellbookType.Ninja;
+ if (spellID >= 600 && spellID < 617)
+ return SpellbookType.Arcanist;
+ if (spellID >= 677 && spellID < 693)
+ return SpellbookType.Mystic;
+
+ return SpellbookType.Invalid;
+ }
+
+ public static Spellbook FindRegular(Mobile from) => Find(from, -1, SpellbookType.Regular);
+
+ public static Spellbook FindNecromancer(Mobile from) => Find(from, -1, SpellbookType.Necromancer);
+
+ public static Spellbook FindPaladin(Mobile from) => Find(from, -1, SpellbookType.Paladin);
+
+ public static Spellbook FindSamurai(Mobile from) => Find(from, -1, SpellbookType.Samurai);
+
+ public static Spellbook FindNinja(Mobile from) => Find(from, -1, SpellbookType.Ninja);
+
+ public static Spellbook FindArcanist(Mobile from) => Find(from, -1, SpellbookType.Arcanist);
+
+ public static Spellbook FindMystic(Mobile from) => Find(from, -1, SpellbookType.Mystic);
+
+ public static Spellbook Find(Mobile from, int spellID) => Find(from, spellID, GetTypeForSpell(spellID));
+
+ public static Spellbook Find(Mobile from, int spellID, SpellbookType type)
+ {
+ if (from == null)
+ return null;
+
+ if (from.Deleted)
+ {
+ m_Table.Remove(from);
+ return null;
+ }
+
+ bool searchAgain = false;
+
+ if (!m_Table.TryGetValue(from, out List list))
+ m_Table[from] = list = FindAllSpellbooks(from);
+ else
+ searchAgain = true;
+
+ Spellbook book = FindSpellbookInList(list, from, spellID, type);
+
+ if (book == null && searchAgain)
+ {
+ m_Table[from] = list = FindAllSpellbooks(from);
+
+ book = FindSpellbookInList(list, from, spellID, type);
+ }
+
+ return book;
+ }
+
+ public static Spellbook FindSpellbookInList(List list, Mobile from, int spellID, SpellbookType type)
+ {
+ Container pack = from.Backpack;
+
+ for (int i = list.Count - 1; i >= 0; --i)
+ {
+ if (i >= list.Count)
+ continue;
+
+ Spellbook book = list[i];
+
+ if (!book.Deleted && (book.Parent == from || (pack != null && book.Parent == pack)) &&
+ ValidateSpellbook(book, spellID, type))
+ return book;
+
+ list.RemoveAt(i);
+ }
+
+ return null;
+ }
+
+ public static List FindAllSpellbooks(Mobile from)
+ {
+ List list = new List();
+
+ Spellbook spellbook = FindEquippedSpellbook(from);
+
+ if (spellbook != null)
+ list.Add(spellbook);
+
+ Container pack = from.Backpack;
+
+ for (int i = 0; i < pack?.Items.Count; ++i)
+ if (pack.Items[i] is Spellbook sp)
+ list.Add(sp);
+
+ return list;
+ }
+
+ public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer(Layer.OneHanded) as Spellbook;
+
+ public static bool ValidateSpellbook(Spellbook book, int spellID, SpellbookType type) => book.SpellbookType == type && (spellID == -1 || book.HasSpell(spellID));
+
+ public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted)
+ {
+ if (!Ethic.CheckTrade(from, to, newOwner, this))
+ return false;
+
+ return base.AllowSecureTrade(from, to, newOwner, accepted);
+ }
+
+ public override bool CanEquip(Mobile from)
+ {
+ if (!Ethic.CheckEquip(from, this)) return false;
+
+ if (!from.CanBeginAction()) return false;
+
+ return base.CanEquip(from);
+ }
+
+ public override bool AllowEquippedCast(Mobile from) => true;
+
+ public override bool OnDragDrop(Mobile from, Item dropped)
+ {
+ if (dropped is SpellScroll scroll && scroll.Amount == 1)
+ {
+ SpellbookType type = GetTypeForSpell(scroll.SpellID);
+
+ if (type != SpellbookType) return false;
+
+ if (HasSpell(scroll.SpellID))
+ {
+ from.SendLocalizedMessage(500179); // That spell is already present in that spellbook.
+ return false;
+ }
+
+ int val = scroll.SpellID - BookOffset;
+
+ if (val >= 0 && val < BookCount)
+ {
+ m_Content |= (ulong)1 << val;
+ ++SpellCount;
+
+ InvalidateProperties();
+
+ scroll.Delete();
+
+ from.Send(new PlaySound(0x249, GetWorldLocation()));
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public override void OnAfterDuped(Item newItem)
+ {
+ if (!(newItem is Spellbook book))
+ return;
+
+ book.Attributes = new AosAttributes(newItem, Attributes);
+ book.SkillBonuses = new AosSkillBonuses(newItem, SkillBonuses);
+ }
+
+ public override void OnAdded(IEntity parent)
+ {
+ if (Core.AOS && parent is Mobile from)
+ {
+ SkillBonuses.AddTo(from);
+
+ int strBonus = Attributes.BonusStr;
+ int dexBonus = Attributes.BonusDex;
+ int intBonus = Attributes.BonusInt;
+
+ if (strBonus != 0 || dexBonus != 0 || intBonus != 0)
+ {
+ string modName = Serial.ToString();
+
+ if (strBonus != 0)
+ from.AddStatMod(new StatMod(StatType.Str, $"{modName}Str", strBonus, TimeSpan.Zero));
+
+ if (dexBonus != 0)
+ from.AddStatMod(new StatMod(StatType.Dex, $"{modName}Dex", dexBonus, TimeSpan.Zero));
+
+ if (intBonus != 0)
+ from.AddStatMod(new StatMod(StatType.Int, $"{modName}Int", intBonus, TimeSpan.Zero));
+ }
+
+ from.CheckStatTimers();
+ }
+ }
+
+ public override void OnRemoved(IEntity parent)
+ {
+ if (Core.AOS && parent is Mobile from)
+ {
+ SkillBonuses.Remove();
+
+ string modName = Serial.ToString();
+
+ from.RemoveStatMod($"{modName}Str");
+ from.RemoveStatMod($"{modName}Dex");
+ from.RemoveStatMod($"{modName}Int");
+
+ from.CheckStatTimers();
+ }
+ }
+
+ public bool HasSpell(int spellID)
+ {
+ spellID -= BookOffset;
+
+ return spellID >= 0 && spellID < BookCount && (m_Content & (ulong)1 << spellID) != 0;
+ }
+
+ public void DisplayTo(Mobile to)
+ {
+ // The client must know about the spellbook or it will crash!
+
+ NetState ns = to.NetState;
+
+ if (ns == null)
+ return;
+
+ if (Parent == null)
+ {
+ to.Send(WorldPacket);
+ }
+ else if (Parent is Item)
+ {
+ // What will happen if the client doesn't know about our parent?
+ if (ns.ContainerGridLines)
+ to.Send(new ContainerContentUpdate6017(this));
+ else
+ to.Send(new ContainerContentUpdate(this));
+ }
+ else if (Parent is Mobile)
+ {
+ // What will happen if the client doesn't know about our parent?
+ to.Send(new EquipUpdate(this));
+ }
+
+ if (ns.HighSeas)
+ to.Send(new DisplaySpellbookHS(Serial));
+ else
+ to.Send(new DisplaySpellbook(Serial));
+
+ if (ObjectPropertyList.Enabled)
+ {
+ if (ns.NewSpellbook)
+ {
+ to.Send(new NewSpellbookContent(Serial, ItemID, BookOffset + 1, m_Content));
+ }
+ else
+ {
+ if (ns.ContainerGridLines)
+ to.Send(new SpellbookContent6017(Serial, BookOffset + 1, m_Content));
+ else
+ to.Send(new SpellbookContent(Serial, BookOffset + 1, m_Content));
+ }
+ }
+ else
+ {
+ if (ns.ContainerGridLines)
+ to.Send(new SpellbookContent6017(Serial, BookOffset + 1, m_Content));
+ else
+ to.Send(new SpellbookContent(Serial, BookOffset + 1, m_Content));
+ }
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_Quality == BookQuality.Exceptional)
+ list.Add(1063341); // exceptional
+
+ if (m_EngravedText != null)
+ list.Add(1072305, m_EngravedText); // Engraved: ~1_INSCRIPTION~
+
+ if (m_Crafter != null)
+ list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
+
+ SkillBonuses.GetProperties(list);
+
+ if (m_Slayer != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
+ if (entry != null)
+ list.Add(entry.Title);
+ }
+
+ if (m_Slayer2 != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
+ if (entry != null)
+ list.Add(entry.Title);
+ }
+
+ int prop;
+
+ if ((prop = Attributes.WeaponDamage) != 0)
+ list.Add(1060401, prop.ToString()); // damage increase ~1_val~%
+
+ 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 (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 (Attributes.SpellChanneling != 0)
+ list.Add(1060482); // spell channeling
+
+ 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 (Core.ML && (prop = Attributes.IncreasedKarmaLoss) != 0)
+ list.Add(1075210, prop.ToString()); // Increased Karma Loss ~1val~%
+
+ list.Add(1042886, SpellCount.ToString()); // ~1_NUMBERS_OF_SPELLS~ Spells
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ base.OnSingleClick(from);
+
+ if (m_Crafter != null)
+ LabelTo(from, 1050043, m_Crafter.Name); // crafted by ~1_NAME~
+
+ LabelTo(from, 1042886, SpellCount.ToString());
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ Container pack = from.Backpack;
+
+ if (Parent == from || (pack != null && Parent == pack))
+ DisplayTo(from);
+ else
+ from.SendLocalizedMessage(
+ 500207); // The spellbook must be in your backpack (and not in a container within) to open.
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(5); // version
+
+ writer.Write((byte)m_Quality);
+
+ writer.Write(m_EngravedText);
+
+ writer.Write(m_Crafter);
+
+ writer.Write((int)m_Slayer);
+ writer.Write((int)m_Slayer2);
+
+ Attributes.Serialize(writer);
+ SkillBonuses.Serialize(writer);
+
+ writer.Write(m_Content);
+ writer.Write(SpellCount);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 5:
+ {
+ m_Quality = (BookQuality)reader.ReadByte();
+
+ goto case 4;
+ }
+ case 4:
+ {
+ m_EngravedText = reader.ReadString();
+
+ goto case 3;
+ }
+ case 3:
+ {
+ m_Crafter = reader.ReadMobile();
+ goto case 2;
+ }
+ case 2:
+ {
+ m_Slayer = (SlayerName)reader.ReadInt();
+ m_Slayer2 = (SlayerName)reader.ReadInt();
+ goto case 1;
+ }
+ case 1:
+ {
+ Attributes = new AosAttributes(this, reader);
+ SkillBonuses = new AosSkillBonuses(this, reader);
+
+ goto case 0;
+ }
+ case 0:
+ {
+ m_Content = reader.ReadULong();
+ SpellCount = reader.ReadInt();
+
+ break;
+ }
+ }
+
+ Attributes ??= new AosAttributes(this);
+ SkillBonuses ??= new AosSkillBonuses(this);
+
+ if (Core.AOS && Parent is Mobile mobile)
+ SkillBonuses.AddTo(mobile);
+
+ int strBonus = Attributes.BonusStr;
+ int dexBonus = Attributes.BonusDex;
+ int intBonus = Attributes.BonusInt;
+
+ if (Parent is Mobile m)
+ {
+ if (strBonus != 0 || dexBonus != 0 || intBonus != 0)
+ {
+ string modName = Serial.ToString();
+
+ if (strBonus != 0)
+ m.AddStatMod(new StatMod(StatType.Str, $"{modName}Str", strBonus, TimeSpan.Zero));
+
+ if (dexBonus != 0)
+ m.AddStatMod(new StatMod(StatType.Dex, $"{modName}Dex", dexBonus, TimeSpan.Zero));
+
+ if (intBonus != 0)
+ m.AddStatMod(new StatMod(StatType.Int, $"{modName}Int", intBonus, TimeSpan.Zero));
+ }
+
+ m.CheckStatTimers();
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Magical/SpellweavingBook.cs b/Projects/UOContent/Items/Skill Items/Magical/SpellweavingBook.cs
index 0ae0e1176..930dfbf2a 100644
--- a/Projects/UOContent/Items/Skill Items/Magical/SpellweavingBook.cs
+++ b/Projects/UOContent/Items/Skill Items/Magical/SpellweavingBook.cs
@@ -1,35 +1,35 @@
-namespace Server.Items
-{
- public class SpellweavingBook : Spellbook
- {
- [Constructible]
- public SpellweavingBook(ulong content = 0) : base(content, 0x2D50)
- {
- Hue = 0x8A2;
-
- Layer = Layer.OneHanded;
- }
-
- public SpellweavingBook(Serial serial) : base(serial)
- {
- }
-
- public override SpellbookType SpellbookType => SpellbookType.Arcanist;
- public override int BookOffset => 600;
- public override int BookCount => 16;
-
- 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 SpellweavingBook : Spellbook
+ {
+ [Constructible]
+ public SpellweavingBook(ulong content = 0) : base(content, 0x2D50)
+ {
+ Hue = 0x8A2;
+
+ Layer = Layer.OneHanded;
+ }
+
+ public SpellweavingBook(Serial serial) : base(serial)
+ {
+ }
+
+ public override SpellbookType SpellbookType => SpellbookType.Arcanist;
+ public override int BookOffset => 600;
+ public override int BookCount => 16;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Misc/Bandage.cs b/Projects/UOContent/Items/Skill Items/Misc/Bandage.cs
index 8bdbffcc9..470fce1c6 100644
--- a/Projects/UOContent/Items/Skill Items/Misc/Bandage.cs
+++ b/Projects/UOContent/Items/Skill Items/Misc/Bandage.cs
@@ -1,521 +1,521 @@
-using System;
-using System.Collections.Generic;
-using Server.Engines.ConPVP;
-using Server.Factions;
-using Server.Gumps;
-using Server.Mobiles;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public class Bandage : Item, IDyable
- {
- public static int Range = Core.AOS ? 2 : 1;
-
- [Constructible]
- public Bandage(int amount = 1) : base(0xE21)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public Bandage(Serial serial) : base(serial)
- {
- }
-
- public override double DefaultWeight => 0.1;
-
- public virtual bool Dye(Mobile from, DyeTub sender)
- {
- if (Deleted)
- return false;
-
- Hue = sender.DyedHue;
-
- return true;
- }
-
- public static void Initialize()
- {
- EventSink.BandageTargetRequest += EventSink_BandageTargetRequest;
- }
-
- 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 (from.InRange(GetWorldLocation(), Range))
- {
- from.RevealingAction();
-
- from.SendLocalizedMessage(500948); // Who will you use the bandages on?
-
- from.Target = new InternalTarget(this);
- }
- else
- {
- from.SendLocalizedMessage(500295); // You are too far away to do that.
- }
- }
-
- private static void EventSink_BandageTargetRequest(Mobile from, Item item, Mobile target)
- {
- if (!(item is Bandage b) || b.Deleted)
- return;
-
- if (!from.InRange(b.GetWorldLocation(), Range))
- {
- from.SendLocalizedMessage(500295); // You are too far away to do that.
- return;
- }
-
- if (from.Target != null)
- {
- Target.Cancel(from);
- from.Target = null;
- }
-
- from.RevealingAction();
- from.SendLocalizedMessage(500948); // Who will you use the bandages on?
-
- new InternalTarget(b).Invoke(from, target);
- }
-
- private class InternalTarget : Target
- {
- private readonly Bandage m_Bandage;
-
- public InternalTarget(Bandage bandage) : base(Bandage.Range, false, TargetFlags.Beneficial) => m_Bandage = bandage;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Bandage.Deleted)
- return;
-
- if (targeted is Mobile mobile)
- {
- if (from.InRange(m_Bandage.GetWorldLocation(), Bandage.Range))
- {
- if (!(BandageContext.BeginHeal(from, mobile) == null || DuelContext.IsFreeConsume(from)))
- m_Bandage.Consume();
- }
- else
- {
- from.SendLocalizedMessage(500295); // You are too far away to do that.
- }
- }
- else if (targeted is PlagueBeastInnard innard)
- {
- if (innard.OnBandage(from))
- m_Bandage.Consume();
- }
- else
- {
- from.SendLocalizedMessage(500970); // Bandages can not be used on that.
- }
- }
-
- protected override void OnNonlocalTarget(Mobile from, object targeted)
- {
- if (targeted is PlagueBeastInnard innard)
- {
- if (innard.OnBandage(from))
- m_Bandage.Consume();
- }
- else
- {
- base.OnNonlocalTarget(from, targeted);
- }
- }
- }
- }
-
- public class BandageContext
- {
- private static readonly Dictionary m_Table = new Dictionary();
-
- public BandageContext(Mobile healer, Mobile patient, TimeSpan delay)
- {
- Healer = healer;
- Patient = patient;
-
- Timer = new InternalTimer(this, delay);
- Timer.Start();
- }
-
- public Mobile Healer { get; }
-
- public Mobile Patient { get; }
-
- public int Slips { get; set; }
-
- public Timer Timer { get; private set; }
-
- public void Slip()
- {
- Healer.SendLocalizedMessage(500961); // Your fingers slip!
- ++Slips;
- }
-
- public void StopHeal()
- {
- m_Table.Remove(Healer);
- Timer?.Stop();
- Timer = null;
- }
-
- public static BandageContext GetContext(Mobile healer)
- {
- m_Table.TryGetValue(healer, out BandageContext bc);
- return bc;
- }
-
- public static SkillName GetPrimarySkill(Mobile m)
- {
- if (!m.Player && (m.Body.IsMonster || m.Body.IsAnimal))
- return SkillName.Veterinary;
- return SkillName.Healing;
- }
-
- public static SkillName GetSecondarySkill(Mobile m)
- {
- if (!m.Player && (m.Body.IsMonster || m.Body.IsAnimal))
- return SkillName.AnimalLore;
- return SkillName.Anatomy;
- }
-
- public void EndHeal()
- {
- StopHeal();
-
- int healerNumber, patientNumber;
- bool playSound = true;
- bool checkSkills = false;
-
- SkillName primarySkill = GetPrimarySkill(Patient);
- SkillName secondarySkill = GetSecondarySkill(Patient);
-
- BaseCreature petPatient = Patient as BaseCreature;
-
- if (!Healer.Alive)
- {
- healerNumber = 500962; // You were unable to finish your work before you died.
- patientNumber = -1;
- playSound = false;
- }
- else if (!Healer.InRange(Patient, Bandage.Range))
- {
- healerNumber = 500963; // You did not stay close enough to heal your target.
- patientNumber = -1;
- playSound = false;
- }
- else if (!Patient.Alive || petPatient?.IsDeadPet == true)
- {
- double healing = Healer.Skills[primarySkill].Value;
- double anatomy = Healer.Skills[secondarySkill].Value;
- double chance = (healing - 68.0) / 50.0 - Slips * 0.02;
-
- if (((checkSkills = healing >= 80.0 && anatomy >= 80.0) && chance > Utility.RandomDouble())
- || (Core.SE && petPatient is FactionWarHorse && petPatient.ControlMaster == Healer)) // TODO: Dbl check doesn't check for faction of the horse here?
- {
- if (Patient.Map?.CanFit(Patient.Location, 16, false, false) != true)
- {
- healerNumber = 501042; // Target can not be resurrected at that location.
- patientNumber = 502391; // Thou can not be resurrected there!
- }
- else if (Patient.Region?.IsPartOf("Khaldun") == true)
- {
- healerNumber =
- 1010395; // The veil of death in this area is too strong and resists thy efforts to restore life.
- patientNumber = -1;
- }
- else
- {
- healerNumber = 500965; // You are able to resurrect your patient.
- patientNumber = -1;
-
- Patient.PlaySound(0x214);
- Patient.FixedEffect(0x376A, 10, 16);
-
- if (petPatient?.IsDeadPet == true)
- {
- Mobile master = petPatient.ControlMaster;
-
- if (master != null && Healer == master)
- {
- petPatient.ResurrectPet();
-
- for (int i = 0; i < petPatient.Skills.Length; ++i) petPatient.Skills[i].Base -= 0.1;
- }
- else if (master?.InRange(petPatient, 3) == true)
- {
- healerNumber = 503255; // You are able to resurrect the creature.
-
- master.CloseGump();
- master.SendGump(new PetResurrectGump(Healer, petPatient));
- }
- else
- {
- bool found = false;
-
- List friends = petPatient.Friends;
-
- for (int i = 0; friends != null && i < friends.Count; ++i)
- {
- Mobile friend = friends[i];
-
- if (friend.InRange(petPatient, 3))
- {
- healerNumber = 503255; // You are able to resurrect the creature.
-
- friend.CloseGump();
- friend.SendGump(new PetResurrectGump(Healer, petPatient));
-
- found = true;
- break;
- }
- }
-
- if (!found)
- healerNumber = 1049670; // The pet's owner must be nearby to attempt resurrection.
- }
- }
- else
- {
- Patient.CloseGump();
- Patient.SendGump(new ResurrectGump(Patient, Healer));
- }
- }
- }
- else
- {
- if (petPatient?.IsDeadPet == true)
- healerNumber = 503256; // You fail to resurrect the creature.
- else
- healerNumber = 500966; // You are unable to resurrect your patient.
-
- patientNumber = -1;
- }
- }
- else if (Patient.Poisoned)
- {
- Healer.SendLocalizedMessage(500969); // You finish applying the bandages.
-
- double healing = Healer.Skills[primarySkill].Value;
- double anatomy = Healer.Skills[secondarySkill].Value;
- double chance = (healing - 30.0) / 50.0 - Patient.Poison.Level * 0.1 - Slips * 0.02;
-
- if ((checkSkills = healing >= 60.0 && anatomy >= 60.0) && chance > Utility.RandomDouble())
- {
- if (Patient.CurePoison(Healer))
- {
- healerNumber = Healer == Patient ? -1 : 1010058; // You have cured the target of all poisons.
- patientNumber = 1010059; // You have been cured of all poisons.
- }
- else
- {
- healerNumber = -1;
- patientNumber = -1;
- }
- }
- else
- {
- healerNumber = 1010060; // You have failed to cure your target!
- patientNumber = -1;
- }
- }
- else if (BleedAttack.IsBleeding(Patient))
- {
- healerNumber = 1060088; // You bind the wound and stop the bleeding
- patientNumber = 1060167; // The bleeding wounds have healed, you are no longer bleeding!
-
- BleedAttack.EndBleed(Patient, false);
- }
- else if (MortalStrike.IsWounded(Patient))
- {
- healerNumber = Healer == Patient ? 1005000 : 1010398;
- patientNumber = -1;
- playSound = false;
- }
- else if (Patient.Hits == Patient.HitsMax)
- {
- healerNumber = 500967; // You heal what little damage your patient had.
- patientNumber = -1;
- }
- else
- {
- checkSkills = true;
- patientNumber = -1;
-
- double healing = Healer.Skills[primarySkill].Value;
- double anatomy = Healer.Skills[secondarySkill].Value;
- double chance = (healing + 10.0) / 100.0 - Slips * 0.02;
-
- if (chance > Utility.RandomDouble())
- {
- healerNumber = 500969; // You finish applying the bandages.
-
- double min, max;
-
- if (Core.AOS)
- {
- min = anatomy / 8.0 + healing / 5.0 + 4.0;
- max = anatomy / 6.0 + healing / 2.5 + 4.0;
- }
- else
- {
- min = anatomy / 5.0 + healing / 5.0 + 3.0;
- max = anatomy / 5.0 + healing / 2.0 + 10.0;
- }
-
- double toHeal = min + Utility.RandomDouble() * (max - min);
-
- if (Patient.Body.IsMonster || Patient.Body.IsAnimal)
- toHeal += Patient.HitsMax / 100.0;
-
- if (Core.AOS)
- toHeal -= toHeal * Slips * 0.35; // TODO: Verify algorithm
- else
- toHeal -= Slips * 4;
-
- if (toHeal < 1)
- {
- toHeal = 1;
- healerNumber = 500968; // You apply the bandages, but they barely help.
- }
-
- Patient.Heal((int)toHeal, Healer, false);
- }
- else
- {
- healerNumber = 500968; // You apply the bandages, but they barely help.
- playSound = false;
- }
- }
-
- if (healerNumber != -1)
- Healer.SendLocalizedMessage(healerNumber);
-
- if (patientNumber != -1)
- Patient.SendLocalizedMessage(patientNumber);
-
- if (playSound)
- Patient.PlaySound(0x57);
-
- if (checkSkills)
- {
- Healer.CheckSkill(secondarySkill, 0.0, 120.0);
- Healer.CheckSkill(primarySkill, 0.0, 120.0);
- }
- }
-
- public static BandageContext BeginHeal(Mobile healer, Mobile patient)
- {
- BaseCreature creature = patient as BaseCreature;
-
- if (patient is Golem)
- {
- healer.SendLocalizedMessage(500970); // Bandages cannot be used on that.
- }
- else if (creature?.IsAnimatedDead == true)
- {
- healer.SendLocalizedMessage(500951); // You cannot heal that.
- }
- else if (!patient.Poisoned && patient.Hits == patient.HitsMax && !BleedAttack.IsBleeding(patient) &&
- creature?.IsDeadPet != true)
- {
- healer.SendLocalizedMessage(500955); // That being is not damaged!
- }
- else if (!patient.Alive && patient.Map?.CanFit(patient.Location, 16, false, false) != true)
- {
- healer.SendLocalizedMessage(501042); // Target cannot be resurrected at that location.
- }
- else if (healer.CanBeBeneficial(patient, true, true))
- {
- healer.DoBeneficial(patient);
-
- bool onSelf = healer == patient;
- int dex = healer.Dex;
-
- double seconds;
- double resDelay = patient.Alive ? 0.0 : 5.0;
-
- if (onSelf)
- {
- if (Core.AOS)
- seconds = 5.0 + 0.5 * ((double)(120 - dex) / 10); // TODO: Verify algorithm
- else
- seconds = 9.4 + 0.6 * ((double)(120 - dex) / 10);
- }
- else
- {
- if (Core.AOS && GetPrimarySkill(patient) == SkillName.Veterinary)
- {
- seconds = 2.0;
- }
- else if (Core.AOS)
- {
- if (dex < 204)
- seconds = 3.2 - Math.Sin((double)dex / 130) * 2.5 + resDelay;
- else
- seconds = 0.7 + resDelay;
- }
- else
- {
- if (dex >= 100)
- seconds = 3.0 + resDelay;
- else if (dex >= 40)
- seconds = 4.0 + resDelay;
- else
- seconds = 5.0 + resDelay;
- }
- }
-
- BandageContext context = GetContext(healer);
-
- context?.StopHeal();
- seconds *= 1000;
-
- context = new BandageContext(healer, patient, TimeSpan.FromMilliseconds(seconds));
-
- m_Table[healer] = context;
-
- if (!onSelf)
- patient.SendLocalizedMessage(1008078, false, healer.Name); // : Attempting to heal you.
-
- healer.SendLocalizedMessage(500956); // You begin applying the bandages.
- return context;
- }
-
- return null;
- }
-
- private class InternalTimer : Timer
- {
- private readonly BandageContext m_Context;
-
- public InternalTimer(BandageContext context, TimeSpan delay) : base(delay)
- {
- m_Context = context;
- Priority = TimerPriority.FiftyMS;
- }
-
- protected override void OnTick()
- {
- m_Context.EndHeal();
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Engines.ConPVP;
+using Server.Factions;
+using Server.Gumps;
+using Server.Mobiles;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public class Bandage : Item, IDyable
+ {
+ public static int Range = Core.AOS ? 2 : 1;
+
+ [Constructible]
+ public Bandage(int amount = 1) : base(0xE21)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public Bandage(Serial serial) : base(serial)
+ {
+ }
+
+ public override double DefaultWeight => 0.1;
+
+ public virtual bool Dye(Mobile from, DyeTub sender)
+ {
+ if (Deleted)
+ return false;
+
+ Hue = sender.DyedHue;
+
+ return true;
+ }
+
+ public static void Initialize()
+ {
+ EventSink.BandageTargetRequest += EventSink_BandageTargetRequest;
+ }
+
+ 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 (from.InRange(GetWorldLocation(), Range))
+ {
+ from.RevealingAction();
+
+ from.SendLocalizedMessage(500948); // Who will you use the bandages on?
+
+ from.Target = new InternalTarget(this);
+ }
+ else
+ {
+ from.SendLocalizedMessage(500295); // You are too far away to do that.
+ }
+ }
+
+ private static void EventSink_BandageTargetRequest(Mobile from, Item item, Mobile target)
+ {
+ if (!(item is Bandage b) || b.Deleted)
+ return;
+
+ if (!from.InRange(b.GetWorldLocation(), Range))
+ {
+ from.SendLocalizedMessage(500295); // You are too far away to do that.
+ return;
+ }
+
+ if (from.Target != null)
+ {
+ Target.Cancel(from);
+ from.Target = null;
+ }
+
+ from.RevealingAction();
+ from.SendLocalizedMessage(500948); // Who will you use the bandages on?
+
+ new InternalTarget(b).Invoke(from, target);
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly Bandage m_Bandage;
+
+ public InternalTarget(Bandage bandage) : base(Bandage.Range, false, TargetFlags.Beneficial) => m_Bandage = bandage;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Bandage.Deleted)
+ return;
+
+ if (targeted is Mobile mobile)
+ {
+ if (from.InRange(m_Bandage.GetWorldLocation(), Bandage.Range))
+ {
+ if (!(BandageContext.BeginHeal(from, mobile) == null || DuelContext.IsFreeConsume(from)))
+ m_Bandage.Consume();
+ }
+ else
+ {
+ from.SendLocalizedMessage(500295); // You are too far away to do that.
+ }
+ }
+ else if (targeted is PlagueBeastInnard innard)
+ {
+ if (innard.OnBandage(from))
+ m_Bandage.Consume();
+ }
+ else
+ {
+ from.SendLocalizedMessage(500970); // Bandages can not be used on that.
+ }
+ }
+
+ protected override void OnNonlocalTarget(Mobile from, object targeted)
+ {
+ if (targeted is PlagueBeastInnard innard)
+ {
+ if (innard.OnBandage(from))
+ m_Bandage.Consume();
+ }
+ else
+ {
+ base.OnNonlocalTarget(from, targeted);
+ }
+ }
+ }
+ }
+
+ public class BandageContext
+ {
+ private static readonly Dictionary m_Table = new Dictionary();
+
+ public BandageContext(Mobile healer, Mobile patient, TimeSpan delay)
+ {
+ Healer = healer;
+ Patient = patient;
+
+ Timer = new InternalTimer(this, delay);
+ Timer.Start();
+ }
+
+ public Mobile Healer { get; }
+
+ public Mobile Patient { get; }
+
+ public int Slips { get; set; }
+
+ public Timer Timer { get; private set; }
+
+ public void Slip()
+ {
+ Healer.SendLocalizedMessage(500961); // Your fingers slip!
+ ++Slips;
+ }
+
+ public void StopHeal()
+ {
+ m_Table.Remove(Healer);
+ Timer?.Stop();
+ Timer = null;
+ }
+
+ public static BandageContext GetContext(Mobile healer)
+ {
+ m_Table.TryGetValue(healer, out BandageContext bc);
+ return bc;
+ }
+
+ public static SkillName GetPrimarySkill(Mobile m)
+ {
+ if (!m.Player && (m.Body.IsMonster || m.Body.IsAnimal))
+ return SkillName.Veterinary;
+ return SkillName.Healing;
+ }
+
+ public static SkillName GetSecondarySkill(Mobile m)
+ {
+ if (!m.Player && (m.Body.IsMonster || m.Body.IsAnimal))
+ return SkillName.AnimalLore;
+ return SkillName.Anatomy;
+ }
+
+ public void EndHeal()
+ {
+ StopHeal();
+
+ int healerNumber, patientNumber;
+ bool playSound = true;
+ bool checkSkills = false;
+
+ SkillName primarySkill = GetPrimarySkill(Patient);
+ SkillName secondarySkill = GetSecondarySkill(Patient);
+
+ BaseCreature petPatient = Patient as BaseCreature;
+
+ if (!Healer.Alive)
+ {
+ healerNumber = 500962; // You were unable to finish your work before you died.
+ patientNumber = -1;
+ playSound = false;
+ }
+ else if (!Healer.InRange(Patient, Bandage.Range))
+ {
+ healerNumber = 500963; // You did not stay close enough to heal your target.
+ patientNumber = -1;
+ playSound = false;
+ }
+ else if (!Patient.Alive || petPatient?.IsDeadPet == true)
+ {
+ double healing = Healer.Skills[primarySkill].Value;
+ double anatomy = Healer.Skills[secondarySkill].Value;
+ double chance = (healing - 68.0) / 50.0 - Slips * 0.02;
+
+ if (((checkSkills = healing >= 80.0 && anatomy >= 80.0) && chance > Utility.RandomDouble())
+ || (Core.SE && petPatient is FactionWarHorse && petPatient.ControlMaster == Healer)) // TODO: Dbl check doesn't check for faction of the horse here?
+ {
+ if (Patient.Map?.CanFit(Patient.Location, 16, false, false) != true)
+ {
+ healerNumber = 501042; // Target can not be resurrected at that location.
+ patientNumber = 502391; // Thou can not be resurrected there!
+ }
+ else if (Patient.Region?.IsPartOf("Khaldun") == true)
+ {
+ healerNumber =
+ 1010395; // The veil of death in this area is too strong and resists thy efforts to restore life.
+ patientNumber = -1;
+ }
+ else
+ {
+ healerNumber = 500965; // You are able to resurrect your patient.
+ patientNumber = -1;
+
+ Patient.PlaySound(0x214);
+ Patient.FixedEffect(0x376A, 10, 16);
+
+ if (petPatient?.IsDeadPet == true)
+ {
+ Mobile master = petPatient.ControlMaster;
+
+ if (master != null && Healer == master)
+ {
+ petPatient.ResurrectPet();
+
+ for (int i = 0; i < petPatient.Skills.Length; ++i) petPatient.Skills[i].Base -= 0.1;
+ }
+ else if (master?.InRange(petPatient, 3) == true)
+ {
+ healerNumber = 503255; // You are able to resurrect the creature.
+
+ master.CloseGump();
+ master.SendGump(new PetResurrectGump(Healer, petPatient));
+ }
+ else
+ {
+ bool found = false;
+
+ List friends = petPatient.Friends;
+
+ for (int i = 0; friends != null && i < friends.Count; ++i)
+ {
+ Mobile friend = friends[i];
+
+ if (friend.InRange(petPatient, 3))
+ {
+ healerNumber = 503255; // You are able to resurrect the creature.
+
+ friend.CloseGump();
+ friend.SendGump(new PetResurrectGump(Healer, petPatient));
+
+ found = true;
+ break;
+ }
+ }
+
+ if (!found)
+ healerNumber = 1049670; // The pet's owner must be nearby to attempt resurrection.
+ }
+ }
+ else
+ {
+ Patient.CloseGump();
+ Patient.SendGump(new ResurrectGump(Patient, Healer));
+ }
+ }
+ }
+ else
+ {
+ if (petPatient?.IsDeadPet == true)
+ healerNumber = 503256; // You fail to resurrect the creature.
+ else
+ healerNumber = 500966; // You are unable to resurrect your patient.
+
+ patientNumber = -1;
+ }
+ }
+ else if (Patient.Poisoned)
+ {
+ Healer.SendLocalizedMessage(500969); // You finish applying the bandages.
+
+ double healing = Healer.Skills[primarySkill].Value;
+ double anatomy = Healer.Skills[secondarySkill].Value;
+ double chance = (healing - 30.0) / 50.0 - Patient.Poison.Level * 0.1 - Slips * 0.02;
+
+ if ((checkSkills = healing >= 60.0 && anatomy >= 60.0) && chance > Utility.RandomDouble())
+ {
+ if (Patient.CurePoison(Healer))
+ {
+ healerNumber = Healer == Patient ? -1 : 1010058; // You have cured the target of all poisons.
+ patientNumber = 1010059; // You have been cured of all poisons.
+ }
+ else
+ {
+ healerNumber = -1;
+ patientNumber = -1;
+ }
+ }
+ else
+ {
+ healerNumber = 1010060; // You have failed to cure your target!
+ patientNumber = -1;
+ }
+ }
+ else if (BleedAttack.IsBleeding(Patient))
+ {
+ healerNumber = 1060088; // You bind the wound and stop the bleeding
+ patientNumber = 1060167; // The bleeding wounds have healed, you are no longer bleeding!
+
+ BleedAttack.EndBleed(Patient, false);
+ }
+ else if (MortalStrike.IsWounded(Patient))
+ {
+ healerNumber = Healer == Patient ? 1005000 : 1010398;
+ patientNumber = -1;
+ playSound = false;
+ }
+ else if (Patient.Hits == Patient.HitsMax)
+ {
+ healerNumber = 500967; // You heal what little damage your patient had.
+ patientNumber = -1;
+ }
+ else
+ {
+ checkSkills = true;
+ patientNumber = -1;
+
+ double healing = Healer.Skills[primarySkill].Value;
+ double anatomy = Healer.Skills[secondarySkill].Value;
+ double chance = (healing + 10.0) / 100.0 - Slips * 0.02;
+
+ if (chance > Utility.RandomDouble())
+ {
+ healerNumber = 500969; // You finish applying the bandages.
+
+ double min, max;
+
+ if (Core.AOS)
+ {
+ min = anatomy / 8.0 + healing / 5.0 + 4.0;
+ max = anatomy / 6.0 + healing / 2.5 + 4.0;
+ }
+ else
+ {
+ min = anatomy / 5.0 + healing / 5.0 + 3.0;
+ max = anatomy / 5.0 + healing / 2.0 + 10.0;
+ }
+
+ double toHeal = min + Utility.RandomDouble() * (max - min);
+
+ if (Patient.Body.IsMonster || Patient.Body.IsAnimal)
+ toHeal += Patient.HitsMax / 100.0;
+
+ if (Core.AOS)
+ toHeal -= toHeal * Slips * 0.35; // TODO: Verify algorithm
+ else
+ toHeal -= Slips * 4;
+
+ if (toHeal < 1)
+ {
+ toHeal = 1;
+ healerNumber = 500968; // You apply the bandages, but they barely help.
+ }
+
+ Patient.Heal((int)toHeal, Healer, false);
+ }
+ else
+ {
+ healerNumber = 500968; // You apply the bandages, but they barely help.
+ playSound = false;
+ }
+ }
+
+ if (healerNumber != -1)
+ Healer.SendLocalizedMessage(healerNumber);
+
+ if (patientNumber != -1)
+ Patient.SendLocalizedMessage(patientNumber);
+
+ if (playSound)
+ Patient.PlaySound(0x57);
+
+ if (checkSkills)
+ {
+ Healer.CheckSkill(secondarySkill, 0.0, 120.0);
+ Healer.CheckSkill(primarySkill, 0.0, 120.0);
+ }
+ }
+
+ public static BandageContext BeginHeal(Mobile healer, Mobile patient)
+ {
+ BaseCreature creature = patient as BaseCreature;
+
+ if (patient is Golem)
+ {
+ healer.SendLocalizedMessage(500970); // Bandages cannot be used on that.
+ }
+ else if (creature?.IsAnimatedDead == true)
+ {
+ healer.SendLocalizedMessage(500951); // You cannot heal that.
+ }
+ else if (!patient.Poisoned && patient.Hits == patient.HitsMax && !BleedAttack.IsBleeding(patient) &&
+ creature?.IsDeadPet != true)
+ {
+ healer.SendLocalizedMessage(500955); // That being is not damaged!
+ }
+ else if (!patient.Alive && patient.Map?.CanFit(patient.Location, 16, false, false) != true)
+ {
+ healer.SendLocalizedMessage(501042); // Target cannot be resurrected at that location.
+ }
+ else if (healer.CanBeBeneficial(patient, true, true))
+ {
+ healer.DoBeneficial(patient);
+
+ bool onSelf = healer == patient;
+ int dex = healer.Dex;
+
+ double seconds;
+ double resDelay = patient.Alive ? 0.0 : 5.0;
+
+ if (onSelf)
+ {
+ if (Core.AOS)
+ seconds = 5.0 + 0.5 * ((double)(120 - dex) / 10); // TODO: Verify algorithm
+ else
+ seconds = 9.4 + 0.6 * ((double)(120 - dex) / 10);
+ }
+ else
+ {
+ if (Core.AOS && GetPrimarySkill(patient) == SkillName.Veterinary)
+ {
+ seconds = 2.0;
+ }
+ else if (Core.AOS)
+ {
+ if (dex < 204)
+ seconds = 3.2 - Math.Sin((double)dex / 130) * 2.5 + resDelay;
+ else
+ seconds = 0.7 + resDelay;
+ }
+ else
+ {
+ if (dex >= 100)
+ seconds = 3.0 + resDelay;
+ else if (dex >= 40)
+ seconds = 4.0 + resDelay;
+ else
+ seconds = 5.0 + resDelay;
+ }
+ }
+
+ BandageContext context = GetContext(healer);
+
+ context?.StopHeal();
+ seconds *= 1000;
+
+ context = new BandageContext(healer, patient, TimeSpan.FromMilliseconds(seconds));
+
+ m_Table[healer] = context;
+
+ if (!onSelf)
+ patient.SendLocalizedMessage(1008078, false, healer.Name); // : Attempting to heal you.
+
+ healer.SendLocalizedMessage(500956); // You begin applying the bandages.
+ return context;
+ }
+
+ return null;
+ }
+
+ private class InternalTimer : Timer
+ {
+ private readonly BandageContext m_Context;
+
+ public InternalTimer(BandageContext context, TimeSpan delay) : base(delay)
+ {
+ m_Context = context;
+ Priority = TimerPriority.FiftyMS;
+ }
+
+ protected override void OnTick()
+ {
+ m_Context.EndHeal();
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Misc/FireHorn.cs b/Projects/UOContent/Items/Skill Items/Misc/FireHorn.cs
index f6e72dd31..e0b356e48 100644
--- a/Projects/UOContent/Items/Skill Items/Misc/FireHorn.cs
+++ b/Projects/UOContent/Items/Skill Items/Misc/FireHorn.cs
@@ -1,215 +1,215 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Server.Network;
-using Server.Spells;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public class FireHorn : Item
- {
- [Constructible]
- public FireHorn() : base(0xFC7)
- {
- Hue = 0x466;
- Weight = 1.0;
- }
-
- public FireHorn(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1060456; // fire horn
-
- private bool CheckUse(Mobile from)
- {
- if (!IsAccessibleTo(from))
- return false;
-
- if (from.Map != Map || !from.InRange(GetWorldLocation(), 2))
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- return false;
- }
-
- if (!from.CanBeginAction())
- {
- from.SendLocalizedMessage(1049615); // You must take a moment to catch your breath.
- return false;
- }
-
- if (from.Backpack?.GetAmount(typeof(SulfurousAsh)) >= (Core.AOS ? 4 : 15))
- return true;
-
- from.SendLocalizedMessage(1049617); // You do not have enough sulfurous ash.
- return false;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (CheckUse(from))
- {
- from.SendLocalizedMessage(1049620); // Select an area to incinerate.
- from.Target = new InternalTarget(this);
- }
- }
-
- public void Use(Mobile from, IPoint3D loc)
- {
- if (!CheckUse(from))
- return;
-
- from.BeginAction();
- Timer.DelayCall(Core.AOS ? TimeSpan.FromSeconds(6.0) : TimeSpan.FromSeconds(12.0), EndAction, from);
-
- int music = from.Skills.Musicianship.Fixed;
-
- int sucChance = 500 + (music - 775) * 2;
- double dSucChance = sucChance / 1000.0;
-
- if (!from.CheckSkill(SkillName.Musicianship, dSucChance))
- {
- from.SendLocalizedMessage(1049618); // The horn emits a pathetic squeak.
- from.PlaySound(0x18A);
- return;
- }
-
- int sulfAsh = Core.AOS ? 4 : 15;
- from.Backpack.ConsumeUpTo(typeof(SulfurousAsh), sulfAsh);
-
- from.PlaySound(0x15F);
- Effects.SendPacket(from, from.Map,
- new HuedEffect(EffectType.Moving, from.Serial, Serial.Zero, 0x36D4, from.Location, loc, 5, 0, false, true, 0,
- 0));
-
- IPooledEnumerable eable = from.Map.GetMobilesInRange(new Point3D(loc), 2);
-
- bool playerVsPlayer = false;
- List targets = eable.Where(m =>
- {
- if (from == m || !SpellHelper.ValidIndirectTarget(from, m) || !from.CanBeHarmful(m, false)
- || (Core.AOS && !from.InLOS(m)))
- return false;
-
- if (m.Player)
- playerVsPlayer = true;
-
- return true;
- }).ToList();
-
- eable.Free();
-
- if (targets.Count > 0)
- {
- int prov = from.Skills.Provocation.Fixed;
- int disc = from.Skills.Discordance.Fixed;
- int peace = from.Skills.Peacemaking.Fixed;
-
- int minDamage, maxDamage;
-
- if (Core.AOS)
- {
- int musicScaled = music + Math.Max(0, music - 900) * 2;
- int provScaled = prov + Math.Max(0, prov - 900) * 2;
- int discScaled = disc + Math.Max(0, disc - 900) * 2;
- int peaceScaled = peace + Math.Max(0, peace - 900) * 2;
-
- int weightAvg = (musicScaled + provScaled * 3 + discScaled * 3 + peaceScaled) / 80;
-
- int avgDamage;
- if (playerVsPlayer)
- avgDamage = weightAvg / 3;
- else
- avgDamage = weightAvg / 2;
-
- minDamage = avgDamage * 9 / 10;
- maxDamage = avgDamage * 10 / 9;
- }
- else
- {
- int total = prov + disc / 5 + peace / 5;
-
- if (playerVsPlayer)
- total /= 3;
-
- maxDamage = total * 2 / 30;
- minDamage = maxDamage * 7 / 10;
- }
-
- double damage = Utility.RandomMinMax(minDamage, maxDamage);
-
- if (Core.AOS && targets.Count > 1)
- damage = damage * 2 / targets.Count;
- else if (!Core.AOS)
- damage /= targets.Count;
-
- for (int i = 0; i < targets.Count; ++i)
- {
- Mobile m = targets[i];
-
- double toDeal = damage;
-
- if (!Core.AOS && m.CheckSkill(SkillName.MagicResist, 0.0, 120.0))
- {
- toDeal *= 0.5;
- m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
- }
-
- from.DoHarmful(m);
- SpellHelper.Damage(TimeSpan.Zero, m, from, toDeal, 0, 100, 0, 0, 0);
-
- Effects.SendTargetEffect(m, 0x3709, 10, 30);
- }
- }
-
- double breakChance = Core.AOS ? 0.01 : 0.16;
- if (Utility.RandomDouble() < breakChance)
- {
- from.SendLocalizedMessage(1049619); // The fire horn crumbles in your hands.
- Delete();
- }
- }
-
- private static void EndAction(Mobile m)
- {
- m?.EndAction();
- m?.SendLocalizedMessage(1049621); // You catch your breath.
- }
-
- 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 InternalTarget : Target
- {
- private readonly FireHorn m_Horn;
-
- public InternalTarget(FireHorn horn) : base(Core.AOS ? 3 : 2, true, TargetFlags.Harmful) => m_Horn = horn;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Horn.Deleted)
- return;
-
- IPoint3D loc;
- if (targeted is Item item)
- loc = item.GetWorldLocation();
- else
- loc = targeted as IPoint3D;
-
- m_Horn.Use(from, loc);
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Server.Network;
+using Server.Spells;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public class FireHorn : Item
+ {
+ [Constructible]
+ public FireHorn() : base(0xFC7)
+ {
+ Hue = 0x466;
+ Weight = 1.0;
+ }
+
+ public FireHorn(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1060456; // fire horn
+
+ private bool CheckUse(Mobile from)
+ {
+ if (!IsAccessibleTo(from))
+ return false;
+
+ if (from.Map != Map || !from.InRange(GetWorldLocation(), 2))
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ return false;
+ }
+
+ if (!from.CanBeginAction())
+ {
+ from.SendLocalizedMessage(1049615); // You must take a moment to catch your breath.
+ return false;
+ }
+
+ if (from.Backpack?.GetAmount(typeof(SulfurousAsh)) >= (Core.AOS ? 4 : 15))
+ return true;
+
+ from.SendLocalizedMessage(1049617); // You do not have enough sulfurous ash.
+ return false;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (CheckUse(from))
+ {
+ from.SendLocalizedMessage(1049620); // Select an area to incinerate.
+ from.Target = new InternalTarget(this);
+ }
+ }
+
+ public void Use(Mobile from, IPoint3D loc)
+ {
+ if (!CheckUse(from))
+ return;
+
+ from.BeginAction();
+ Timer.DelayCall(Core.AOS ? TimeSpan.FromSeconds(6.0) : TimeSpan.FromSeconds(12.0), EndAction, from);
+
+ int music = from.Skills.Musicianship.Fixed;
+
+ int sucChance = 500 + (music - 775) * 2;
+ double dSucChance = sucChance / 1000.0;
+
+ if (!from.CheckSkill(SkillName.Musicianship, dSucChance))
+ {
+ from.SendLocalizedMessage(1049618); // The horn emits a pathetic squeak.
+ from.PlaySound(0x18A);
+ return;
+ }
+
+ int sulfAsh = Core.AOS ? 4 : 15;
+ from.Backpack.ConsumeUpTo(typeof(SulfurousAsh), sulfAsh);
+
+ from.PlaySound(0x15F);
+ Effects.SendPacket(from, from.Map,
+ new HuedEffect(EffectType.Moving, from.Serial, Serial.Zero, 0x36D4, from.Location, loc, 5, 0, false, true, 0,
+ 0));
+
+ IPooledEnumerable eable = from.Map.GetMobilesInRange(new Point3D(loc), 2);
+
+ bool playerVsPlayer = false;
+ List targets = eable.Where(m =>
+ {
+ if (from == m || !SpellHelper.ValidIndirectTarget(from, m) || !from.CanBeHarmful(m, false)
+ || (Core.AOS && !from.InLOS(m)))
+ return false;
+
+ if (m.Player)
+ playerVsPlayer = true;
+
+ return true;
+ }).ToList();
+
+ eable.Free();
+
+ if (targets.Count > 0)
+ {
+ int prov = from.Skills.Provocation.Fixed;
+ int disc = from.Skills.Discordance.Fixed;
+ int peace = from.Skills.Peacemaking.Fixed;
+
+ int minDamage, maxDamage;
+
+ if (Core.AOS)
+ {
+ int musicScaled = music + Math.Max(0, music - 900) * 2;
+ int provScaled = prov + Math.Max(0, prov - 900) * 2;
+ int discScaled = disc + Math.Max(0, disc - 900) * 2;
+ int peaceScaled = peace + Math.Max(0, peace - 900) * 2;
+
+ int weightAvg = (musicScaled + provScaled * 3 + discScaled * 3 + peaceScaled) / 80;
+
+ int avgDamage;
+ if (playerVsPlayer)
+ avgDamage = weightAvg / 3;
+ else
+ avgDamage = weightAvg / 2;
+
+ minDamage = avgDamage * 9 / 10;
+ maxDamage = avgDamage * 10 / 9;
+ }
+ else
+ {
+ int total = prov + disc / 5 + peace / 5;
+
+ if (playerVsPlayer)
+ total /= 3;
+
+ maxDamage = total * 2 / 30;
+ minDamage = maxDamage * 7 / 10;
+ }
+
+ double damage = Utility.RandomMinMax(minDamage, maxDamage);
+
+ if (Core.AOS && targets.Count > 1)
+ damage = damage * 2 / targets.Count;
+ else if (!Core.AOS)
+ damage /= targets.Count;
+
+ for (int i = 0; i < targets.Count; ++i)
+ {
+ Mobile m = targets[i];
+
+ double toDeal = damage;
+
+ if (!Core.AOS && m.CheckSkill(SkillName.MagicResist, 0.0, 120.0))
+ {
+ toDeal *= 0.5;
+ m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
+ }
+
+ from.DoHarmful(m);
+ SpellHelper.Damage(TimeSpan.Zero, m, from, toDeal, 0, 100, 0, 0, 0);
+
+ Effects.SendTargetEffect(m, 0x3709, 10, 30);
+ }
+ }
+
+ double breakChance = Core.AOS ? 0.01 : 0.16;
+ if (Utility.RandomDouble() < breakChance)
+ {
+ from.SendLocalizedMessage(1049619); // The fire horn crumbles in your hands.
+ Delete();
+ }
+ }
+
+ private static void EndAction(Mobile m)
+ {
+ m?.EndAction();
+ m?.SendLocalizedMessage(1049621); // You catch your breath.
+ }
+
+ 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 InternalTarget : Target
+ {
+ private readonly FireHorn m_Horn;
+
+ public InternalTarget(FireHorn horn) : base(Core.AOS ? 3 : 2, true, TargetFlags.Harmful) => m_Horn = horn;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Horn.Deleted)
+ return;
+
+ IPoint3D loc;
+ if (targeted is Item item)
+ loc = item.GetWorldLocation();
+ else
+ loc = targeted as IPoint3D;
+
+ m_Horn.Use(from, loc);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Misc/RecipeScroll.cs b/Projects/UOContent/Items/Skill Items/Misc/RecipeScroll.cs
index ea745b4ab..502200270 100644
--- a/Projects/UOContent/Items/Skill Items/Misc/RecipeScroll.cs
+++ b/Projects/UOContent/Items/Skill Items/Misc/RecipeScroll.cs
@@ -1,116 +1,116 @@
-using Server.Engines.Craft;
-using Server.Mobiles;
-using Server.Network;
-
-namespace Server.Items
-{
- public class RecipeScroll : Item
- {
- private int m_RecipeID;
-
- public RecipeScroll(Recipe r) : this(r.ID)
- {
- }
-
- [Constructible]
- public RecipeScroll(int recipeID) : base(0x2831) => m_RecipeID = recipeID;
-
- public RecipeScroll(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1074560; // recipe scroll
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int RecipeID
- {
- get => m_RecipeID;
- set
- {
- m_RecipeID = value;
- InvalidateProperties();
- }
- }
-
- public Recipe Recipe
- {
- get
- {
- Recipe.Recipes.TryGetValue(m_RecipeID, out Recipe recipe);
- return recipe;
- }
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- Recipe r = Recipe;
-
- if (r != null)
- list.Add(1049644, r.TextDefinition.ToString()); // [~1_stuff~]
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!from.InRange(GetWorldLocation(), 2))
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- return;
- }
-
- Recipe r = Recipe;
-
- if (r != null && from is PlayerMobile pm)
- {
- if (!pm.HasRecipe(r))
- {
- double chance = r.CraftItem.GetSuccessChance(pm, null, r.CraftSystem, false, out var allRequiredSkills);
-
- if (allRequiredSkills && chance >= 0.0)
- {
- pm.SendLocalizedMessage(1073451,
- r.TextDefinition.ToString()); // You have learned a new recipe: ~1_RECIPE~
- pm.AcquireRecipe(r);
- Delete();
- }
- else
- {
- pm.SendLocalizedMessage(1044153); // You don't have the required skills to attempt this item.
- }
- }
- else
- {
- pm.SendLocalizedMessage(1073427); // You already know this recipe.
- }
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_RecipeID);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_RecipeID = reader.ReadInt();
-
- break;
- }
- }
- }
- }
-}
+using Server.Engines.Craft;
+using Server.Mobiles;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class RecipeScroll : Item
+ {
+ private int m_RecipeID;
+
+ public RecipeScroll(Recipe r) : this(r.ID)
+ {
+ }
+
+ [Constructible]
+ public RecipeScroll(int recipeID) : base(0x2831) => m_RecipeID = recipeID;
+
+ public RecipeScroll(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074560; // recipe scroll
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int RecipeID
+ {
+ get => m_RecipeID;
+ set
+ {
+ m_RecipeID = value;
+ InvalidateProperties();
+ }
+ }
+
+ public Recipe Recipe
+ {
+ get
+ {
+ Recipe.Recipes.TryGetValue(m_RecipeID, out Recipe recipe);
+ return recipe;
+ }
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ Recipe r = Recipe;
+
+ if (r != null)
+ list.Add(1049644, r.TextDefinition.ToString()); // [~1_stuff~]
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!from.InRange(GetWorldLocation(), 2))
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ return;
+ }
+
+ Recipe r = Recipe;
+
+ if (r != null && from is PlayerMobile pm)
+ {
+ if (!pm.HasRecipe(r))
+ {
+ double chance = r.CraftItem.GetSuccessChance(pm, null, r.CraftSystem, false, out var allRequiredSkills);
+
+ if (allRequiredSkills && chance >= 0.0)
+ {
+ pm.SendLocalizedMessage(1073451,
+ r.TextDefinition.ToString()); // You have learned a new recipe: ~1_RECIPE~
+ pm.AcquireRecipe(r);
+ Delete();
+ }
+ else
+ {
+ pm.SendLocalizedMessage(1044153); // You don't have the required skills to attempt this item.
+ }
+ }
+ else
+ {
+ pm.SendLocalizedMessage(1073427); // You already know this recipe.
+ }
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_RecipeID);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_RecipeID = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs b/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs
index 40163347d..f88beec51 100644
--- a/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs
+++ b/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs
@@ -1,232 +1,232 @@
-using System;
-using Server.Engines.Craft;
-using Server.Factions;
-using Server.Mobiles;
-using Server.Regions;
-
-namespace Server.Items
-{
- public class RepairDeed : Item
- {
- public enum RepairSkillType
- {
- Smithing,
- Tailoring,
- Tinkering,
- Carpentry,
- Fletching
- }
-
- private Mobile m_Crafter;
-
- private RepairSkillType m_Skill;
- private double m_SkillLevel;
-
- [Constructible]
- public RepairDeed(RepairSkillType skill, double level, bool normalizeLevel) : this(skill, level, null, normalizeLevel)
- {
- }
-
- [Constructible]
- public RepairDeed(RepairSkillType skill = RepairSkillType.Smithing, double level = 100.0,
- Mobile crafter = null, bool normalizeLevel = true) : base(0x14F0)
- {
- if (normalizeLevel)
- SkillLevel = (int)(level / 10) * 10;
- else
- SkillLevel = level;
-
- m_Skill = skill;
- m_Crafter = crafter;
- Hue = 0x1BC;
- LootType = LootType.Blessed;
- }
-
- public RepairDeed(Serial serial) : base(serial)
- {
- }
-
- public override bool DisplayLootType => false;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public RepairSkillType RepairSkill
- {
- get => m_Skill;
- set
- {
- m_Skill = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public double SkillLevel
- {
- get => m_SkillLevel;
- set
- {
- m_SkillLevel = Math.Clamp(value, 0, 120.0);
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Crafter
- {
- get => m_Crafter;
- set
- {
- m_Crafter = value;
- InvalidateProperties();
- }
- }
-
- public override void AddNameProperty(ObjectPropertyList list)
- {
- list.Add(1061133,
- $"{GetSkillTitle(m_SkillLevel)}\t{RepairSkillInfo.GetInfo(m_Skill).Name}"); // A repair service contract from ~1_SKILL_TITLE~ ~2_SKILL_NAME~.
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_Crafter != null)
- list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
-
- // On OSI it says it's exceptional. Intentional difference.
- }
-
- public override void OnSingleClick(Mobile from)
- {
- if (Deleted || !from.CanSee(this))
- return;
-
- LabelTo(from, 1061133,
- $"{GetSkillTitle(m_SkillLevel)}\t{RepairSkillInfo.GetInfo(m_Skill).Name}"); // A repair service contract from ~1_SKILL_TITLE~ ~2_SKILL_NAME~.
-
- if (m_Crafter != null)
- LabelTo(from, 1050043, m_Crafter.Name); // crafted by ~1_NAME~
- }
-
- private static TextDefinition GetSkillTitle(double skillLevel)
- {
- int skill = (int)(skillLevel / 10);
-
- if (skill >= 11)
- return 1062008 + skill - 11;
- if (skill >= 5)
- return 1061123 + skill - 5;
-
- return skill switch
- {
- 4 => "a Novice",
- 3 => "a Neophyte",
- _ => "a Newbie"
- };
- }
-
- public static RepairSkillType GetTypeFor(CraftSystem s)
- {
- for (int i = 0; i < RepairSkillInfo.Table.Length; i++)
- if (RepairSkillInfo.Table[i].System == s)
- return (RepairSkillType)i;
-
- return RepairSkillType.Smithing;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Check(from))
- Repair.Do(from, RepairSkillInfo.GetInfo(m_Skill).System, this);
- }
-
- public bool Check(Mobile from)
- {
- if (!IsChildOf(from.Backpack))
- from.SendLocalizedMessage(1047012); // The contract must be in your backpack to use it.
- else if (!VerifyRegion(from))
- TextDefinition.SendMessageTo(from, RepairSkillInfo.GetInfo(m_Skill).NotNearbyMessage);
- else
- return true;
-
- return false;
- }
-
- public bool VerifyRegion(Mobile m) => m.Region.IsPartOf() && Faction.IsNearType(m, RepairSkillInfo.GetInfo(m_Skill).NearbyTypes, 6);
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write((int)m_Skill);
- writer.Write(m_SkillLevel);
- writer.Write(m_Crafter);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Skill = (RepairSkillType)reader.ReadInt();
- m_SkillLevel = reader.ReadDouble();
- m_Crafter = reader.ReadMobile();
-
- break;
- }
- }
- }
-
- private class RepairSkillInfo
- {
- public RepairSkillInfo(CraftSystem system, Type[] nearbyTypes, TextDefinition notNearbyMessage,
- TextDefinition name)
- {
- System = system;
- NearbyTypes = nearbyTypes;
- NotNearbyMessage = notNearbyMessage;
- Name = name;
- }
-
- public RepairSkillInfo(CraftSystem system, Type nearbyType, TextDefinition notNearbyMessage, TextDefinition name)
- : this(system, new[] { nearbyType }, notNearbyMessage, name)
- {
- }
-
- public TextDefinition NotNearbyMessage { get; }
-
- public TextDefinition Name { get; }
-
- public CraftSystem System { get; }
-
- public Type[] NearbyTypes { get; }
-
- public static RepairSkillInfo[] Table { get; } =
- {
- new RepairSkillInfo(DefBlacksmithy.CraftSystem, typeof(Blacksmith), 1047013, 1023015),
- new RepairSkillInfo(DefTailoring.CraftSystem, typeof(Tailor), 1061132, 1022981),
- new RepairSkillInfo(DefTinkering.CraftSystem, typeof(Tinker), 1061166, 1022983),
- new RepairSkillInfo(DefCarpentry.CraftSystem, typeof(Carpenter), 1061135, 1060774),
- new RepairSkillInfo(DefBowFletching.CraftSystem, typeof(Bowyer), 1061134, 1023005)
- };
-
- public static RepairSkillInfo GetInfo(RepairSkillType type)
- {
- int v = (int)type;
-
- if (v < 0 || v >= Table.Length)
- v = 0;
-
- return Table[v];
- }
- }
- }
-}
+using System;
+using Server.Engines.Craft;
+using Server.Factions;
+using Server.Mobiles;
+using Server.Regions;
+
+namespace Server.Items
+{
+ public class RepairDeed : Item
+ {
+ public enum RepairSkillType
+ {
+ Smithing,
+ Tailoring,
+ Tinkering,
+ Carpentry,
+ Fletching
+ }
+
+ private Mobile m_Crafter;
+
+ private RepairSkillType m_Skill;
+ private double m_SkillLevel;
+
+ [Constructible]
+ public RepairDeed(RepairSkillType skill, double level, bool normalizeLevel) : this(skill, level, null, normalizeLevel)
+ {
+ }
+
+ [Constructible]
+ public RepairDeed(RepairSkillType skill = RepairSkillType.Smithing, double level = 100.0,
+ Mobile crafter = null, bool normalizeLevel = true) : base(0x14F0)
+ {
+ if (normalizeLevel)
+ SkillLevel = (int)(level / 10) * 10;
+ else
+ SkillLevel = level;
+
+ m_Skill = skill;
+ m_Crafter = crafter;
+ Hue = 0x1BC;
+ LootType = LootType.Blessed;
+ }
+
+ public RepairDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool DisplayLootType => false;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public RepairSkillType RepairSkill
+ {
+ get => m_Skill;
+ set
+ {
+ m_Skill = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public double SkillLevel
+ {
+ get => m_SkillLevel;
+ set
+ {
+ m_SkillLevel = Math.Clamp(value, 0, 120.0);
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Crafter
+ {
+ get => m_Crafter;
+ set
+ {
+ m_Crafter = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override void AddNameProperty(ObjectPropertyList list)
+ {
+ list.Add(1061133,
+ $"{GetSkillTitle(m_SkillLevel)}\t{RepairSkillInfo.GetInfo(m_Skill).Name}"); // A repair service contract from ~1_SKILL_TITLE~ ~2_SKILL_NAME~.
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_Crafter != null)
+ list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
+
+ // On OSI it says it's exceptional. Intentional difference.
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ if (Deleted || !from.CanSee(this))
+ return;
+
+ LabelTo(from, 1061133,
+ $"{GetSkillTitle(m_SkillLevel)}\t{RepairSkillInfo.GetInfo(m_Skill).Name}"); // A repair service contract from ~1_SKILL_TITLE~ ~2_SKILL_NAME~.
+
+ if (m_Crafter != null)
+ LabelTo(from, 1050043, m_Crafter.Name); // crafted by ~1_NAME~
+ }
+
+ private static TextDefinition GetSkillTitle(double skillLevel)
+ {
+ int skill = (int)(skillLevel / 10);
+
+ if (skill >= 11)
+ return 1062008 + skill - 11;
+ if (skill >= 5)
+ return 1061123 + skill - 5;
+
+ return skill switch
+ {
+ 4 => "a Novice",
+ 3 => "a Neophyte",
+ _ => "a Newbie"
+ };
+ }
+
+ public static RepairSkillType GetTypeFor(CraftSystem s)
+ {
+ for (int i = 0; i < RepairSkillInfo.Table.Length; i++)
+ if (RepairSkillInfo.Table[i].System == s)
+ return (RepairSkillType)i;
+
+ return RepairSkillType.Smithing;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Check(from))
+ Repair.Do(from, RepairSkillInfo.GetInfo(m_Skill).System, this);
+ }
+
+ public bool Check(Mobile from)
+ {
+ if (!IsChildOf(from.Backpack))
+ from.SendLocalizedMessage(1047012); // The contract must be in your backpack to use it.
+ else if (!VerifyRegion(from))
+ TextDefinition.SendMessageTo(from, RepairSkillInfo.GetInfo(m_Skill).NotNearbyMessage);
+ else
+ return true;
+
+ return false;
+ }
+
+ public bool VerifyRegion(Mobile m) => m.Region.IsPartOf() && Faction.IsNearType(m, RepairSkillInfo.GetInfo(m_Skill).NearbyTypes, 6);
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write((int)m_Skill);
+ writer.Write(m_SkillLevel);
+ writer.Write(m_Crafter);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Skill = (RepairSkillType)reader.ReadInt();
+ m_SkillLevel = reader.ReadDouble();
+ m_Crafter = reader.ReadMobile();
+
+ break;
+ }
+ }
+ }
+
+ private class RepairSkillInfo
+ {
+ public RepairSkillInfo(CraftSystem system, Type[] nearbyTypes, TextDefinition notNearbyMessage,
+ TextDefinition name)
+ {
+ System = system;
+ NearbyTypes = nearbyTypes;
+ NotNearbyMessage = notNearbyMessage;
+ Name = name;
+ }
+
+ public RepairSkillInfo(CraftSystem system, Type nearbyType, TextDefinition notNearbyMessage, TextDefinition name)
+ : this(system, new[] { nearbyType }, notNearbyMessage, name)
+ {
+ }
+
+ public TextDefinition NotNearbyMessage { get; }
+
+ public TextDefinition Name { get; }
+
+ public CraftSystem System { get; }
+
+ public Type[] NearbyTypes { get; }
+
+ public static RepairSkillInfo[] Table { get; } =
+ {
+ new RepairSkillInfo(DefBlacksmithy.CraftSystem, typeof(Blacksmith), 1047013, 1023015),
+ new RepairSkillInfo(DefTailoring.CraftSystem, typeof(Tailor), 1061132, 1022981),
+ new RepairSkillInfo(DefTinkering.CraftSystem, typeof(Tinker), 1061166, 1022983),
+ new RepairSkillInfo(DefCarpentry.CraftSystem, typeof(Carpenter), 1061135, 1060774),
+ new RepairSkillInfo(DefBowFletching.CraftSystem, typeof(Bowyer), 1061134, 1023005)
+ };
+
+ public static RepairSkillInfo GetInfo(RepairSkillType type)
+ {
+ int v = (int)type;
+
+ if (v < 0 || v >= Table.Length)
+ v = 0;
+
+ return Table[v];
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/BambooFlute.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/BambooFlute.cs
index 376d41c43..df53261a8 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/BambooFlute.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/BambooFlute.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class BambooFlute : BaseInstrument
- {
- [Constructible]
- public BambooFlute() : base(0x2805, 0x504, 0x503) => Weight = 2.0;
-
- public BambooFlute(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();
-
- if (Weight == 3.0)
- Weight = 2.0;
- }
- }
+namespace Server.Items
+{
+ public class BambooFlute : BaseInstrument
+ {
+ [Constructible]
+ public BambooFlute() : base(0x2805, 0x504, 0x503) => Weight = 2.0;
+
+ public BambooFlute(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();
+
+ if (Weight == 3.0)
+ Weight = 2.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs
index 65479adf2..f3eeac970 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs
@@ -1,552 +1,552 @@
-using System;
-using System.Collections.Generic;
-using Server.Engines.Craft;
-using Server.Mobiles;
-using Server.Network;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public delegate void InstrumentPickedCallback(Mobile from, BaseInstrument instrument);
-
- public enum InstrumentQuality
- {
- Low,
- Regular,
- Exceptional
- }
-
- public abstract class BaseInstrument : Item, ICraftable, ISlayer
- {
- private static readonly Dictionary m_Instruments = new Dictionary();
- private Mobile m_Crafter;
-
- private DateTime m_LastReplenished;
- private InstrumentQuality m_Quality;
-
- private bool m_ReplenishesCharges;
- private SlayerName m_Slayer, m_Slayer2;
- private int m_UsesRemaining;
-
- public BaseInstrument(int itemID, int wellSound, int badlySound) : base(itemID)
- {
- SuccessSound = wellSound;
- FailureSound = badlySound;
- UsesRemaining = Utility.RandomMinMax(InitMinUses, InitMaxUses);
- }
-
- public BaseInstrument(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int SuccessSound { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int FailureSound { get; set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public InstrumentQuality Quality
- {
- get => m_Quality;
- set
- {
- UnscaleUses();
- m_Quality = value;
- InvalidateProperties();
- ScaleUses();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Crafter
- {
- get => m_Crafter;
- set
- {
- m_Crafter = value;
- InvalidateProperties();
- }
- }
-
- public virtual int InitMinUses => 350;
- public virtual int InitMaxUses => 450;
-
- public virtual TimeSpan ChargeReplenishRate => TimeSpan.FromMinutes(5.0);
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get
- {
- CheckReplenishUses();
- return m_UsesRemaining;
- }
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public DateTime LastReplenished
- {
- get => m_LastReplenished;
- set
- {
- m_LastReplenished = value;
- CheckReplenishUses();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool ReplenishesCharges
- {
- get => m_ReplenishesCharges;
- set
- {
- if (value != m_ReplenishesCharges && value)
- m_LastReplenished = DateTime.UtcNow;
-
- m_ReplenishesCharges = value;
- }
- }
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- Quality = (InstrumentQuality)quality;
-
- if (makersMark)
- Crafter = from;
-
- return quality;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SlayerName Slayer
- {
- get => m_Slayer;
- set
- {
- m_Slayer = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SlayerName Slayer2
- {
- get => m_Slayer2;
- set
- {
- m_Slayer2 = value;
- InvalidateProperties();
- }
- }
-
- public void CheckReplenishUses(bool invalidate = true)
- {
- if (!m_ReplenishesCharges || m_UsesRemaining >= InitMaxUses)
- return;
-
- if (m_LastReplenished + ChargeReplenishRate < DateTime.UtcNow)
- {
- TimeSpan timeDifference = DateTime.UtcNow - m_LastReplenished;
-
- m_UsesRemaining = Math.Min(m_UsesRemaining + (int)(timeDifference.Ticks / ChargeReplenishRate.Ticks),
- InitMaxUses); // How rude of TimeSpan to not allow timespan division.
- m_LastReplenished = DateTime.UtcNow;
-
- if (invalidate)
- InvalidateProperties();
- }
- }
-
- public void ScaleUses()
- {
- UsesRemaining = UsesRemaining * GetUsesScalar() / 100;
- // InvalidateProperties();
- }
-
- public void UnscaleUses()
- {
- UsesRemaining = UsesRemaining * 100 / GetUsesScalar();
- }
-
- public int GetUsesScalar() => m_Quality == InstrumentQuality.Exceptional ? 200 : 100;
-
- public void ConsumeUse(Mobile from)
- {
- // TODO: Confirm what must happen here?
-
- if (UsesRemaining > 1)
- {
- --UsesRemaining;
- }
- else
- {
- from?.SendLocalizedMessage(502079); // The instrument played its last tune.
-
- Delete();
- }
- }
-
- public static BaseInstrument GetInstrument(Mobile from)
- {
- if (m_Instruments.TryGetValue(from, out BaseInstrument instrument) && instrument.IsChildOf(from.Backpack))
- return instrument;
-
- m_Instruments.Remove(from);
- return null;
- }
-
- public static int GetBardRange(Mobile bard, SkillName skill) => 8 + (int)(bard.Skills[skill].Value / 15);
-
- public static void PickInstrument(Mobile from, InstrumentPickedCallback callback)
- {
- BaseInstrument instrument = GetInstrument(from);
- if (instrument != null)
- {
- callback?.Invoke(from, instrument);
- }
- else
- {
- from.SendLocalizedMessage(500617); // What instrument shall you play?
- from.BeginTarget(1, false, TargetFlags.None, OnPickedInstrument, callback);
- }
- }
-
- public static void OnPickedInstrument(Mobile from, object targeted, InstrumentPickedCallback callback)
- {
- if (!(targeted is BaseInstrument instrument))
- {
- from.SendLocalizedMessage(500619); // That is not a musical instrument.
- }
- else
- {
- SetInstrument(from, instrument);
- callback?.Invoke(from, instrument);
- }
- }
-
- public static bool IsMageryCreature(BaseCreature bc) => bc?.AI == AIType.AI_Mage && bc.Skills.Magery.Base > 5.0;
-
- public static bool IsFireBreathingCreature(BaseCreature bc) => bc?.HasBreath == true;
-
- public static bool IsPoisonImmune(BaseCreature bc) => bc?.PoisonImmune != null;
-
- public static int GetPoisonLevel(BaseCreature bc) => (bc?.HitPoison?.Level ?? -1) + 1;
-
- public static double GetBaseDifficulty(Mobile targ)
- {
- /* Difficulty TODO: Add another 100 points for each of the following abilities:
- - Radiation or Aura Damage (Heat, Cold etc.)
- - Summoning Undead
- */
-
- double val = targ.HitsMax * 1.6 + targ.StamMax + targ.ManaMax;
-
- val += targ.SkillsTotal / 10.0;
-
- if (val > 700)
- val = 700 + (int)((val - 700) * (3.0 / 11));
-
- BaseCreature bc = targ as BaseCreature;
-
- if (IsMageryCreature(bc))
- val += 100;
-
- if (IsFireBreathingCreature(bc))
- val += 100;
-
- if (IsPoisonImmune(bc))
- val += 100;
-
- if (targ is VampireBat || targ is VampireBatFamiliar)
- val += 100;
-
- val += GetPoisonLevel(bc) * 20;
-
- val /= 10;
-
- if (bc?.IsParagon == true)
- val += 40.0;
-
- if (Core.SE && val > 160.0)
- val = 160.0;
-
- return val;
- }
-
- public double GetDifficultyFor(Mobile targ)
- {
- double val = GetBaseDifficulty(targ);
-
- if (m_Quality == InstrumentQuality.Exceptional)
- val -= 5.0; // 10%
-
- if (m_Slayer != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
-
- if (entry != null)
- {
- if (entry.Slays(targ))
- val -= 10.0; // 20%
- else if (entry.Group.OppositionSuperSlays(targ))
- val += 10.0; // -20%
- }
- }
-
- if (m_Slayer2 != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
-
- if (entry != null)
- {
- if (entry.Slays(targ))
- val -= 10.0; // 20%
- else if (entry.Group.OppositionSuperSlays(targ))
- val += 10.0; // -20%
- }
- }
-
- return val;
- }
-
- public static void SetInstrument(Mobile from, BaseInstrument item)
- {
- m_Instruments[from] = item;
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- int oldUses = m_UsesRemaining;
- CheckReplenishUses(false);
-
- base.GetProperties(list);
-
- if (m_Crafter != null)
- list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
-
- if (m_Quality == InstrumentQuality.Exceptional)
- list.Add(1060636); // exceptional
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
-
- if (m_ReplenishesCharges)
- list.Add(1070928); // Replenish Charges
-
- if (m_Slayer != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
- if (entry != null)
- list.Add(entry.Title);
- }
-
- if (m_Slayer2 != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
- if (entry != null)
- list.Add(entry.Title);
- }
-
- if (m_UsesRemaining != oldUses)
- Timer.DelayCall(InvalidateProperties);
- }
-
- public override void OnSingleClick(Mobile from)
- {
- List attrs = new List();
-
- if (DisplayLootType)
- {
- if (LootType == LootType.Blessed)
- attrs.Add(new EquipInfoAttribute(1038021)); // blessed
- else if (LootType == LootType.Cursed)
- attrs.Add(new EquipInfoAttribute(1049643)); // cursed
- }
-
- if (m_Quality == InstrumentQuality.Exceptional)
- attrs.Add(new EquipInfoAttribute(1018305 - (int)m_Quality));
-
- if (m_ReplenishesCharges)
- attrs.Add(new EquipInfoAttribute(1070928)); // Replenish Charges
-
- // TODO: Must this support item identification?
- if (m_Slayer != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
- if (entry != null)
- attrs.Add(new EquipInfoAttribute(entry.Title));
- }
-
- if (m_Slayer2 != SlayerName.None)
- {
- SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
- if (entry != null)
- attrs.Add(new EquipInfoAttribute(entry.Title));
- }
-
- int number;
-
- if (Name == null)
- {
- number = LabelNumber;
- }
- else
- {
- LabelTo(from, Name);
- number = 1041000;
- }
-
- if (attrs.Count == 0 && Crafter == null && Name != null)
- return;
-
- EquipmentInfo eqInfo = new EquipmentInfo(number, m_Crafter, false,
- attrs.ToArray());
-
- from.Send(new DisplayEquipmentInfo(this, eqInfo));
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(3); // version
-
- writer.Write(m_ReplenishesCharges);
- if (m_ReplenishesCharges)
- writer.Write(m_LastReplenished);
-
- writer.Write(m_Crafter);
-
- writer.WriteEncodedInt((int)m_Quality);
- writer.WriteEncodedInt((int)m_Slayer);
- writer.WriteEncodedInt((int)m_Slayer2);
-
- writer.WriteEncodedInt(UsesRemaining);
-
- writer.WriteEncodedInt(SuccessSound);
- writer.WriteEncodedInt(FailureSound);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 3:
- {
- m_ReplenishesCharges = reader.ReadBool();
-
- if (m_ReplenishesCharges)
- m_LastReplenished = reader.ReadDateTime();
-
- goto case 2;
- }
- case 2:
- {
- m_Crafter = reader.ReadMobile();
-
- m_Quality = (InstrumentQuality)reader.ReadEncodedInt();
- m_Slayer = (SlayerName)reader.ReadEncodedInt();
- m_Slayer2 = (SlayerName)reader.ReadEncodedInt();
-
- UsesRemaining = reader.ReadEncodedInt();
-
- SuccessSound = reader.ReadEncodedInt();
- FailureSound = reader.ReadEncodedInt();
-
- break;
- }
- case 1:
- {
- m_Crafter = reader.ReadMobile();
-
- m_Quality = (InstrumentQuality)reader.ReadEncodedInt();
- m_Slayer = (SlayerName)reader.ReadEncodedInt();
-
- UsesRemaining = reader.ReadEncodedInt();
-
- SuccessSound = reader.ReadEncodedInt();
- FailureSound = reader.ReadEncodedInt();
-
- break;
- }
- case 0:
- {
- SuccessSound = reader.ReadInt();
- FailureSound = reader.ReadInt();
- UsesRemaining = Utility.RandomMinMax(InitMinUses, InitMaxUses);
-
- break;
- }
- }
-
- CheckReplenishUses();
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!from.InRange(GetWorldLocation(), 1))
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- else if (from.BeginAction())
- {
- SetInstrument(from, this);
-
- // Delay of 7 second before being able to play another instrument again
- new InternalTimer(from).Start();
-
- if (CheckMusicianship(from))
- PlayInstrumentWell(from);
- else
- PlayInstrumentBadly(from);
- }
- else
- {
- from.SendLocalizedMessage(500119); // You must wait to perform another action
- }
- }
-
- public static bool CheckMusicianship(Mobile m)
- {
- m.CheckSkill(SkillName.Musicianship, 0.0, 120.0);
-
- return m.Skills.Musicianship.Value / 100 > Utility.RandomDouble();
- }
-
- public void PlayInstrumentWell(Mobile from)
- {
- from.PlaySound(SuccessSound);
- }
-
- public void PlayInstrumentBadly(Mobile from)
- {
- from.PlaySound(FailureSound);
- }
-
- private class InternalTimer : Timer
- {
- private readonly Mobile m_From;
-
- public InternalTimer(Mobile from) : base(TimeSpan.FromSeconds(6.0))
- {
- m_From = from;
- Priority = TimerPriority.TwoFiftyMS;
- }
-
- protected override void OnTick()
- {
- m_From.EndAction();
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Engines.Craft;
+using Server.Mobiles;
+using Server.Network;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public delegate void InstrumentPickedCallback(Mobile from, BaseInstrument instrument);
+
+ public enum InstrumentQuality
+ {
+ Low,
+ Regular,
+ Exceptional
+ }
+
+ public abstract class BaseInstrument : Item, ICraftable, ISlayer
+ {
+ private static readonly Dictionary m_Instruments = new Dictionary();
+ private Mobile m_Crafter;
+
+ private DateTime m_LastReplenished;
+ private InstrumentQuality m_Quality;
+
+ private bool m_ReplenishesCharges;
+ private SlayerName m_Slayer, m_Slayer2;
+ private int m_UsesRemaining;
+
+ public BaseInstrument(int itemID, int wellSound, int badlySound) : base(itemID)
+ {
+ SuccessSound = wellSound;
+ FailureSound = badlySound;
+ UsesRemaining = Utility.RandomMinMax(InitMinUses, InitMaxUses);
+ }
+
+ public BaseInstrument(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int SuccessSound { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int FailureSound { get; set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public InstrumentQuality Quality
+ {
+ get => m_Quality;
+ set
+ {
+ UnscaleUses();
+ m_Quality = value;
+ InvalidateProperties();
+ ScaleUses();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Crafter
+ {
+ get => m_Crafter;
+ set
+ {
+ m_Crafter = value;
+ InvalidateProperties();
+ }
+ }
+
+ public virtual int InitMinUses => 350;
+ public virtual int InitMaxUses => 450;
+
+ public virtual TimeSpan ChargeReplenishRate => TimeSpan.FromMinutes(5.0);
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get
+ {
+ CheckReplenishUses();
+ return m_UsesRemaining;
+ }
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public DateTime LastReplenished
+ {
+ get => m_LastReplenished;
+ set
+ {
+ m_LastReplenished = value;
+ CheckReplenishUses();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool ReplenishesCharges
+ {
+ get => m_ReplenishesCharges;
+ set
+ {
+ if (value != m_ReplenishesCharges && value)
+ m_LastReplenished = DateTime.UtcNow;
+
+ m_ReplenishesCharges = value;
+ }
+ }
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ Quality = (InstrumentQuality)quality;
+
+ if (makersMark)
+ Crafter = from;
+
+ return quality;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SlayerName Slayer
+ {
+ get => m_Slayer;
+ set
+ {
+ m_Slayer = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SlayerName Slayer2
+ {
+ get => m_Slayer2;
+ set
+ {
+ m_Slayer2 = value;
+ InvalidateProperties();
+ }
+ }
+
+ public void CheckReplenishUses(bool invalidate = true)
+ {
+ if (!m_ReplenishesCharges || m_UsesRemaining >= InitMaxUses)
+ return;
+
+ if (m_LastReplenished + ChargeReplenishRate < DateTime.UtcNow)
+ {
+ TimeSpan timeDifference = DateTime.UtcNow - m_LastReplenished;
+
+ m_UsesRemaining = Math.Min(m_UsesRemaining + (int)(timeDifference.Ticks / ChargeReplenishRate.Ticks),
+ InitMaxUses); // How rude of TimeSpan to not allow timespan division.
+ m_LastReplenished = DateTime.UtcNow;
+
+ if (invalidate)
+ InvalidateProperties();
+ }
+ }
+
+ public void ScaleUses()
+ {
+ UsesRemaining = UsesRemaining * GetUsesScalar() / 100;
+ // InvalidateProperties();
+ }
+
+ public void UnscaleUses()
+ {
+ UsesRemaining = UsesRemaining * 100 / GetUsesScalar();
+ }
+
+ public int GetUsesScalar() => m_Quality == InstrumentQuality.Exceptional ? 200 : 100;
+
+ public void ConsumeUse(Mobile from)
+ {
+ // TODO: Confirm what must happen here?
+
+ if (UsesRemaining > 1)
+ {
+ --UsesRemaining;
+ }
+ else
+ {
+ from?.SendLocalizedMessage(502079); // The instrument played its last tune.
+
+ Delete();
+ }
+ }
+
+ public static BaseInstrument GetInstrument(Mobile from)
+ {
+ if (m_Instruments.TryGetValue(from, out BaseInstrument instrument) && instrument.IsChildOf(from.Backpack))
+ return instrument;
+
+ m_Instruments.Remove(from);
+ return null;
+ }
+
+ public static int GetBardRange(Mobile bard, SkillName skill) => 8 + (int)(bard.Skills[skill].Value / 15);
+
+ public static void PickInstrument(Mobile from, InstrumentPickedCallback callback)
+ {
+ BaseInstrument instrument = GetInstrument(from);
+ if (instrument != null)
+ {
+ callback?.Invoke(from, instrument);
+ }
+ else
+ {
+ from.SendLocalizedMessage(500617); // What instrument shall you play?
+ from.BeginTarget(1, false, TargetFlags.None, OnPickedInstrument, callback);
+ }
+ }
+
+ public static void OnPickedInstrument(Mobile from, object targeted, InstrumentPickedCallback callback)
+ {
+ if (!(targeted is BaseInstrument instrument))
+ {
+ from.SendLocalizedMessage(500619); // That is not a musical instrument.
+ }
+ else
+ {
+ SetInstrument(from, instrument);
+ callback?.Invoke(from, instrument);
+ }
+ }
+
+ public static bool IsMageryCreature(BaseCreature bc) => bc?.AI == AIType.AI_Mage && bc.Skills.Magery.Base > 5.0;
+
+ public static bool IsFireBreathingCreature(BaseCreature bc) => bc?.HasBreath == true;
+
+ public static bool IsPoisonImmune(BaseCreature bc) => bc?.PoisonImmune != null;
+
+ public static int GetPoisonLevel(BaseCreature bc) => (bc?.HitPoison?.Level ?? -1) + 1;
+
+ public static double GetBaseDifficulty(Mobile targ)
+ {
+ /* Difficulty TODO: Add another 100 points for each of the following abilities:
+ - Radiation or Aura Damage (Heat, Cold etc.)
+ - Summoning Undead
+ */
+
+ double val = targ.HitsMax * 1.6 + targ.StamMax + targ.ManaMax;
+
+ val += targ.SkillsTotal / 10.0;
+
+ if (val > 700)
+ val = 700 + (int)((val - 700) * (3.0 / 11));
+
+ BaseCreature bc = targ as BaseCreature;
+
+ if (IsMageryCreature(bc))
+ val += 100;
+
+ if (IsFireBreathingCreature(bc))
+ val += 100;
+
+ if (IsPoisonImmune(bc))
+ val += 100;
+
+ if (targ is VampireBat || targ is VampireBatFamiliar)
+ val += 100;
+
+ val += GetPoisonLevel(bc) * 20;
+
+ val /= 10;
+
+ if (bc?.IsParagon == true)
+ val += 40.0;
+
+ if (Core.SE && val > 160.0)
+ val = 160.0;
+
+ return val;
+ }
+
+ public double GetDifficultyFor(Mobile targ)
+ {
+ double val = GetBaseDifficulty(targ);
+
+ if (m_Quality == InstrumentQuality.Exceptional)
+ val -= 5.0; // 10%
+
+ if (m_Slayer != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
+
+ if (entry != null)
+ {
+ if (entry.Slays(targ))
+ val -= 10.0; // 20%
+ else if (entry.Group.OppositionSuperSlays(targ))
+ val += 10.0; // -20%
+ }
+ }
+
+ if (m_Slayer2 != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
+
+ if (entry != null)
+ {
+ if (entry.Slays(targ))
+ val -= 10.0; // 20%
+ else if (entry.Group.OppositionSuperSlays(targ))
+ val += 10.0; // -20%
+ }
+ }
+
+ return val;
+ }
+
+ public static void SetInstrument(Mobile from, BaseInstrument item)
+ {
+ m_Instruments[from] = item;
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ int oldUses = m_UsesRemaining;
+ CheckReplenishUses(false);
+
+ base.GetProperties(list);
+
+ if (m_Crafter != null)
+ list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
+
+ if (m_Quality == InstrumentQuality.Exceptional)
+ list.Add(1060636); // exceptional
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+
+ if (m_ReplenishesCharges)
+ list.Add(1070928); // Replenish Charges
+
+ if (m_Slayer != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
+ if (entry != null)
+ list.Add(entry.Title);
+ }
+
+ if (m_Slayer2 != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
+ if (entry != null)
+ list.Add(entry.Title);
+ }
+
+ if (m_UsesRemaining != oldUses)
+ Timer.DelayCall(InvalidateProperties);
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ List attrs = new List();
+
+ if (DisplayLootType)
+ {
+ if (LootType == LootType.Blessed)
+ attrs.Add(new EquipInfoAttribute(1038021)); // blessed
+ else if (LootType == LootType.Cursed)
+ attrs.Add(new EquipInfoAttribute(1049643)); // cursed
+ }
+
+ if (m_Quality == InstrumentQuality.Exceptional)
+ attrs.Add(new EquipInfoAttribute(1018305 - (int)m_Quality));
+
+ if (m_ReplenishesCharges)
+ attrs.Add(new EquipInfoAttribute(1070928)); // Replenish Charges
+
+ // TODO: Must this support item identification?
+ if (m_Slayer != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer);
+ if (entry != null)
+ attrs.Add(new EquipInfoAttribute(entry.Title));
+ }
+
+ if (m_Slayer2 != SlayerName.None)
+ {
+ SlayerEntry entry = SlayerGroup.GetEntryByName(m_Slayer2);
+ if (entry != null)
+ attrs.Add(new EquipInfoAttribute(entry.Title));
+ }
+
+ int number;
+
+ if (Name == null)
+ {
+ number = LabelNumber;
+ }
+ else
+ {
+ LabelTo(from, Name);
+ number = 1041000;
+ }
+
+ if (attrs.Count == 0 && Crafter == null && Name != null)
+ return;
+
+ EquipmentInfo eqInfo = new EquipmentInfo(number, m_Crafter, false,
+ attrs.ToArray());
+
+ from.Send(new DisplayEquipmentInfo(this, eqInfo));
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(3); // version
+
+ writer.Write(m_ReplenishesCharges);
+ if (m_ReplenishesCharges)
+ writer.Write(m_LastReplenished);
+
+ writer.Write(m_Crafter);
+
+ writer.WriteEncodedInt((int)m_Quality);
+ writer.WriteEncodedInt((int)m_Slayer);
+ writer.WriteEncodedInt((int)m_Slayer2);
+
+ writer.WriteEncodedInt(UsesRemaining);
+
+ writer.WriteEncodedInt(SuccessSound);
+ writer.WriteEncodedInt(FailureSound);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 3:
+ {
+ m_ReplenishesCharges = reader.ReadBool();
+
+ if (m_ReplenishesCharges)
+ m_LastReplenished = reader.ReadDateTime();
+
+ goto case 2;
+ }
+ case 2:
+ {
+ m_Crafter = reader.ReadMobile();
+
+ m_Quality = (InstrumentQuality)reader.ReadEncodedInt();
+ m_Slayer = (SlayerName)reader.ReadEncodedInt();
+ m_Slayer2 = (SlayerName)reader.ReadEncodedInt();
+
+ UsesRemaining = reader.ReadEncodedInt();
+
+ SuccessSound = reader.ReadEncodedInt();
+ FailureSound = reader.ReadEncodedInt();
+
+ break;
+ }
+ case 1:
+ {
+ m_Crafter = reader.ReadMobile();
+
+ m_Quality = (InstrumentQuality)reader.ReadEncodedInt();
+ m_Slayer = (SlayerName)reader.ReadEncodedInt();
+
+ UsesRemaining = reader.ReadEncodedInt();
+
+ SuccessSound = reader.ReadEncodedInt();
+ FailureSound = reader.ReadEncodedInt();
+
+ break;
+ }
+ case 0:
+ {
+ SuccessSound = reader.ReadInt();
+ FailureSound = reader.ReadInt();
+ UsesRemaining = Utility.RandomMinMax(InitMinUses, InitMaxUses);
+
+ break;
+ }
+ }
+
+ CheckReplenishUses();
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!from.InRange(GetWorldLocation(), 1))
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ else if (from.BeginAction())
+ {
+ SetInstrument(from, this);
+
+ // Delay of 7 second before being able to play another instrument again
+ new InternalTimer(from).Start();
+
+ if (CheckMusicianship(from))
+ PlayInstrumentWell(from);
+ else
+ PlayInstrumentBadly(from);
+ }
+ else
+ {
+ from.SendLocalizedMessage(500119); // You must wait to perform another action
+ }
+ }
+
+ public static bool CheckMusicianship(Mobile m)
+ {
+ m.CheckSkill(SkillName.Musicianship, 0.0, 120.0);
+
+ return m.Skills.Musicianship.Value / 100 > Utility.RandomDouble();
+ }
+
+ public void PlayInstrumentWell(Mobile from)
+ {
+ from.PlaySound(SuccessSound);
+ }
+
+ public void PlayInstrumentBadly(Mobile from)
+ {
+ from.PlaySound(FailureSound);
+ }
+
+ private class InternalTimer : Timer
+ {
+ private readonly Mobile m_From;
+
+ public InternalTimer(Mobile from) : base(TimeSpan.FromSeconds(6.0))
+ {
+ m_From = from;
+ Priority = TimerPriority.TwoFiftyMS;
+ }
+
+ protected override void OnTick()
+ {
+ m_From.EndAction();
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/Drums.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/Drums.cs
index 553f43b1d..83ce443d9 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/Drums.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/Drums.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class Drums : BaseInstrument
- {
- [Constructible]
- public Drums() : base(0xE9C, 0x38, 0x39) => Weight = 4.0;
-
- public Drums(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();
-
- if (Weight == 3.0)
- Weight = 4.0;
- }
- }
+namespace Server.Items
+{
+ public class Drums : BaseInstrument
+ {
+ [Constructible]
+ public Drums() : base(0xE9C, 0x38, 0x39) => Weight = 4.0;
+
+ public Drums(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();
+
+ if (Weight == 3.0)
+ Weight = 4.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/Harp.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/Harp.cs
index 97dbe9dd5..0811198ea 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/Harp.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/Harp.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class Harp : BaseInstrument
- {
- [Constructible]
- public Harp() : base(0xEB1, 0x43, 0x44) => Weight = 35.0;
-
- public Harp(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();
-
- if (Weight == 3.0)
- Weight = 35.0;
- }
- }
+namespace Server.Items
+{
+ public class Harp : BaseInstrument
+ {
+ [Constructible]
+ public Harp() : base(0xEB1, 0x43, 0x44) => Weight = 35.0;
+
+ public Harp(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();
+
+ if (Weight == 3.0)
+ Weight = 35.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/LapHarp.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/LapHarp.cs
index 8a2e10812..deb3066ff 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/LapHarp.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/LapHarp.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class LapHarp : BaseInstrument
- {
- [Constructible]
- public LapHarp() : base(0xEB2, 0x45, 0x46) => Weight = 10.0;
-
- public LapHarp(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();
-
- if (Weight == 3.0)
- Weight = 10.0;
- }
- }
+namespace Server.Items
+{
+ public class LapHarp : BaseInstrument
+ {
+ [Constructible]
+ public LapHarp() : base(0xEB2, 0x45, 0x46) => Weight = 10.0;
+
+ public LapHarp(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();
+
+ if (Weight == 3.0)
+ Weight = 10.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/Lute.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/Lute.cs
index 41eab4884..fb6b13f2d 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/Lute.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/Lute.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class Lute : BaseInstrument
- {
- [Constructible]
- public Lute() : base(0xEB3, 0x4C, 0x4D) => Weight = 5.0;
-
- public Lute(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();
-
- if (Weight == 3.0)
- Weight = 5.0;
- }
- }
+namespace Server.Items
+{
+ public class Lute : BaseInstrument
+ {
+ [Constructible]
+ public Lute() : base(0xEB3, 0x4C, 0x4D) => Weight = 5.0;
+
+ public Lute(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();
+
+ if (Weight == 3.0)
+ Weight = 5.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/Tambourine.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/Tambourine.cs
index 11f3a63ed..20bfda8dd 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/Tambourine.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/Tambourine.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class Tambourine : BaseInstrument
- {
- [Constructible]
- public Tambourine() : base(0xE9D, 0x52, 0x53) => Weight = 1.0;
-
- public Tambourine(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();
-
- if (Weight == 2.0)
- Weight = 1.0;
- }
- }
+namespace Server.Items
+{
+ public class Tambourine : BaseInstrument
+ {
+ [Constructible]
+ public Tambourine() : base(0xE9D, 0x52, 0x53) => Weight = 1.0;
+
+ public Tambourine(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();
+
+ if (Weight == 2.0)
+ Weight = 1.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/TambourineTassel.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/TambourineTassel.cs
index 8f7e8e811..2b348d858 100644
--- a/Projects/UOContent/Items/Skill Items/Musical Instruments/TambourineTassel.cs
+++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/TambourineTassel.cs
@@ -1,29 +1,29 @@
-namespace Server.Items
-{
- public class TambourineTassel : BaseInstrument
- {
- [Constructible]
- public TambourineTassel() : base(0xE9E, 0x52, 0x53) => Weight = 1.0;
-
- public TambourineTassel(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();
-
- if (Weight == 2.0)
- Weight = 1.0;
- }
- }
+namespace Server.Items
+{
+ public class TambourineTassel : BaseInstrument
+ {
+ [Constructible]
+ public TambourineTassel() : base(0xE9E, 0x52, 0x53) => Weight = 1.0;
+
+ public TambourineTassel(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();
+
+ if (Weight == 2.0)
+ Weight = 1.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/EggBomb.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/EggBomb.cs
index bea709c15..4cd3aa3d9 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/EggBomb.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/EggBomb.cs
@@ -1,78 +1,78 @@
-using Server.SkillHandlers;
-
-namespace Server.Items
-{
- public class EggBomb : Item
- {
- [Constructible]
- public EggBomb() : base(0x2808)
- {
- // Item ID should be 0x2809 - Temporary solution for clients 7.0.0.0 and up
- Stackable = Core.ML;
- Weight = 1.0;
- }
-
- public EggBomb(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1030249;
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!IsChildOf(from.Backpack))
- {
- // The item must be in your backpack to use it.
- from.SendLocalizedMessage(1060640);
- }
- else if (from.Skills.Ninjitsu.Value < 50.0)
- {
- // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
- from.SendLocalizedMessage(1063013, "50\tNinjitsu");
- }
- else if (Core.TickCount - from.NextSkillTime < 0)
- {
- // You must wait a few seconds before you can use that item.
- from.SendLocalizedMessage(1070772);
- }
- else if (from.Mana < 10)
- {
- // You don't have enough mana to do that.
- from.SendLocalizedMessage(1049456);
- }
- else
- {
- Hiding.CombatOverride = true;
-
- if (from.UseSkill(SkillName.Hiding))
- {
- from.Mana -= 10;
-
- from.FixedParticles(0x3709, 1, 30, 9904, 1108, 6, EffectLayer.RightFoot);
- from.PlaySound(0x22F);
-
- Consume();
- }
-
- Hiding.CombatOverride = false;
- }
- }
-
- 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 (ItemID == 0x2809) // Temporary solution for clients 7.0.0.0 and up
- ItemID = 0x2808;
- }
- }
+using Server.SkillHandlers;
+
+namespace Server.Items
+{
+ public class EggBomb : Item
+ {
+ [Constructible]
+ public EggBomb() : base(0x2808)
+ {
+ // Item ID should be 0x2809 - Temporary solution for clients 7.0.0.0 and up
+ Stackable = Core.ML;
+ Weight = 1.0;
+ }
+
+ public EggBomb(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1030249;
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!IsChildOf(from.Backpack))
+ {
+ // The item must be in your backpack to use it.
+ from.SendLocalizedMessage(1060640);
+ }
+ else if (from.Skills.Ninjitsu.Value < 50.0)
+ {
+ // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
+ from.SendLocalizedMessage(1063013, "50\tNinjitsu");
+ }
+ else if (Core.TickCount - from.NextSkillTime < 0)
+ {
+ // You must wait a few seconds before you can use that item.
+ from.SendLocalizedMessage(1070772);
+ }
+ else if (from.Mana < 10)
+ {
+ // You don't have enough mana to do that.
+ from.SendLocalizedMessage(1049456);
+ }
+ else
+ {
+ Hiding.CombatOverride = true;
+
+ if (from.UseSkill(SkillName.Hiding))
+ {
+ from.Mana -= 10;
+
+ from.FixedParticles(0x3709, 1, 30, 9904, 1108, 6, EffectLayer.RightFoot);
+ from.PlaySound(0x22F);
+
+ Consume();
+ }
+
+ Hiding.CombatOverride = false;
+ }
+ }
+
+ 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 (ItemID == 0x2809) // Temporary solution for clients 7.0.0.0 and up
+ ItemID = 0x2808;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/Fukiya.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/Fukiya.cs
index 9ecbcc502..369dc671a 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/Fukiya.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/Fukiya.cs
@@ -1,145 +1,145 @@
-using System;
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Mobiles;
-
-namespace Server.Items
-{
- [Flippable(0x27AA, 0x27F5)]
- public class Fukiya : Item, INinjaWeapon
- {
- private Poison m_Poison;
- private int m_PoisonCharges;
-
- private int m_UsesRemaining;
-
- [Constructible]
- public Fukiya() : base(0x27AA)
- {
- Weight = 4.0;
- Layer = Layer.OneHanded;
- }
-
- public Fukiya(Serial serial) : base(serial)
- {
- }
-
- public virtual int WrongAmmoMessage => 1063329; // You can only load fukiya darts
- public virtual int NoFreeHandMessage => 1063327; // You must have a free hand to use a fukiya.
- public virtual int EmptyWeaponMessage => 1063325; // You have no fukiya darts!
- public virtual int RecentlyUsedMessage => 1063326; // You are already using that fukiya.
- public virtual int FullWeaponMessage => 1063330; // You can only load fukiya darts
-
- public virtual int WeaponMinRange => 0;
- public virtual int WeaponMaxRange => 6;
-
- public virtual int WeaponDamage => Utility.RandomMinMax(4, 6);
-
- public Type AmmoType => typeof(FukiyaDarts);
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Poison Poison
- {
- get => m_Poison;
- set
- {
- m_Poison = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int PoisonCharges
- {
- get => m_PoisonCharges;
- set
- {
- m_PoisonCharges = value;
- InvalidateProperties();
- }
- }
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public void AttackAnimation(Mobile from, Mobile to)
- {
- if (from.Body.IsHuman && !from.Mounted) from.Animate(33, 2, 1, true, true, 0);
-
- from.PlaySound(0x223);
- from.MovingEffect(to, 0x2804, 5, 0, false, false);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
-
- if (m_Poison != null && m_PoisonCharges > 0)
- list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- NinjaWeapon.AttemptShoot((PlayerMobile)from, this);
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- if (IsChildOf(from))
- {
- list.Add(new NinjaWeapon.LoadEntry(this, 6224));
- list.Add(new NinjaWeapon.UnloadEntry(this, 6225));
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0);
-
- writer.Write(m_UsesRemaining);
-
- Poison.Serialize(m_Poison, writer);
- writer.Write(m_PoisonCharges);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
-
- m_Poison = Poison.Deserialize(reader);
- m_PoisonCharges = reader.ReadInt();
-
- break;
- }
- }
- }
- }
+using System;
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Mobiles;
+
+namespace Server.Items
+{
+ [Flippable(0x27AA, 0x27F5)]
+ public class Fukiya : Item, INinjaWeapon
+ {
+ private Poison m_Poison;
+ private int m_PoisonCharges;
+
+ private int m_UsesRemaining;
+
+ [Constructible]
+ public Fukiya() : base(0x27AA)
+ {
+ Weight = 4.0;
+ Layer = Layer.OneHanded;
+ }
+
+ public Fukiya(Serial serial) : base(serial)
+ {
+ }
+
+ public virtual int WrongAmmoMessage => 1063329; // You can only load fukiya darts
+ public virtual int NoFreeHandMessage => 1063327; // You must have a free hand to use a fukiya.
+ public virtual int EmptyWeaponMessage => 1063325; // You have no fukiya darts!
+ public virtual int RecentlyUsedMessage => 1063326; // You are already using that fukiya.
+ public virtual int FullWeaponMessage => 1063330; // You can only load fukiya darts
+
+ public virtual int WeaponMinRange => 0;
+ public virtual int WeaponMaxRange => 6;
+
+ public virtual int WeaponDamage => Utility.RandomMinMax(4, 6);
+
+ public Type AmmoType => typeof(FukiyaDarts);
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Poison Poison
+ {
+ get => m_Poison;
+ set
+ {
+ m_Poison = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int PoisonCharges
+ {
+ get => m_PoisonCharges;
+ set
+ {
+ m_PoisonCharges = value;
+ InvalidateProperties();
+ }
+ }
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public void AttackAnimation(Mobile from, Mobile to)
+ {
+ if (from.Body.IsHuman && !from.Mounted) from.Animate(33, 2, 1, true, true, 0);
+
+ from.PlaySound(0x223);
+ from.MovingEffect(to, 0x2804, 5, 0, false, false);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+
+ if (m_Poison != null && m_PoisonCharges > 0)
+ list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ NinjaWeapon.AttemptShoot((PlayerMobile)from, this);
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ if (IsChildOf(from))
+ {
+ list.Add(new NinjaWeapon.LoadEntry(this, 6224));
+ list.Add(new NinjaWeapon.UnloadEntry(this, 6225));
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0);
+
+ writer.Write(m_UsesRemaining);
+
+ Poison.Serialize(m_Poison, writer);
+ writer.Write(m_PoisonCharges);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+
+ m_Poison = Poison.Deserialize(reader);
+ m_PoisonCharges = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/FukiyaDarts.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/FukiyaDarts.cs
index 69154296c..5e58d1fe9 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/FukiyaDarts.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/FukiyaDarts.cs
@@ -1,114 +1,114 @@
-using System;
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class FukiyaDarts : Item, ICraftable, INinjaAmmo
- {
- private Poison m_Poison;
- private int m_PoisonCharges;
- private int m_UsesRemaining;
-
- [Constructible]
- public FukiyaDarts(int amount = 1) : base(0x2806)
- {
- Weight = 1.0;
-
- m_UsesRemaining = amount;
- }
-
- public FukiyaDarts(Serial serial) : base(serial)
- {
- }
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- if (quality == 2)
- UsesRemaining *= 2;
-
- return quality;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Poison Poison
- {
- get => m_Poison;
- set
- {
- m_Poison = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int PoisonCharges
- {
- get => m_PoisonCharges;
- set
- {
- m_PoisonCharges = value;
- InvalidateProperties();
- }
- }
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
-
- if (m_Poison != null && m_PoisonCharges > 0)
- list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_UsesRemaining);
-
- Poison.Serialize(m_Poison, writer);
- writer.Write(m_PoisonCharges);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
-
- m_Poison = Poison.Deserialize(reader);
- m_PoisonCharges = reader.ReadInt();
-
- break;
- }
- }
- }
- }
-}
+using System;
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ public class FukiyaDarts : Item, ICraftable, INinjaAmmo
+ {
+ private Poison m_Poison;
+ private int m_PoisonCharges;
+ private int m_UsesRemaining;
+
+ [Constructible]
+ public FukiyaDarts(int amount = 1) : base(0x2806)
+ {
+ Weight = 1.0;
+
+ m_UsesRemaining = amount;
+ }
+
+ public FukiyaDarts(Serial serial) : base(serial)
+ {
+ }
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ if (quality == 2)
+ UsesRemaining *= 2;
+
+ return quality;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Poison Poison
+ {
+ get => m_Poison;
+ set
+ {
+ m_Poison = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int PoisonCharges
+ {
+ get => m_PoisonCharges;
+ set
+ {
+ m_PoisonCharges = value;
+ InvalidateProperties();
+ }
+ }
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+
+ if (m_Poison != null && m_PoisonCharges > 0)
+ list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_UsesRemaining);
+
+ Poison.Serialize(m_Poison, writer);
+ writer.Write(m_PoisonCharges);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+
+ m_Poison = Poison.Deserialize(reader);
+ m_PoisonCharges = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/LeatherNinjaBelt.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/LeatherNinjaBelt.cs
index e0162bb3b..9caba05e1 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/LeatherNinjaBelt.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/LeatherNinjaBelt.cs
@@ -1,158 +1,158 @@
-using System;
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Mobiles;
-
-namespace Server.Items
-{
- [Flippable(0x2790, 0x27DB)]
- public class LeatherNinjaBelt : BaseWaist, IDyable, INinjaWeapon
- {
- private Poison m_Poison;
- private int m_PoisonCharges;
-
- private int m_UsesRemaining;
-
- [Constructible]
- public LeatherNinjaBelt() : base(0x2790)
- {
- Weight = 1.0;
- Layer = Layer.Waist;
- }
-
- public LeatherNinjaBelt(Serial serial) : base(serial)
- {
- }
-
- public override CraftResource DefaultResource => CraftResource.RegularLeather;
-
- public virtual int WrongAmmoMessage => 1063301; // You can only place shuriken in a ninja belt.
- public virtual int NoFreeHandMessage => 1063299; // You must have a free hand to throw shuriken.
- public virtual int EmptyWeaponMessage => 1063297; // You have no shuriken in your ninja belt!
- public virtual int RecentlyUsedMessage => 1063298; // You cannot throw another shuriken yet.
- public virtual int FullWeaponMessage => 1063302; // You cannot add any more shuriken.
-
- public virtual int WeaponMinRange => 2;
- public virtual int WeaponMaxRange => 10;
-
- public virtual int WeaponDamage => Utility.RandomMinMax(3, 5);
-
- public virtual Type AmmoType => typeof(Shuriken);
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Poison Poison
- {
- get => m_Poison;
- set
- {
- m_Poison = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int PoisonCharges
- {
- get => m_PoisonCharges;
- set
- {
- m_PoisonCharges = value;
- InvalidateProperties();
- }
- }
-
- public bool ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public void AttackAnimation(Mobile from, Mobile to)
- {
- if (from.Body.IsHuman) from.Animate(from.Mounted ? 26 : 9, 7, 1, true, false, 0);
-
- from.PlaySound(0x23A);
- from.MovingEffect(to, 0x27AC, 1, 0, false, false);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
-
- if (m_Poison != null && m_PoisonCharges > 0)
- list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
- }
-
- public override bool OnEquip(Mobile from)
- {
- if (base.OnEquip(from))
- {
- from.SendLocalizedMessage(1070785); // Double click this item each time you wish to throw a shuriken.
- return true;
- }
-
- return false;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- NinjaWeapon.AttemptShoot((PlayerMobile)from, this);
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- if (IsChildOf(from))
- {
- list.Add(new NinjaWeapon.LoadEntry(this, 6222));
- list.Add(new NinjaWeapon.UnloadEntry(this, 6223));
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0);
-
- writer.Write(m_UsesRemaining);
-
- Poison.Serialize(m_Poison, writer);
- writer.Write(m_PoisonCharges);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
-
- m_Poison = Poison.Deserialize(reader);
- m_PoisonCharges = reader.ReadInt();
-
- break;
- }
- }
- }
- }
+using System;
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Mobiles;
+
+namespace Server.Items
+{
+ [Flippable(0x2790, 0x27DB)]
+ public class LeatherNinjaBelt : BaseWaist, IDyable, INinjaWeapon
+ {
+ private Poison m_Poison;
+ private int m_PoisonCharges;
+
+ private int m_UsesRemaining;
+
+ [Constructible]
+ public LeatherNinjaBelt() : base(0x2790)
+ {
+ Weight = 1.0;
+ Layer = Layer.Waist;
+ }
+
+ public LeatherNinjaBelt(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftResource DefaultResource => CraftResource.RegularLeather;
+
+ public virtual int WrongAmmoMessage => 1063301; // You can only place shuriken in a ninja belt.
+ public virtual int NoFreeHandMessage => 1063299; // You must have a free hand to throw shuriken.
+ public virtual int EmptyWeaponMessage => 1063297; // You have no shuriken in your ninja belt!
+ public virtual int RecentlyUsedMessage => 1063298; // You cannot throw another shuriken yet.
+ public virtual int FullWeaponMessage => 1063302; // You cannot add any more shuriken.
+
+ public virtual int WeaponMinRange => 2;
+ public virtual int WeaponMaxRange => 10;
+
+ public virtual int WeaponDamage => Utility.RandomMinMax(3, 5);
+
+ public virtual Type AmmoType => typeof(Shuriken);
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Poison Poison
+ {
+ get => m_Poison;
+ set
+ {
+ m_Poison = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int PoisonCharges
+ {
+ get => m_PoisonCharges;
+ set
+ {
+ m_PoisonCharges = value;
+ InvalidateProperties();
+ }
+ }
+
+ public bool ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public void AttackAnimation(Mobile from, Mobile to)
+ {
+ if (from.Body.IsHuman) from.Animate(from.Mounted ? 26 : 9, 7, 1, true, false, 0);
+
+ from.PlaySound(0x23A);
+ from.MovingEffect(to, 0x27AC, 1, 0, false, false);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+
+ if (m_Poison != null && m_PoisonCharges > 0)
+ list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
+ }
+
+ public override bool OnEquip(Mobile from)
+ {
+ if (base.OnEquip(from))
+ {
+ from.SendLocalizedMessage(1070785); // Double click this item each time you wish to throw a shuriken.
+ return true;
+ }
+
+ return false;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ NinjaWeapon.AttemptShoot((PlayerMobile)from, this);
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ if (IsChildOf(from))
+ {
+ list.Add(new NinjaWeapon.LoadEntry(this, 6222));
+ list.Add(new NinjaWeapon.UnloadEntry(this, 6223));
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0);
+
+ writer.Write(m_UsesRemaining);
+
+ Poison.Serialize(m_Poison, writer);
+ writer.Write(m_PoisonCharges);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+
+ m_Poison = Poison.Deserialize(reader);
+ m_PoisonCharges = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/NinjaWeapons.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/NinjaWeapons.cs
index ae918c16f..1147d9d48 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/NinjaWeapons.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/NinjaWeapons.cs
@@ -1,307 +1,307 @@
-using System;
-using Server.ContextMenus;
-using Server.Mobiles;
-using Server.SkillHandlers;
-using Server.Spells.Chivalry;
-using Server.Spells.Necromancy;
-using Server.Spells.Ninjitsu;
-using Server.Targeting;
-using Server.Utilities;
-
-/*
- * There really was no prettier way to do this, other than the one
- * suggestion to make a rigged baseninjaweapon class that bypasses its
- * own serialization, due to the way these weapons were originaly coded.
- */
-
-namespace Server.Items
-{
- public interface INinjaAmmo : IUsesRemaining
- {
- int PoisonCharges { get; set; }
- Poison Poison { get; set; }
- }
-
- public interface INinjaWeapon : IUsesRemaining
- {
- int NoFreeHandMessage { get; }
- int EmptyWeaponMessage { get; }
- int RecentlyUsedMessage { get; }
- int FullWeaponMessage { get; }
- int WrongAmmoMessage { get; }
- Type AmmoType { get; }
- int PoisonCharges { get; set; }
- Poison Poison { get; set; }
- int WeaponDamage { get; }
- int WeaponMinRange { get; }
- int WeaponMaxRange { get; }
-
- void AttackAnimation(Mobile from, Mobile to);
- }
-
- public class NinjaWeapon
- {
- private const int MaxUses = 10;
-
- public static void AttemptShoot(PlayerMobile from, INinjaWeapon weapon)
- {
- if (CanUseWeapon(from, weapon))
- from.BeginTarget(weapon.WeaponMaxRange, false, TargetFlags.Harmful, OnTarget, weapon);
- }
-
- private static void Shoot(PlayerMobile from, Mobile target, INinjaWeapon weapon)
- {
- if (from != target && CanUseWeapon(from, weapon) && from.CanBeHarmful(target))
- {
- if (weapon.WeaponMinRange == 0 || !from.InRange(target, weapon.WeaponMinRange))
- {
- from.NinjaWepCooldown = true;
-
- from.Direction = from.GetDirectionTo(target);
-
- from.RevealingAction();
-
- weapon.AttackAnimation(from, target);
-
- ConsumeUse(weapon);
-
- if (CombatCheck(from, target))
- Timer.DelayCall(TimeSpan.FromSeconds(1.0), OnHit, from, target, weapon);
-
- Timer.DelayCall(TimeSpan.FromSeconds(2.5), ResetUsing, from);
- }
- else
- {
- from.SendLocalizedMessage(1063303); // Your target is too close!
- }
- }
- }
-
- private static void ResetUsing(PlayerMobile from)
- {
- from.NinjaWepCooldown = false;
- }
-
- private static void Unload(Mobile from, INinjaWeapon weapon)
- {
- if (weapon.UsesRemaining > 0)
- {
- Item ammo = ActivatorUtil.CreateInstance(weapon.AmmoType, weapon.UsesRemaining) as Item;
-
- if (ammo is INinjaAmmo ninaAmmo)
- {
- ninaAmmo.Poison = weapon.Poison;
- ninaAmmo.PoisonCharges = weapon.PoisonCharges;
- }
-
- from.AddToBackpack(ammo);
-
- weapon.UsesRemaining = 0;
- weapon.PoisonCharges = 0;
- weapon.Poison = null;
- }
- }
-
- private static void Reload(PlayerMobile from, INinjaWeapon weapon, INinjaAmmo ammo)
- {
- if (weapon.UsesRemaining < MaxUses)
- {
- int need = Math.Min(MaxUses - weapon.UsesRemaining, ammo.UsesRemaining);
-
- if (need > 0)
- {
- if (weapon.Poison != null && (ammo.Poison == null || weapon.Poison.Level > ammo.Poison.Level))
- {
- from.SendLocalizedMessage(1070767); // Loaded projectile is stronger, unload it first
- }
- else
- {
- if (weapon.UsesRemaining > 0)
- if ((weapon.Poison == null && ammo.Poison != null)
- || (weapon.Poison != null && ammo.Poison != null && weapon.Poison.Level != ammo.Poison.Level))
- {
- Unload(from, weapon);
- need = Math.Min(MaxUses, ammo.UsesRemaining);
- }
-
- int poisonneeded = Math.Min(MaxUses - weapon.PoisonCharges, ammo.PoisonCharges);
-
- weapon.UsesRemaining += need;
- weapon.PoisonCharges += poisonneeded;
-
- if (weapon.PoisonCharges > 0) weapon.Poison = ammo.Poison;
-
- ammo.PoisonCharges -= poisonneeded;
- ammo.UsesRemaining -= need;
-
- if (ammo.UsesRemaining < 1)
- ((Item)ammo).Delete();
- else if (ammo.PoisonCharges < 1) ammo.Poison = null;
- }
- } // "else" here would mean they targeted "ammo" with 0 uses. undefined behavior.
- }
- else
- {
- from.SendLocalizedMessage(weapon.FullWeaponMessage);
- }
- }
-
- private static void ConsumeUse(INinjaWeapon weapon)
- {
- if (weapon.UsesRemaining > 0)
- {
- weapon.UsesRemaining--;
-
- if (weapon.UsesRemaining < 1)
- {
- weapon.PoisonCharges = 0;
- weapon.Poison = null;
- }
- }
- }
-
- private static bool CanUseWeapon(PlayerMobile from, INinjaWeapon weapon)
- {
- if (WeaponIsValid(weapon, from))
- {
- if (weapon.UsesRemaining > 0)
- {
- if (!from.NinjaWepCooldown)
- {
- if (BasePotion.HasFreeHand(from)) return true;
-
- from.SendLocalizedMessage(weapon.NoFreeHandMessage);
- }
- else
- {
- from.SendLocalizedMessage(weapon.RecentlyUsedMessage);
- }
- }
- else
- {
- from.SendLocalizedMessage(weapon.EmptyWeaponMessage);
- }
- }
-
- return false;
- }
-
- private static bool CombatCheck(Mobile attacker, Mobile defender) /* mod'd from baseweapon */
- {
- BaseWeapon defWeapon = defender.Weapon as BaseWeapon;
-
- Skill atkSkill = defender.Skills.Ninjitsu;
- // Skill defSkill = defender.Skills[defWeapon.Skill];
-
- double atSkillValue = attacker.Skills.Ninjitsu.Value;
- double defSkillValue = defWeapon?.GetDefendSkillValue(attacker, defender) ?? 0.0;
-
- if (defSkillValue <= -20.0) defSkillValue = -19.9;
-
- double attackValue = AosAttributes.GetValue(attacker, AosAttribute.AttackChance);
-
- if (DivineFurySpell.UnderEffect(attacker)) attackValue += 10;
-
- if (AnimalForm.UnderTransformation(attacker, typeof(GreyWolf)) ||
- AnimalForm.UnderTransformation(attacker, typeof(BakeKitsune))) attackValue += 20;
-
- if (HitLower.IsUnderAttackEffect(attacker)) attackValue -= 25;
-
- if (attackValue > 45) attackValue = 45;
-
- attackValue = (atSkillValue + 20.0) * (100 + attackValue);
-
- double defenseValue = AosAttributes.GetValue(defender, AosAttribute.DefendChance);
-
- if (DivineFurySpell.UnderEffect(defender)) defenseValue -= 20;
-
- if (HitLower.IsUnderDefenseEffect(defender)) defenseValue -= 25;
-
- int refBonus = 0;
-
- if (Block.GetBonus(defender, ref refBonus)) defenseValue += refBonus;
-
- if (Discordance.GetEffect(attacker, ref refBonus)) defenseValue -= refBonus;
-
- if (defenseValue > 45) defenseValue = 45;
-
- defenseValue = (defSkillValue + 20.0) * (100 + defenseValue);
-
- double chance = attackValue / (defenseValue * 2.0);
-
- if (chance < 0.02) chance = 0.02;
-
- return attacker.CheckSkill(atkSkill.SkillName, chance);
- }
-
- private static void OnHit(Mobile from, Mobile target, INinjaWeapon weapon)
- {
- if (!from.CanBeHarmful(target))
- return;
- from.DoHarmful(target);
-
- AOS.Damage(target, from, weapon.WeaponDamage, 100, 0, 0, 0, 0);
-
- if (weapon.Poison != null && weapon.PoisonCharges > 0)
- {
- if (EvilOmenSpell.TryEndEffect(target))
- target.ApplyPoison(from, Poison.GetPoison(weapon.Poison.Level + 1));
- else
- target.ApplyPoison(from, weapon.Poison);
-
- weapon.PoisonCharges--;
-
- if (weapon.PoisonCharges < 1) weapon.Poison = null;
- }
- }
-
- private static void OnTarget(Mobile from, object targeted, INinjaWeapon weapon)
- {
- if (from is PlayerMobile player && WeaponIsValid(weapon, from))
- {
- if (targeted is Mobile mobile)
- Shoot(player, mobile, weapon);
- else if (targeted.GetType() == weapon.AmmoType)
- Reload(player, weapon, (INinjaAmmo)targeted);
- else
- player.SendLocalizedMessage(weapon.WrongAmmoMessage);
- }
- }
-
- private static bool WeaponIsValid(INinjaWeapon weapon, Mobile from) =>
- weapon is Item item && !item.Deleted && item.RootParent == from;
-
- public class LoadEntry : ContextMenuEntry
- {
- private readonly INinjaWeapon weapon;
-
- public LoadEntry(INinjaWeapon wep, int entry)
- : base(entry, 0) =>
- weapon = wep;
-
- public override void OnClick()
- {
- if (WeaponIsValid(weapon, Owner.From))
- Owner.From.BeginTarget(10, false, TargetFlags.Harmful, OnTarget, weapon);
- }
- }
-
- public class UnloadEntry : ContextMenuEntry
- {
- private readonly INinjaWeapon weapon;
-
- public UnloadEntry(INinjaWeapon wep, int entry)
- : base(entry, 0)
- {
- weapon = wep;
-
- Enabled = weapon.UsesRemaining > 0;
- }
-
- public override void OnClick()
- {
- if (WeaponIsValid(weapon, Owner.From)) Unload(Owner.From, weapon);
- }
- }
- }
-}
+using System;
+using Server.ContextMenus;
+using Server.Mobiles;
+using Server.SkillHandlers;
+using Server.Spells.Chivalry;
+using Server.Spells.Necromancy;
+using Server.Spells.Ninjitsu;
+using Server.Targeting;
+using Server.Utilities;
+
+/*
+ * There really was no prettier way to do this, other than the one
+ * suggestion to make a rigged baseninjaweapon class that bypasses its
+ * own serialization, due to the way these weapons were originaly coded.
+ */
+
+namespace Server.Items
+{
+ public interface INinjaAmmo : IUsesRemaining
+ {
+ int PoisonCharges { get; set; }
+ Poison Poison { get; set; }
+ }
+
+ public interface INinjaWeapon : IUsesRemaining
+ {
+ int NoFreeHandMessage { get; }
+ int EmptyWeaponMessage { get; }
+ int RecentlyUsedMessage { get; }
+ int FullWeaponMessage { get; }
+ int WrongAmmoMessage { get; }
+ Type AmmoType { get; }
+ int PoisonCharges { get; set; }
+ Poison Poison { get; set; }
+ int WeaponDamage { get; }
+ int WeaponMinRange { get; }
+ int WeaponMaxRange { get; }
+
+ void AttackAnimation(Mobile from, Mobile to);
+ }
+
+ public class NinjaWeapon
+ {
+ private const int MaxUses = 10;
+
+ public static void AttemptShoot(PlayerMobile from, INinjaWeapon weapon)
+ {
+ if (CanUseWeapon(from, weapon))
+ from.BeginTarget(weapon.WeaponMaxRange, false, TargetFlags.Harmful, OnTarget, weapon);
+ }
+
+ private static void Shoot(PlayerMobile from, Mobile target, INinjaWeapon weapon)
+ {
+ if (from != target && CanUseWeapon(from, weapon) && from.CanBeHarmful(target))
+ {
+ if (weapon.WeaponMinRange == 0 || !from.InRange(target, weapon.WeaponMinRange))
+ {
+ from.NinjaWepCooldown = true;
+
+ from.Direction = from.GetDirectionTo(target);
+
+ from.RevealingAction();
+
+ weapon.AttackAnimation(from, target);
+
+ ConsumeUse(weapon);
+
+ if (CombatCheck(from, target))
+ Timer.DelayCall(TimeSpan.FromSeconds(1.0), OnHit, from, target, weapon);
+
+ Timer.DelayCall(TimeSpan.FromSeconds(2.5), ResetUsing, from);
+ }
+ else
+ {
+ from.SendLocalizedMessage(1063303); // Your target is too close!
+ }
+ }
+ }
+
+ private static void ResetUsing(PlayerMobile from)
+ {
+ from.NinjaWepCooldown = false;
+ }
+
+ private static void Unload(Mobile from, INinjaWeapon weapon)
+ {
+ if (weapon.UsesRemaining > 0)
+ {
+ Item ammo = ActivatorUtil.CreateInstance(weapon.AmmoType, weapon.UsesRemaining) as Item;
+
+ if (ammo is INinjaAmmo ninaAmmo)
+ {
+ ninaAmmo.Poison = weapon.Poison;
+ ninaAmmo.PoisonCharges = weapon.PoisonCharges;
+ }
+
+ from.AddToBackpack(ammo);
+
+ weapon.UsesRemaining = 0;
+ weapon.PoisonCharges = 0;
+ weapon.Poison = null;
+ }
+ }
+
+ private static void Reload(PlayerMobile from, INinjaWeapon weapon, INinjaAmmo ammo)
+ {
+ if (weapon.UsesRemaining < MaxUses)
+ {
+ int need = Math.Min(MaxUses - weapon.UsesRemaining, ammo.UsesRemaining);
+
+ if (need > 0)
+ {
+ if (weapon.Poison != null && (ammo.Poison == null || weapon.Poison.Level > ammo.Poison.Level))
+ {
+ from.SendLocalizedMessage(1070767); // Loaded projectile is stronger, unload it first
+ }
+ else
+ {
+ if (weapon.UsesRemaining > 0)
+ if ((weapon.Poison == null && ammo.Poison != null)
+ || (weapon.Poison != null && ammo.Poison != null && weapon.Poison.Level != ammo.Poison.Level))
+ {
+ Unload(from, weapon);
+ need = Math.Min(MaxUses, ammo.UsesRemaining);
+ }
+
+ int poisonneeded = Math.Min(MaxUses - weapon.PoisonCharges, ammo.PoisonCharges);
+
+ weapon.UsesRemaining += need;
+ weapon.PoisonCharges += poisonneeded;
+
+ if (weapon.PoisonCharges > 0) weapon.Poison = ammo.Poison;
+
+ ammo.PoisonCharges -= poisonneeded;
+ ammo.UsesRemaining -= need;
+
+ if (ammo.UsesRemaining < 1)
+ ((Item)ammo).Delete();
+ else if (ammo.PoisonCharges < 1) ammo.Poison = null;
+ }
+ } // "else" here would mean they targeted "ammo" with 0 uses. undefined behavior.
+ }
+ else
+ {
+ from.SendLocalizedMessage(weapon.FullWeaponMessage);
+ }
+ }
+
+ private static void ConsumeUse(INinjaWeapon weapon)
+ {
+ if (weapon.UsesRemaining > 0)
+ {
+ weapon.UsesRemaining--;
+
+ if (weapon.UsesRemaining < 1)
+ {
+ weapon.PoisonCharges = 0;
+ weapon.Poison = null;
+ }
+ }
+ }
+
+ private static bool CanUseWeapon(PlayerMobile from, INinjaWeapon weapon)
+ {
+ if (WeaponIsValid(weapon, from))
+ {
+ if (weapon.UsesRemaining > 0)
+ {
+ if (!from.NinjaWepCooldown)
+ {
+ if (BasePotion.HasFreeHand(from)) return true;
+
+ from.SendLocalizedMessage(weapon.NoFreeHandMessage);
+ }
+ else
+ {
+ from.SendLocalizedMessage(weapon.RecentlyUsedMessage);
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(weapon.EmptyWeaponMessage);
+ }
+ }
+
+ return false;
+ }
+
+ private static bool CombatCheck(Mobile attacker, Mobile defender) /* mod'd from baseweapon */
+ {
+ BaseWeapon defWeapon = defender.Weapon as BaseWeapon;
+
+ Skill atkSkill = defender.Skills.Ninjitsu;
+ // Skill defSkill = defender.Skills[defWeapon.Skill];
+
+ double atSkillValue = attacker.Skills.Ninjitsu.Value;
+ double defSkillValue = defWeapon?.GetDefendSkillValue(attacker, defender) ?? 0.0;
+
+ if (defSkillValue <= -20.0) defSkillValue = -19.9;
+
+ double attackValue = AosAttributes.GetValue(attacker, AosAttribute.AttackChance);
+
+ if (DivineFurySpell.UnderEffect(attacker)) attackValue += 10;
+
+ if (AnimalForm.UnderTransformation(attacker, typeof(GreyWolf)) ||
+ AnimalForm.UnderTransformation(attacker, typeof(BakeKitsune))) attackValue += 20;
+
+ if (HitLower.IsUnderAttackEffect(attacker)) attackValue -= 25;
+
+ if (attackValue > 45) attackValue = 45;
+
+ attackValue = (atSkillValue + 20.0) * (100 + attackValue);
+
+ double defenseValue = AosAttributes.GetValue(defender, AosAttribute.DefendChance);
+
+ if (DivineFurySpell.UnderEffect(defender)) defenseValue -= 20;
+
+ if (HitLower.IsUnderDefenseEffect(defender)) defenseValue -= 25;
+
+ int refBonus = 0;
+
+ if (Block.GetBonus(defender, ref refBonus)) defenseValue += refBonus;
+
+ if (Discordance.GetEffect(attacker, ref refBonus)) defenseValue -= refBonus;
+
+ if (defenseValue > 45) defenseValue = 45;
+
+ defenseValue = (defSkillValue + 20.0) * (100 + defenseValue);
+
+ double chance = attackValue / (defenseValue * 2.0);
+
+ if (chance < 0.02) chance = 0.02;
+
+ return attacker.CheckSkill(atkSkill.SkillName, chance);
+ }
+
+ private static void OnHit(Mobile from, Mobile target, INinjaWeapon weapon)
+ {
+ if (!from.CanBeHarmful(target))
+ return;
+ from.DoHarmful(target);
+
+ AOS.Damage(target, from, weapon.WeaponDamage, 100, 0, 0, 0, 0);
+
+ if (weapon.Poison != null && weapon.PoisonCharges > 0)
+ {
+ if (EvilOmenSpell.TryEndEffect(target))
+ target.ApplyPoison(from, Poison.GetPoison(weapon.Poison.Level + 1));
+ else
+ target.ApplyPoison(from, weapon.Poison);
+
+ weapon.PoisonCharges--;
+
+ if (weapon.PoisonCharges < 1) weapon.Poison = null;
+ }
+ }
+
+ private static void OnTarget(Mobile from, object targeted, INinjaWeapon weapon)
+ {
+ if (from is PlayerMobile player && WeaponIsValid(weapon, from))
+ {
+ if (targeted is Mobile mobile)
+ Shoot(player, mobile, weapon);
+ else if (targeted.GetType() == weapon.AmmoType)
+ Reload(player, weapon, (INinjaAmmo)targeted);
+ else
+ player.SendLocalizedMessage(weapon.WrongAmmoMessage);
+ }
+ }
+
+ private static bool WeaponIsValid(INinjaWeapon weapon, Mobile from) =>
+ weapon is Item item && !item.Deleted && item.RootParent == from;
+
+ public class LoadEntry : ContextMenuEntry
+ {
+ private readonly INinjaWeapon weapon;
+
+ public LoadEntry(INinjaWeapon wep, int entry)
+ : base(entry, 0) =>
+ weapon = wep;
+
+ public override void OnClick()
+ {
+ if (WeaponIsValid(weapon, Owner.From))
+ Owner.From.BeginTarget(10, false, TargetFlags.Harmful, OnTarget, weapon);
+ }
+ }
+
+ public class UnloadEntry : ContextMenuEntry
+ {
+ private readonly INinjaWeapon weapon;
+
+ public UnloadEntry(INinjaWeapon wep, int entry)
+ : base(entry, 0)
+ {
+ weapon = wep;
+
+ Enabled = weapon.UsesRemaining > 0;
+ }
+
+ public override void OnClick()
+ {
+ if (WeaponIsValid(weapon, Owner.From)) Unload(Owner.From, weapon);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/Shuriken.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/Shuriken.cs
index 38654d935..3b64a3d28 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/Shuriken.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/Shuriken.cs
@@ -1,115 +1,115 @@
-using System;
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x27AC, 0x27F7)]
- public class Shuriken : Item, ICraftable, INinjaAmmo
- {
- private Poison m_Poison;
- private int m_PoisonCharges;
- private int m_UsesRemaining;
-
- [Constructible]
- public Shuriken(int amount = 1) : base(0x27AC)
- {
- Weight = 1.0;
-
- m_UsesRemaining = amount;
- }
-
- public Shuriken(Serial serial) : base(serial)
- {
- }
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- if (quality == 2)
- UsesRemaining *= 2;
-
- return quality;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Poison Poison
- {
- get => m_Poison;
- set
- {
- m_Poison = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int PoisonCharges
- {
- get => m_PoisonCharges;
- set
- {
- m_PoisonCharges = value;
- InvalidateProperties();
- }
- }
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
-
- if (m_Poison != null && m_PoisonCharges > 0)
- list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_UsesRemaining);
-
- Poison.Serialize(m_Poison, writer);
- writer.Write(m_PoisonCharges);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
-
- m_Poison = Poison.Deserialize(reader);
- m_PoisonCharges = reader.ReadInt();
-
- break;
- }
- }
- }
- }
-}
+using System;
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x27AC, 0x27F7)]
+ public class Shuriken : Item, ICraftable, INinjaAmmo
+ {
+ private Poison m_Poison;
+ private int m_PoisonCharges;
+ private int m_UsesRemaining;
+
+ [Constructible]
+ public Shuriken(int amount = 1) : base(0x27AC)
+ {
+ Weight = 1.0;
+
+ m_UsesRemaining = amount;
+ }
+
+ public Shuriken(Serial serial) : base(serial)
+ {
+ }
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ if (quality == 2)
+ UsesRemaining *= 2;
+
+ return quality;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Poison Poison
+ {
+ get => m_Poison;
+ set
+ {
+ m_Poison = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int PoisonCharges
+ {
+ get => m_PoisonCharges;
+ set
+ {
+ m_PoisonCharges = value;
+ InvalidateProperties();
+ }
+ }
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+
+ if (m_Poison != null && m_PoisonCharges > 0)
+ list.Add(1062412 + m_Poison.Level, m_PoisonCharges.ToString());
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_UsesRemaining);
+
+ Poison.Serialize(m_Poison, writer);
+ writer.Write(m_PoisonCharges);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+
+ m_Poison = Poison.Deserialize(reader);
+ m_PoisonCharges = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Ninjitsu/SmokeBomb.cs b/Projects/UOContent/Items/Skill Items/Ninjitsu/SmokeBomb.cs
index 64467b868..e389ce942 100644
--- a/Projects/UOContent/Items/Skill Items/Ninjitsu/SmokeBomb.cs
+++ b/Projects/UOContent/Items/Skill Items/Ninjitsu/SmokeBomb.cs
@@ -1,72 +1,72 @@
-using Server.SkillHandlers;
-
-namespace Server.Items
-{
- public class SmokeBomb : Item
- {
- [Constructible]
- public SmokeBomb() : base(0x2808)
- {
- Stackable = Core.ML;
- Weight = 1.0;
- }
-
- public SmokeBomb(Serial serial) : base(serial)
- {
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!IsChildOf(from.Backpack))
- {
- // The item must be in your backpack to use it.
- from.SendLocalizedMessage(1060640);
- }
- else if (from.Skills.Ninjitsu.Value < 50.0)
- {
- // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
- from.SendLocalizedMessage(1063013, "50\tNinjitsu");
- }
- else if (Core.TickCount - from.NextSkillTime < 0)
- {
- // You must wait a few seconds before you can use that item.
- from.SendLocalizedMessage(1070772);
- }
- else if (from.Mana < 10)
- {
- // You don't have enough mana to do that.
- from.SendLocalizedMessage(1049456);
- }
- else
- {
- Hiding.CombatOverride = true;
-
- if (from.UseSkill(SkillName.Hiding))
- {
- from.Mana -= 10;
-
- from.FixedParticles(0x3709, 1, 30, 9904, 1108, 6, EffectLayer.RightFoot);
- from.PlaySound(0x22F);
-
- Consume();
- }
-
- Hiding.CombatOverride = false;
- }
- }
-
- 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();
- }
- }
+using Server.SkillHandlers;
+
+namespace Server.Items
+{
+ public class SmokeBomb : Item
+ {
+ [Constructible]
+ public SmokeBomb() : base(0x2808)
+ {
+ Stackable = Core.ML;
+ Weight = 1.0;
+ }
+
+ public SmokeBomb(Serial serial) : base(serial)
+ {
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!IsChildOf(from.Backpack))
+ {
+ // The item must be in your backpack to use it.
+ from.SendLocalizedMessage(1060640);
+ }
+ else if (from.Skills.Ninjitsu.Value < 50.0)
+ {
+ // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
+ from.SendLocalizedMessage(1063013, "50\tNinjitsu");
+ }
+ else if (Core.TickCount - from.NextSkillTime < 0)
+ {
+ // You must wait a few seconds before you can use that item.
+ from.SendLocalizedMessage(1070772);
+ }
+ else if (from.Mana < 10)
+ {
+ // You don't have enough mana to do that.
+ from.SendLocalizedMessage(1049456);
+ }
+ else
+ {
+ Hiding.CombatOverride = true;
+
+ if (from.UseSkill(SkillName.Hiding))
+ {
+ from.Mana -= 10;
+
+ from.FixedParticles(0x3709, 1, 30, 9904, 1108, 6, EffectLayer.RightFoot);
+ from.PlaySound(0x22F);
+
+ Consume();
+ }
+
+ Hiding.CombatOverride = false;
+ }
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Specialized/GlassblowingBook.cs b/Projects/UOContent/Items/Skill Items/Specialized/GlassblowingBook.cs
index b9dfcf5a0..adb7895aa 100644
--- a/Projects/UOContent/Items/Skill Items/Specialized/GlassblowingBook.cs
+++ b/Projects/UOContent/Items/Skill Items/Specialized/GlassblowingBook.cs
@@ -1,55 +1,55 @@
-using Server.Mobiles;
-
-namespace Server.Items
-{
- public class GlassblowingBook : Item
- {
- [Constructible]
- public GlassblowingBook() : base(0xFF4) => Weight = 1.0;
-
- public GlassblowingBook(Serial serial) : base(serial)
- {
- }
-
- public override string DefaultName => "Crafting Glass With Glassblowing";
-
- 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)
- {
- PlayerMobile pm = from as PlayerMobile;
-
- if (!IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- else if (pm == null || from.Skills.Alchemy.Base < 100.0)
- {
- pm.SendMessage("Only a Grandmaster Alchemist can learn from this book.");
- }
- else if (pm.Glassblowing)
- {
- pm.SendMessage("You have already learned this information.");
- }
- else
- {
- pm.Glassblowing = true;
- pm.SendMessage(
- "You have learned to make items from glass. You will need to find miners to mine find sand for you to make these items.");
- Delete();
- }
- }
- }
+using Server.Mobiles;
+
+namespace Server.Items
+{
+ public class GlassblowingBook : Item
+ {
+ [Constructible]
+ public GlassblowingBook() : base(0xFF4) => Weight = 1.0;
+
+ public GlassblowingBook(Serial serial) : base(serial)
+ {
+ }
+
+ public override string DefaultName => "Crafting Glass With Glassblowing";
+
+ 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)
+ {
+ PlayerMobile pm = from as PlayerMobile;
+
+ if (!IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ else if (pm == null || from.Skills.Alchemy.Base < 100.0)
+ {
+ pm.SendMessage("Only a Grandmaster Alchemist can learn from this book.");
+ }
+ else if (pm.Glassblowing)
+ {
+ pm.SendMessage("You have already learned this information.");
+ }
+ else
+ {
+ pm.Glassblowing = true;
+ pm.SendMessage(
+ "You have learned to make items from glass. You will need to find miners to mine find sand for you to make these items.");
+ Delete();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Specialized/MasonryBook.cs b/Projects/UOContent/Items/Skill Items/Specialized/MasonryBook.cs
index 3162530c8..45e1db6b5 100644
--- a/Projects/UOContent/Items/Skill Items/Specialized/MasonryBook.cs
+++ b/Projects/UOContent/Items/Skill Items/Specialized/MasonryBook.cs
@@ -1,55 +1,55 @@
-using Server.Mobiles;
-
-namespace Server.Items
-{
- public class MasonryBook : Item
- {
- [Constructible]
- public MasonryBook() : base(0xFBE) => Weight = 1.0;
-
- public MasonryBook(Serial serial) : base(serial)
- {
- }
-
- public override string DefaultName => "Making Valuables With Stonecrafting";
-
- 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)
- {
- PlayerMobile pm = from as PlayerMobile;
-
- if (!IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- else if (pm == null || from.Skills.Carpentry.Base < 100.0)
- {
- pm.SendMessage("Only a Grandmaster Carpenter can learn from this book.");
- }
- else if (pm.Masonry)
- {
- pm.SendMessage("You have already learned this information.");
- }
- else
- {
- pm.Masonry = true;
- pm.SendMessage(
- "You have learned to make items from stone. You will need miners to gather stones for you to make these items.");
- Delete();
- }
- }
- }
+using Server.Mobiles;
+
+namespace Server.Items
+{
+ public class MasonryBook : Item
+ {
+ [Constructible]
+ public MasonryBook() : base(0xFBE) => Weight = 1.0;
+
+ public MasonryBook(Serial serial) : base(serial)
+ {
+ }
+
+ public override string DefaultName => "Making Valuables With Stonecrafting";
+
+ 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)
+ {
+ PlayerMobile pm = from as PlayerMobile;
+
+ if (!IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ else if (pm == null || from.Skills.Carpentry.Base < 100.0)
+ {
+ pm.SendMessage("Only a Grandmaster Carpenter can learn from this book.");
+ }
+ else if (pm.Masonry)
+ {
+ pm.SendMessage("You have already learned this information.");
+ }
+ else
+ {
+ pm.Masonry = true;
+ pm.SendMessage(
+ "You have learned to make items from stone. You will need miners to gather stones for you to make these items.");
+ Delete();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Specialized/Sand.cs b/Projects/UOContent/Items/Skill Items/Specialized/Sand.cs
index 739861055..45250ff2b 100644
--- a/Projects/UOContent/Items/Skill Items/Specialized/Sand.cs
+++ b/Projects/UOContent/Items/Skill Items/Specialized/Sand.cs
@@ -1,38 +1,38 @@
-namespace Server.Items
-{
- [Flippable(0x11EA, 0x11EB)]
- public class Sand : Item, ICommodity
- {
- [Constructible]
- public Sand(int amount = 1) : base(0x11EA)
- {
- Stackable = Core.ML;
- Weight = 1.0;
- }
-
- public Sand(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1044626; // sand
- int ICommodity.DescriptionNumber => LabelNumber;
- bool ICommodity.IsDeedable => true;
-
- 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 == 0 && Name == "sand")
- Name = null;
- }
- }
-}
+namespace Server.Items
+{
+ [Flippable(0x11EA, 0x11EB)]
+ public class Sand : Item, ICommodity
+ {
+ [Constructible]
+ public Sand(int amount = 1) : base(0x11EA)
+ {
+ Stackable = Core.ML;
+ Weight = 1.0;
+ }
+
+ public Sand(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1044626; // sand
+ int ICommodity.DescriptionNumber => LabelNumber;
+ bool ICommodity.IsDeedable => true;
+
+ 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 == 0 && Name == "sand")
+ Name = null;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Specialized/SandMiningBook.cs b/Projects/UOContent/Items/Skill Items/Specialized/SandMiningBook.cs
index 5f9b84b7d..c7e473886 100644
--- a/Projects/UOContent/Items/Skill Items/Specialized/SandMiningBook.cs
+++ b/Projects/UOContent/Items/Skill Items/Specialized/SandMiningBook.cs
@@ -1,55 +1,55 @@
-using Server.Mobiles;
-
-namespace Server.Items
-{
- public class SandMiningBook : Item
- {
- [Constructible]
- public SandMiningBook() : base(0xFF4) => Weight = 1.0;
-
- public SandMiningBook(Serial serial) : base(serial)
- {
- }
-
- public override string DefaultName => "Find Glass-Quality Sand";
-
- 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)
- {
- PlayerMobile pm = from as PlayerMobile;
-
- if (!IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- else if (pm == null || from.Skills.Mining.Base < 100.0)
- {
- pm.SendMessage("Only a Grandmaster Miner can learn from this book.");
- }
- else if (pm.SandMining)
- {
- pm.SendMessage("You have already learned this information.");
- }
- else
- {
- pm.SandMining = true;
- pm.SendMessage(
- "You have learned how to mine fine sand. Target sand areas when mining to look for fine sand.");
- Delete();
- }
- }
- }
+using Server.Mobiles;
+
+namespace Server.Items
+{
+ public class SandMiningBook : Item
+ {
+ [Constructible]
+ public SandMiningBook() : base(0xFF4) => Weight = 1.0;
+
+ public SandMiningBook(Serial serial) : base(serial)
+ {
+ }
+
+ public override string DefaultName => "Find Glass-Quality Sand";
+
+ 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)
+ {
+ PlayerMobile pm = from as PlayerMobile;
+
+ if (!IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ else if (pm == null || from.Skills.Mining.Base < 100.0)
+ {
+ pm.SendMessage("Only a Grandmaster Miner can learn from this book.");
+ }
+ else if (pm.SandMining)
+ {
+ pm.SendMessage("You have already learned this information.");
+ }
+ else
+ {
+ pm.SandMining = true;
+ pm.SendMessage(
+ "You have learned how to mine fine sand. Target sand areas when mining to look for fine sand.");
+ Delete();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Specialized/StoneMiningBook.cs b/Projects/UOContent/Items/Skill Items/Specialized/StoneMiningBook.cs
index 7eaf4bcdd..1a5e33fe2 100644
--- a/Projects/UOContent/Items/Skill Items/Specialized/StoneMiningBook.cs
+++ b/Projects/UOContent/Items/Skill Items/Specialized/StoneMiningBook.cs
@@ -1,54 +1,54 @@
-using Server.Mobiles;
-
-namespace Server.Items
-{
- public class StoneMiningBook : Item
- {
- [Constructible]
- public StoneMiningBook() : base(0xFBE) => Weight = 1.0;
-
- public StoneMiningBook(Serial serial) : base(serial)
- {
- }
-
- public override string DefaultName => "Mining For Quality Stone";
-
- 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)
- {
- PlayerMobile pm = from as PlayerMobile;
-
- if (!IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- else if (pm == null || from.Skills.Mining.Base < 100.0)
- {
- from.SendMessage("Only a Grandmaster Miner can learn from this book.");
- }
- else if (pm.StoneMining)
- {
- pm.SendMessage("You have already learned this knowledge.");
- }
- else
- {
- pm.StoneMining = true;
- pm.SendMessage("You have learned to mine for stones. Target mountains when mining to find stones.");
- Delete();
- }
- }
- }
+using Server.Mobiles;
+
+namespace Server.Items
+{
+ public class StoneMiningBook : Item
+ {
+ [Constructible]
+ public StoneMiningBook() : base(0xFBE) => Weight = 1.0;
+
+ public StoneMiningBook(Serial serial) : base(serial)
+ {
+ }
+
+ public override string DefaultName => "Mining For Quality Stone";
+
+ 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)
+ {
+ PlayerMobile pm = from as PlayerMobile;
+
+ if (!IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ else if (pm == null || from.Skills.Mining.Base < 100.0)
+ {
+ from.SendMessage("Only a Grandmaster Miner can learn from this book.");
+ }
+ else if (pm.StoneMining)
+ {
+ pm.SendMessage("You have already learned this knowledge.");
+ }
+ else
+ {
+ pm.StoneMining = true;
+ pm.SendMessage("You have learned to mine for stones. Target mountains when mining to find stones.");
+ Delete();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlackDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlackDyeTub.cs
index 8017ca080..91e0316a5 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlackDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlackDyeTub.cs
@@ -1,30 +1,30 @@
-namespace Server.Items
-{
- public class BlackDyeTub : DyeTub
- {
- [Constructible]
- public BlackDyeTub()
- {
- Hue = DyedHue = 0x0001;
- Redyable = false;
- }
-
- public BlackDyeTub(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 BlackDyeTub : DyeTub
+ {
+ [Constructible]
+ public BlackDyeTub()
+ {
+ Hue = DyedHue = 0x0001;
+ Redyable = false;
+ }
+
+ public BlackDyeTub(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlazeDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlazeDyeTub.cs
index a81357dfa..edfeaa418 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlazeDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/BlazeDyeTub.cs
@@ -1,30 +1,30 @@
-namespace Server.Items
-{
- public class BlazeDyeTub : DyeTub
- {
- [Constructible]
- public BlazeDyeTub()
- {
- Hue = DyedHue = 0x489;
- Redyable = false;
- }
-
- public BlazeDyeTub(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 BlazeDyeTub : DyeTub
+ {
+ [Constructible]
+ public BlazeDyeTub()
+ {
+ Hue = DyedHue = 0x489;
+ Redyable = false;
+ }
+
+ public BlazeDyeTub(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/CustomHuePicker.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/CustomHuePicker.cs
index 37e7bb7c1..310120ff0 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/CustomHuePicker.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/CustomHuePicker.cs
@@ -1,214 +1,214 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class CustomHueGroup
- {
- public CustomHueGroup(int name, int[] hues)
- {
- Name = name;
- Hues = hues;
- }
-
- public CustomHueGroup(string name, int[] hues)
- {
- NameString = name;
- Hues = hues;
- }
-
- public int Name { get; }
-
- public string NameString { get; }
-
- public int[] Hues { get; }
- }
-
- public class CustomHuePicker
- {
- public static readonly CustomHuePicker SpecialDyeTub = new CustomHuePicker(new[]
- {
- /* Violet */
- new CustomHueGroup(1018345, new[] { 1230, 1231, 1232, 1233, 1234, 1235 }),
- /* Tan */
- new CustomHueGroup(1018346, new[] { 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508 }),
- /* Brown */
- new CustomHueGroup(1018347, new[] { 2012, 2013, 2014, 2015, 2016, 2017 }),
- /* Dark Blue */
- new CustomHueGroup(1018348, new[] { 1303, 1304, 1305, 1306, 1307, 1308 }),
- /* Forest Green */
- new CustomHueGroup(1018349, new[] { 1420, 1421, 1422, 1423, 1424, 1425, 1426 }),
- /* Pink */
- new CustomHueGroup(1018350, new[] { 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626 }),
- /* Red */
- new CustomHueGroup(1018351, new[] { 1640, 1641, 1642, 1643, 1644 }),
- /* Olive */
- new CustomHueGroup(1018352, new[] { 2001, 2002, 2003, 2004, 2005 })
- }, false, 1018344);
-
- public static readonly CustomHuePicker LeatherDyeTub = new CustomHuePicker(new[]
- {
- /* Dull Copper */
- new CustomHueGroup(1018332, new[] { 2419, 2420, 2421, 2422, 2423, 2424 }),
- /* Shadow Iron */
- new CustomHueGroup(1018333, new[] { 2406, 2407, 2408, 2409, 2410, 2411, 2412 }),
- /* Copper */
- new CustomHueGroup(1018334, new[] { 2413, 2414, 2415, 2416, 2417, 2418 }),
- /* Bronze */
- new CustomHueGroup(1018335, new[] { 2414, 2415, 2416, 2417, 2418 }),
- /* Glden */
- new CustomHueGroup(1018336, new[] { 2213, 2214, 2215, 2216, 2217, 2218 }),
- /* Agapite */
- new CustomHueGroup(1018337, new[] { 2425, 2426, 2427, 2428, 2429, 2430 }),
- /* Verite */
- new CustomHueGroup(1018338, new[] { 2207, 2208, 2209, 2210, 2211, 2212 }),
- /* Valorite */
- new CustomHueGroup(1018339, new[] { 2219, 2220, 2221, 2222, 2223, 2224 }),
- /* Reds */
- new CustomHueGroup(1018340, new[] { 2113, 2114, 2115, 2116, 2117, 2118 }),
- /* Blues */
- new CustomHueGroup(1018341, new[] { 2119, 2120, 2121, 2122, 2123, 2124 }),
- /* Greens */
- new CustomHueGroup(1018342, new[] { 2126, 2127, 2128, 2129, 2130 }),
- /* Yellows */
- new CustomHueGroup(1018343, new[] { 2213, 2214, 2215, 2216, 2217, 2218 })
- }, true);
-
- public CustomHuePicker(CustomHueGroup[] groups, bool defaultSupported)
- {
- Groups = groups;
- DefaultSupported = defaultSupported;
- }
-
- public CustomHuePicker(CustomHueGroup[] groups, bool defaultSupported, int title)
- {
- Groups = groups;
- DefaultSupported = defaultSupported;
- Title = title;
- }
-
- public CustomHuePicker(CustomHueGroup[] groups, bool defaultSupported, string title)
- {
- Groups = groups;
- DefaultSupported = defaultSupported;
- TitleString = title;
- }
-
- public bool DefaultSupported { get; }
-
- public CustomHueGroup[] Groups { get; }
-
- public int Title { get; }
-
- public string TitleString { get; }
- }
-
- public delegate void CustomHuePickerCallback(Mobile from, T state, int hue);
-
- public class CustomHuePickerGump : Gump
- {
- private readonly CustomHuePickerCallback m_Callback;
- private readonly CustomHuePicker m_Definition;
- private readonly Mobile m_From;
- private readonly T m_State;
-
- public CustomHuePickerGump(Mobile from, CustomHuePicker definition, CustomHuePickerCallback callback, T state) : base(50, 50)
- {
- m_From = from;
- m_Definition = definition;
- m_Callback = callback;
- m_State = state;
-
- RenderBackground();
- RenderCategories();
- }
-
- private int GetRadioID(int group, int index) => index * m_Definition.Groups.Length + group;
-
- private void RenderBackground()
- {
- AddPage(0);
-
- AddBackground(0, 0, 450, 450, 5054);
- AddBackground(10, 10, 430, 430, 3000);
-
- if (m_Definition.TitleString != null)
- AddHtml(20, 30, 400, 25, m_Definition.TitleString);
- else if (m_Definition.Title > 0)
- AddHtmlLocalized(20, 30, 400, 25, m_Definition.Title);
-
- AddButton(20, 400, 4005, 4007, 1);
- AddHtmlLocalized(55, 400, 200, 25, 1011036); // OKAY
-
- if (m_Definition.DefaultSupported)
- {
- AddButton(200, 400, 4005, 4007, 2);
- AddLabel(235, 400, 0, "DEFAULT");
- }
- }
-
- private void RenderCategories()
- {
- CustomHueGroup[] groups = m_Definition.Groups;
-
- for (int i = 0; i < groups.Length; ++i)
- {
- AddButton(30, 85 + i * 25, 5224, 5224, 0, GumpButtonType.Page, 1 + i);
-
- if (groups[i].NameString != null)
- AddHtml(55, 85 + i * 25, 200, 25, groups[i].NameString);
- else
- AddHtmlLocalized(55, 85 + i * 25, 200, 25, groups[i].Name);
- }
-
- for (int i = 0; i < groups.Length; ++i)
- {
- AddPage(1 + i);
-
- int[] hues = groups[i].Hues;
-
- for (int j = 0; j < hues.Length; ++j)
- {
- AddRadio(260, 90 + j * 25, 210, 211, false, GetRadioID(i, j));
- AddLabel(278, 90 + j * 25, hues[j] - 1, "*****");
- }
- }
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- switch (info.ButtonID)
- {
- case 1: // Okay
- {
- int[] switches = info.Switches;
-
- if (switches.Length > 0)
- {
- int index = switches[0];
-
- int group = index % m_Definition.Groups.Length;
- index /= m_Definition.Groups.Length;
-
- if (group >= 0 && group < m_Definition.Groups.Length)
- {
- int[] hues = m_Definition.Groups[group].Hues;
-
- if (index >= 0 && index < hues.Length)
- m_Callback(m_From, m_State, hues[index]);
- }
- }
-
- break;
- }
- case 2: // Default
- {
- if (m_Definition.DefaultSupported)
- m_Callback(m_From, m_State, 0);
-
- break;
- }
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class CustomHueGroup
+ {
+ public CustomHueGroup(int name, int[] hues)
+ {
+ Name = name;
+ Hues = hues;
+ }
+
+ public CustomHueGroup(string name, int[] hues)
+ {
+ NameString = name;
+ Hues = hues;
+ }
+
+ public int Name { get; }
+
+ public string NameString { get; }
+
+ public int[] Hues { get; }
+ }
+
+ public class CustomHuePicker
+ {
+ public static readonly CustomHuePicker SpecialDyeTub = new CustomHuePicker(new[]
+ {
+ /* Violet */
+ new CustomHueGroup(1018345, new[] { 1230, 1231, 1232, 1233, 1234, 1235 }),
+ /* Tan */
+ new CustomHueGroup(1018346, new[] { 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508 }),
+ /* Brown */
+ new CustomHueGroup(1018347, new[] { 2012, 2013, 2014, 2015, 2016, 2017 }),
+ /* Dark Blue */
+ new CustomHueGroup(1018348, new[] { 1303, 1304, 1305, 1306, 1307, 1308 }),
+ /* Forest Green */
+ new CustomHueGroup(1018349, new[] { 1420, 1421, 1422, 1423, 1424, 1425, 1426 }),
+ /* Pink */
+ new CustomHueGroup(1018350, new[] { 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626 }),
+ /* Red */
+ new CustomHueGroup(1018351, new[] { 1640, 1641, 1642, 1643, 1644 }),
+ /* Olive */
+ new CustomHueGroup(1018352, new[] { 2001, 2002, 2003, 2004, 2005 })
+ }, false, 1018344);
+
+ public static readonly CustomHuePicker LeatherDyeTub = new CustomHuePicker(new[]
+ {
+ /* Dull Copper */
+ new CustomHueGroup(1018332, new[] { 2419, 2420, 2421, 2422, 2423, 2424 }),
+ /* Shadow Iron */
+ new CustomHueGroup(1018333, new[] { 2406, 2407, 2408, 2409, 2410, 2411, 2412 }),
+ /* Copper */
+ new CustomHueGroup(1018334, new[] { 2413, 2414, 2415, 2416, 2417, 2418 }),
+ /* Bronze */
+ new CustomHueGroup(1018335, new[] { 2414, 2415, 2416, 2417, 2418 }),
+ /* Glden */
+ new CustomHueGroup(1018336, new[] { 2213, 2214, 2215, 2216, 2217, 2218 }),
+ /* Agapite */
+ new CustomHueGroup(1018337, new[] { 2425, 2426, 2427, 2428, 2429, 2430 }),
+ /* Verite */
+ new CustomHueGroup(1018338, new[] { 2207, 2208, 2209, 2210, 2211, 2212 }),
+ /* Valorite */
+ new CustomHueGroup(1018339, new[] { 2219, 2220, 2221, 2222, 2223, 2224 }),
+ /* Reds */
+ new CustomHueGroup(1018340, new[] { 2113, 2114, 2115, 2116, 2117, 2118 }),
+ /* Blues */
+ new CustomHueGroup(1018341, new[] { 2119, 2120, 2121, 2122, 2123, 2124 }),
+ /* Greens */
+ new CustomHueGroup(1018342, new[] { 2126, 2127, 2128, 2129, 2130 }),
+ /* Yellows */
+ new CustomHueGroup(1018343, new[] { 2213, 2214, 2215, 2216, 2217, 2218 })
+ }, true);
+
+ public CustomHuePicker(CustomHueGroup[] groups, bool defaultSupported)
+ {
+ Groups = groups;
+ DefaultSupported = defaultSupported;
+ }
+
+ public CustomHuePicker(CustomHueGroup[] groups, bool defaultSupported, int title)
+ {
+ Groups = groups;
+ DefaultSupported = defaultSupported;
+ Title = title;
+ }
+
+ public CustomHuePicker(CustomHueGroup[] groups, bool defaultSupported, string title)
+ {
+ Groups = groups;
+ DefaultSupported = defaultSupported;
+ TitleString = title;
+ }
+
+ public bool DefaultSupported { get; }
+
+ public CustomHueGroup[] Groups { get; }
+
+ public int Title { get; }
+
+ public string TitleString { get; }
+ }
+
+ public delegate void CustomHuePickerCallback(Mobile from, T state, int hue);
+
+ public class CustomHuePickerGump : Gump
+ {
+ private readonly CustomHuePickerCallback m_Callback;
+ private readonly CustomHuePicker m_Definition;
+ private readonly Mobile m_From;
+ private readonly T m_State;
+
+ public CustomHuePickerGump(Mobile from, CustomHuePicker definition, CustomHuePickerCallback callback, T state) : base(50, 50)
+ {
+ m_From = from;
+ m_Definition = definition;
+ m_Callback = callback;
+ m_State = state;
+
+ RenderBackground();
+ RenderCategories();
+ }
+
+ private int GetRadioID(int group, int index) => index * m_Definition.Groups.Length + group;
+
+ private void RenderBackground()
+ {
+ AddPage(0);
+
+ AddBackground(0, 0, 450, 450, 5054);
+ AddBackground(10, 10, 430, 430, 3000);
+
+ if (m_Definition.TitleString != null)
+ AddHtml(20, 30, 400, 25, m_Definition.TitleString);
+ else if (m_Definition.Title > 0)
+ AddHtmlLocalized(20, 30, 400, 25, m_Definition.Title);
+
+ AddButton(20, 400, 4005, 4007, 1);
+ AddHtmlLocalized(55, 400, 200, 25, 1011036); // OKAY
+
+ if (m_Definition.DefaultSupported)
+ {
+ AddButton(200, 400, 4005, 4007, 2);
+ AddLabel(235, 400, 0, "DEFAULT");
+ }
+ }
+
+ private void RenderCategories()
+ {
+ CustomHueGroup[] groups = m_Definition.Groups;
+
+ for (int i = 0; i < groups.Length; ++i)
+ {
+ AddButton(30, 85 + i * 25, 5224, 5224, 0, GumpButtonType.Page, 1 + i);
+
+ if (groups[i].NameString != null)
+ AddHtml(55, 85 + i * 25, 200, 25, groups[i].NameString);
+ else
+ AddHtmlLocalized(55, 85 + i * 25, 200, 25, groups[i].Name);
+ }
+
+ for (int i = 0; i < groups.Length; ++i)
+ {
+ AddPage(1 + i);
+
+ int[] hues = groups[i].Hues;
+
+ for (int j = 0; j < hues.Length; ++j)
+ {
+ AddRadio(260, 90 + j * 25, 210, 211, false, GetRadioID(i, j));
+ AddLabel(278, 90 + j * 25, hues[j] - 1, "*****");
+ }
+ }
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ switch (info.ButtonID)
+ {
+ case 1: // Okay
+ {
+ int[] switches = info.Switches;
+
+ if (switches.Length > 0)
+ {
+ int index = switches[0];
+
+ int group = index % m_Definition.Groups.Length;
+ index /= m_Definition.Groups.Length;
+
+ if (group >= 0 && group < m_Definition.Groups.Length)
+ {
+ int[] hues = m_Definition.Groups[group].Hues;
+
+ if (index >= 0 && index < hues.Length)
+ m_Callback(m_From, m_State, hues[index]);
+ }
+ }
+
+ break;
+ }
+ case 2: // Default
+ {
+ if (m_Definition.DefaultSupported)
+ m_Callback(m_From, m_State, 0);
+
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/DyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/DyeTub.cs
index f036e493a..3f2526411 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/DyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/DyeTub.cs
@@ -1,255 +1,255 @@
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Gumps;
-using Server.Multis;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public interface IDyable
- {
- bool Dye(Mobile from, DyeTub sender);
- }
-
- public class DyeTub : Item, ISecurable
- {
- private int m_DyedHue;
- private bool m_Redyable;
-
- [Constructible]
- public DyeTub() : base(0xFAB)
- {
- Weight = 10.0;
- m_Redyable = true;
- }
-
- public DyeTub(Serial serial) : base(serial)
- {
- }
-
- public virtual CustomHuePicker CustomHuePicker => null;
-
- public virtual bool AllowRunebooks => false;
-
- public virtual bool AllowFurniture => false;
-
- public virtual bool AllowStatuettes => false;
-
- public virtual bool AllowLeather => false;
-
- public virtual bool AllowDyables => true;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public virtual bool Redyable
- {
- get => m_Redyable;
- set => m_Redyable = value;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int DyedHue
- {
- get => m_DyedHue;
- set
- {
- if (m_Redyable)
- {
- m_DyedHue = value;
- Hue = value;
- }
- }
- }
-
- // Three metallic tubs now.
- public virtual bool MetallicHues => false;
-
- // Select the clothing to dye.
- public virtual int TargetMessage => 500859;
-
- // You can not dye that.
- public virtual int FailMessage => 1042083;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SecureLevel Level { get; set; }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write((int)Level);
- writer.Write(m_Redyable);
- writer.Write(m_DyedHue);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- Level = (SecureLevel)reader.ReadInt();
- goto case 0;
- }
- case 0:
- {
- m_Redyable = reader.ReadBool();
- m_DyedHue = reader.ReadInt();
-
- break;
- }
- }
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
- SetSecureLevelEntry.AddTo(from, this, list);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (from.InRange(GetWorldLocation(), 1))
- {
- from.SendLocalizedMessage(TargetMessage);
- from.Target = new InternalTarget(this);
- }
- else
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- }
-
- private class InternalTarget : Target
- {
- private readonly DyeTub m_Tub;
-
- public InternalTarget(DyeTub tub) : base(1, false, TargetFlags.None) => m_Tub = tub;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (targeted is Item item)
- {
- if (item.QuestItem)
- {
- from.SendLocalizedMessage(1151836); // You may not dye toggled quest items.
- }
- else if (item is IDyable dyable && m_Tub.AllowDyables)
- {
- if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
- from.SendLocalizedMessage(500446); // That is too far away.
- else if (item.Parent is Mobile)
- from.SendLocalizedMessage(500861); // Can't Dye clothing that is being worn.
- else if (dyable.Dye(from, m_Tub))
- from.PlaySound(0x23E);
- }
- else if ((FurnitureAttribute.Check(item) || item is PotionKeg) && m_Tub.AllowFurniture)
- {
- if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- else
- {
- bool okay = item.IsChildOf(from.Backpack);
-
- if (!okay)
- {
- if (item.Parent == null)
- {
- BaseHouse house = BaseHouse.FindHouseAt(item);
-
- if (house == null || (!house.HasLockedDownItem(item) && !house.HasSecureItem(item)))
- from.SendLocalizedMessage(501022); // Furniture must be locked down to paint it.
- else if (!house.IsCoOwner(from))
- from.SendLocalizedMessage(501023); // You must be the owner to use this item.
- else
- okay = true;
- }
- else
- {
- from.SendLocalizedMessage(
- 1048135); // The furniture must be in your backpack to be painted.
- }
- }
-
- if (okay)
- {
- item.Hue = m_Tub.DyedHue;
- from.PlaySound(0x23E);
- }
- }
- }
- else if ((item is Runebook || item is RecallRune) && m_Tub.AllowRunebooks)
- {
- if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- else if (!item.Movable)
- {
- from.SendLocalizedMessage(1049776); // You cannot dye runes or runebooks that are locked down.
- }
- else
- {
- item.Hue = m_Tub.DyedHue;
- from.PlaySound(0x23E);
- }
- }
- else if (item is MonsterStatuette && m_Tub.AllowStatuettes)
- {
- if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- else if (!item.Movable)
- {
- from.SendLocalizedMessage(1049779); // You cannot dye statuettes that are locked down.
- }
- else
- {
- item.Hue = m_Tub.DyedHue;
- from.PlaySound(0x23E);
- }
- }
- else if (((item is BaseArmor armor &&
- (armor.MaterialType == ArmorMaterialType.Leather ||
- armor.MaterialType == ArmorMaterialType.Studded)) || item is ElvenBoots ||
- item is WoodlandBelt) && m_Tub.AllowLeather)
- {
- if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- else if (!item.Movable)
- {
- from.SendLocalizedMessage(1042419); // You may not dye leather items which are locked down.
- }
- else if (item.Parent is Mobile)
- {
- from.SendLocalizedMessage(500861); // Can't Dye clothing that is being worn.
- }
- else
- {
- item.Hue = m_Tub.DyedHue;
- from.PlaySound(0x23E);
- }
- }
- else
- {
- from.SendLocalizedMessage(m_Tub.FailMessage);
- }
- }
- else
- {
- from.SendLocalizedMessage(m_Tub.FailMessage);
- }
- }
- }
- }
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Gumps;
+using Server.Multis;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public interface IDyable
+ {
+ bool Dye(Mobile from, DyeTub sender);
+ }
+
+ public class DyeTub : Item, ISecurable
+ {
+ private int m_DyedHue;
+ private bool m_Redyable;
+
+ [Constructible]
+ public DyeTub() : base(0xFAB)
+ {
+ Weight = 10.0;
+ m_Redyable = true;
+ }
+
+ public DyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public virtual CustomHuePicker CustomHuePicker => null;
+
+ public virtual bool AllowRunebooks => false;
+
+ public virtual bool AllowFurniture => false;
+
+ public virtual bool AllowStatuettes => false;
+
+ public virtual bool AllowLeather => false;
+
+ public virtual bool AllowDyables => true;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public virtual bool Redyable
+ {
+ get => m_Redyable;
+ set => m_Redyable = value;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int DyedHue
+ {
+ get => m_DyedHue;
+ set
+ {
+ if (m_Redyable)
+ {
+ m_DyedHue = value;
+ Hue = value;
+ }
+ }
+ }
+
+ // Three metallic tubs now.
+ public virtual bool MetallicHues => false;
+
+ // Select the clothing to dye.
+ public virtual int TargetMessage => 500859;
+
+ // You can not dye that.
+ public virtual int FailMessage => 1042083;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SecureLevel Level { get; set; }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write((int)Level);
+ writer.Write(m_Redyable);
+ writer.Write(m_DyedHue);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ Level = (SecureLevel)reader.ReadInt();
+ goto case 0;
+ }
+ case 0:
+ {
+ m_Redyable = reader.ReadBool();
+ m_DyedHue = reader.ReadInt();
+
+ break;
+ }
+ }
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+ SetSecureLevelEntry.AddTo(from, this, list);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (from.InRange(GetWorldLocation(), 1))
+ {
+ from.SendLocalizedMessage(TargetMessage);
+ from.Target = new InternalTarget(this);
+ }
+ else
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly DyeTub m_Tub;
+
+ public InternalTarget(DyeTub tub) : base(1, false, TargetFlags.None) => m_Tub = tub;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (targeted is Item item)
+ {
+ if (item.QuestItem)
+ {
+ from.SendLocalizedMessage(1151836); // You may not dye toggled quest items.
+ }
+ else if (item is IDyable dyable && m_Tub.AllowDyables)
+ {
+ if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
+ from.SendLocalizedMessage(500446); // That is too far away.
+ else if (item.Parent is Mobile)
+ from.SendLocalizedMessage(500861); // Can't Dye clothing that is being worn.
+ else if (dyable.Dye(from, m_Tub))
+ from.PlaySound(0x23E);
+ }
+ else if ((FurnitureAttribute.Check(item) || item is PotionKeg) && m_Tub.AllowFurniture)
+ {
+ if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ else
+ {
+ bool okay = item.IsChildOf(from.Backpack);
+
+ if (!okay)
+ {
+ if (item.Parent == null)
+ {
+ BaseHouse house = BaseHouse.FindHouseAt(item);
+
+ if (house == null || (!house.HasLockedDownItem(item) && !house.HasSecureItem(item)))
+ from.SendLocalizedMessage(501022); // Furniture must be locked down to paint it.
+ else if (!house.IsCoOwner(from))
+ from.SendLocalizedMessage(501023); // You must be the owner to use this item.
+ else
+ okay = true;
+ }
+ else
+ {
+ from.SendLocalizedMessage(
+ 1048135); // The furniture must be in your backpack to be painted.
+ }
+ }
+
+ if (okay)
+ {
+ item.Hue = m_Tub.DyedHue;
+ from.PlaySound(0x23E);
+ }
+ }
+ }
+ else if ((item is Runebook || item is RecallRune) && m_Tub.AllowRunebooks)
+ {
+ if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ else if (!item.Movable)
+ {
+ from.SendLocalizedMessage(1049776); // You cannot dye runes or runebooks that are locked down.
+ }
+ else
+ {
+ item.Hue = m_Tub.DyedHue;
+ from.PlaySound(0x23E);
+ }
+ }
+ else if (item is MonsterStatuette && m_Tub.AllowStatuettes)
+ {
+ if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ else if (!item.Movable)
+ {
+ from.SendLocalizedMessage(1049779); // You cannot dye statuettes that are locked down.
+ }
+ else
+ {
+ item.Hue = m_Tub.DyedHue;
+ from.PlaySound(0x23E);
+ }
+ }
+ else if (((item is BaseArmor armor &&
+ (armor.MaterialType == ArmorMaterialType.Leather ||
+ armor.MaterialType == ArmorMaterialType.Studded)) || item is ElvenBoots ||
+ item is WoodlandBelt) && m_Tub.AllowLeather)
+ {
+ if (!from.InRange(m_Tub.GetWorldLocation(), 1) || !from.InRange(item.GetWorldLocation(), 1))
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ else if (!item.Movable)
+ {
+ from.SendLocalizedMessage(1042419); // You may not dye leather items which are locked down.
+ }
+ else if (item.Parent is Mobile)
+ {
+ from.SendLocalizedMessage(500861); // Can't Dye clothing that is being worn.
+ }
+ else
+ {
+ item.Hue = m_Tub.DyedHue;
+ from.PlaySound(0x23E);
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(m_Tub.FailMessage);
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(m_Tub.FailMessage);
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/FurnitureDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/FurnitureDyeTub.cs
index 11903513d..ead7e137b 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/FurnitureDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/FurnitureDyeTub.cs
@@ -1,67 +1,67 @@
-using Server.Engines.VeteranRewards;
-
-namespace Server.Items
-{
- public class FurnitureDyeTub : DyeTub, IRewardItem
- {
- [Constructible]
- public FurnitureDyeTub() => LootType = LootType.Blessed;
-
- public FurnitureDyeTub(Serial serial) : base(serial)
- {
- }
-
- public override bool AllowDyables => false;
- public override bool AllowFurniture => true;
- public override int TargetMessage => 501019; // Select the furniture to dye.
- public override int FailMessage => 501021; // That is not a piece of furniture.
- public override int LabelNumber => 1041246; // Furniture Dye Tub
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsRewardItem { get; set; }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
- return;
-
- base.OnDoubleClick(from);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076217); // 1st Year Veteran Reward
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(IsRewardItem);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- IsRewardItem = reader.ReadBool();
- break;
- }
- }
-
- if (LootType == LootType.Regular)
- LootType = LootType.Blessed;
- }
- }
-}
+using Server.Engines.VeteranRewards;
+
+namespace Server.Items
+{
+ public class FurnitureDyeTub : DyeTub, IRewardItem
+ {
+ [Constructible]
+ public FurnitureDyeTub() => LootType = LootType.Blessed;
+
+ public FurnitureDyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool AllowDyables => false;
+ public override bool AllowFurniture => true;
+ public override int TargetMessage => 501019; // Select the furniture to dye.
+ public override int FailMessage => 501021; // That is not a piece of furniture.
+ public override int LabelNumber => 1041246; // Furniture Dye Tub
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsRewardItem { get; set; }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
+ return;
+
+ base.OnDoubleClick(from);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076217); // 1st Year Veteran Reward
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(IsRewardItem);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ IsRewardItem = reader.ReadBool();
+ break;
+ }
+ }
+
+ if (LootType == LootType.Regular)
+ LootType = LootType.Blessed;
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/LeatherDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/LeatherDyeTub.cs
index 67b6dddc6..a5c9f78e9 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/LeatherDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/LeatherDyeTub.cs
@@ -1,65 +1,65 @@
-using Server.Engines.VeteranRewards;
-
-namespace Server.Items
-{
- public class LeatherDyeTub : DyeTub, IRewardItem
- {
- [Constructible]
- public LeatherDyeTub() => LootType = LootType.Blessed;
-
- public LeatherDyeTub(Serial serial) : base(serial)
- {
- }
-
- public override bool AllowDyables => false;
- public override bool AllowLeather => true;
- public override int TargetMessage => 1042416; // Select the leather item to dye.
- public override int FailMessage => 1042418; // You can only dye leather with this tub.
- public override int LabelNumber => 1041284; // Leather Dye Tub
- public override CustomHuePicker CustomHuePicker => CustomHuePicker.LeatherDyeTub;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsRewardItem { get; set; }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
- return;
-
- base.OnDoubleClick(from);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076218); // 2nd Year Veteran Reward
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(IsRewardItem);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- IsRewardItem = reader.ReadBool();
- break;
- }
- }
- }
- }
-}
+using Server.Engines.VeteranRewards;
+
+namespace Server.Items
+{
+ public class LeatherDyeTub : DyeTub, IRewardItem
+ {
+ [Constructible]
+ public LeatherDyeTub() => LootType = LootType.Blessed;
+
+ public LeatherDyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool AllowDyables => false;
+ public override bool AllowLeather => true;
+ public override int TargetMessage => 1042416; // Select the leather item to dye.
+ public override int FailMessage => 1042418; // You can only dye leather with this tub.
+ public override int LabelNumber => 1041284; // Leather Dye Tub
+ public override CustomHuePicker CustomHuePicker => CustomHuePicker.LeatherDyeTub;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsRewardItem { get; set; }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
+ return;
+
+ base.OnDoubleClick(from);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076218); // 2nd Year Veteran Reward
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(IsRewardItem);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ IsRewardItem = reader.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicClothDyetub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicClothDyetub.cs
index 9e5e40a77..ebdf14dd8 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicClothDyetub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicClothDyetub.cs
@@ -1,31 +1,31 @@
-namespace Server.Items
-{
- public class MetallicClothDyetub : DyeTub
- {
- [Constructible]
- public MetallicClothDyetub() => LootType = LootType.Blessed;
-
- public MetallicClothDyetub(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1152920; // Metallic Cloth ...
-
- public override bool MetallicHues => 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 MetallicClothDyetub : DyeTub
+ {
+ [Constructible]
+ public MetallicClothDyetub() => LootType = LootType.Blessed;
+
+ public MetallicClothDyetub(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1152920; // Metallic Cloth ...
+
+ public override bool MetallicHues => 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicHuePicker.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicHuePicker.cs
index 99a211c8a..c80bac2a5 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicHuePicker.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicHuePicker.cs
@@ -1,77 +1,77 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class MetallicHuePicker : Gump
- {
- private readonly CustomHuePickerCallback m_Callback;
-
- private readonly Mobile m_From;
- private readonly T m_State;
-
- public MetallicHuePicker(Mobile from, CustomHuePickerCallback callback, T state)
- : base(450, 450)
- {
- m_From = from;
- m_Callback = callback;
- m_State = state;
-
- Render();
- }
-
- public void Render()
- {
- AddPage(0);
-
- AddBackground(0, 0, 450, 450, 0x13BE);
- AddBackground(10, 10, 430, 430, 0xBB8);
-
- AddHtmlLocalized(55, 400, 200, 25, 1011036); // OKAY
-
- AddButton(20, 400, 4005, 4007, 1);
- AddButton(200, 400, 4005, 4007, 2);
- AddLabel(235, 400, 0, "DEFAULT");
-
- AddHtmlLocalized(55, 25, 200, 25, 1150063); // Base/Shadow Color
- AddHtmlLocalized(260, 25, 200, 25, 1150064); // Highlight Color
-
- for (int row = 0; row < 13; row++)
- {
- AddButton(30, 65 + row * 25, 0x1467, 0x1468, row + 1, GumpButtonType.Page, row + 1);
- AddItem(50, 65 + row * 25, 0x1412, 2501 + row * 12 + (row == 12 ? 6 : 0));
- }
-
- for (int page = 1; page < 14; page++)
- {
- AddPage(page);
-
- for (int row = 0; row < 12; row++)
- {
- int hue = 2501 + (page == 13 ? 6 : 0) + row +
- 12 * (page - 1); /* OSI just had to skip 6 unused hues, didnt they */
- AddRadio(260, 65 + row * 25, 0xd2, 0xd3, false, hue);
- AddItem(280, 65 + row * 25, 0x1412, hue);
- }
- }
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- switch (info.ButtonID)
- {
- case 1: // Okay
- {
- if (info.Switches.Length > 0) m_Callback(m_From, m_State, info.Switches[0]);
- break;
- }
- case 2: // Default
- {
- m_Callback(m_From, m_State, 0);
-
- break;
- }
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class MetallicHuePicker : Gump
+ {
+ private readonly CustomHuePickerCallback m_Callback;
+
+ private readonly Mobile m_From;
+ private readonly T m_State;
+
+ public MetallicHuePicker(Mobile from, CustomHuePickerCallback callback, T state)
+ : base(450, 450)
+ {
+ m_From = from;
+ m_Callback = callback;
+ m_State = state;
+
+ Render();
+ }
+
+ public void Render()
+ {
+ AddPage(0);
+
+ AddBackground(0, 0, 450, 450, 0x13BE);
+ AddBackground(10, 10, 430, 430, 0xBB8);
+
+ AddHtmlLocalized(55, 400, 200, 25, 1011036); // OKAY
+
+ AddButton(20, 400, 4005, 4007, 1);
+ AddButton(200, 400, 4005, 4007, 2);
+ AddLabel(235, 400, 0, "DEFAULT");
+
+ AddHtmlLocalized(55, 25, 200, 25, 1150063); // Base/Shadow Color
+ AddHtmlLocalized(260, 25, 200, 25, 1150064); // Highlight Color
+
+ for (int row = 0; row < 13; row++)
+ {
+ AddButton(30, 65 + row * 25, 0x1467, 0x1468, row + 1, GumpButtonType.Page, row + 1);
+ AddItem(50, 65 + row * 25, 0x1412, 2501 + row * 12 + (row == 12 ? 6 : 0));
+ }
+
+ for (int page = 1; page < 14; page++)
+ {
+ AddPage(page);
+
+ for (int row = 0; row < 12; row++)
+ {
+ int hue = 2501 + (page == 13 ? 6 : 0) + row +
+ 12 * (page - 1); /* OSI just had to skip 6 unused hues, didnt they */
+ AddRadio(260, 65 + row * 25, 0xd2, 0xd3, false, hue);
+ AddItem(280, 65 + row * 25, 0x1412, hue);
+ }
+ }
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ switch (info.ButtonID)
+ {
+ case 1: // Okay
+ {
+ if (info.Switches.Length > 0) m_Callback(m_From, m_State, info.Switches[0]);
+ break;
+ }
+ case 2: // Default
+ {
+ m_Callback(m_From, m_State, 0);
+
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicLeatherDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicLeatherDyeTub.cs
index 31b8b8fb5..1bca13eb3 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicLeatherDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/MetallicLeatherDyeTub.cs
@@ -1,41 +1,41 @@
-namespace Server.Items
-{
- public class MetallicLeatherDyeTub : LeatherDyeTub
- {
- [Constructible]
- public MetallicLeatherDyeTub() => LootType = LootType.Blessed;
-
- public MetallicLeatherDyeTub(Serial serial)
- : base(serial)
- {
- }
-
- public override CustomHuePicker CustomHuePicker => null;
-
- public override int LabelNumber => 1153495; // Metallic Leather ...
-
- public override bool MetallicHues => true;
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076221); // 5th Year Veteran Reward
- }
-
- 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 MetallicLeatherDyeTub : LeatherDyeTub
+ {
+ [Constructible]
+ public MetallicLeatherDyeTub() => LootType = LootType.Blessed;
+
+ public MetallicLeatherDyeTub(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override CustomHuePicker CustomHuePicker => null;
+
+ public override int LabelNumber => 1153495; // Metallic Leather ...
+
+ public override bool MetallicHues => true;
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076221); // 5th Year Veteran Reward
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RewardBlackDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RewardBlackDyeTub.cs
index c57c1238e..cffdc9307 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RewardBlackDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RewardBlackDyeTub.cs
@@ -1,65 +1,65 @@
-using Server.Engines.VeteranRewards;
-
-namespace Server.Items
-{
- public class RewardBlackDyeTub : DyeTub, IRewardItem
- {
- [Constructible]
- public RewardBlackDyeTub()
- {
- Hue = DyedHue = 0x0001;
- Redyable = false;
- LootType = LootType.Blessed;
- }
-
- public RewardBlackDyeTub(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1006008; // Black Dye Tub
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsRewardItem { get; set; }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
- return;
-
- base.OnDoubleClick(from);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076217); // 1st Year Veteran Reward
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(IsRewardItem);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- IsRewardItem = reader.ReadBool();
- break;
- }
- }
- }
- }
-}
+using Server.Engines.VeteranRewards;
+
+namespace Server.Items
+{
+ public class RewardBlackDyeTub : DyeTub, IRewardItem
+ {
+ [Constructible]
+ public RewardBlackDyeTub()
+ {
+ Hue = DyedHue = 0x0001;
+ Redyable = false;
+ LootType = LootType.Blessed;
+ }
+
+ public RewardBlackDyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1006008; // Black Dye Tub
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsRewardItem { get; set; }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
+ return;
+
+ base.OnDoubleClick(from);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076217); // 1st Year Veteran Reward
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(IsRewardItem);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ IsRewardItem = reader.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RunebookDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RunebookDyeTub.cs
index 096a06afc..7f0e5bf9a 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RunebookDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/RunebookDyeTub.cs
@@ -1,65 +1,65 @@
-using Server.Engines.VeteranRewards;
-
-namespace Server.Items
-{
- public class RunebookDyeTub : DyeTub, IRewardItem
- {
- [Constructible]
- public RunebookDyeTub() => LootType = LootType.Blessed;
-
- public RunebookDyeTub(Serial serial) : base(serial)
- {
- }
-
- public override bool AllowDyables => false;
- public override bool AllowRunebooks => true;
- public override int TargetMessage => 1049774; // Target the runebook or runestone to dye
- public override int FailMessage => 1049775; // You can only dye runestones or runebooks with this tub.
- public override int LabelNumber => 1049740; // Runebook Dye Tub
- public override CustomHuePicker CustomHuePicker => CustomHuePicker.LeatherDyeTub;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsRewardItem { get; set; }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
- return;
-
- base.OnDoubleClick(from);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076220); // 4th Year Veteran Reward
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(IsRewardItem);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- IsRewardItem = reader.ReadBool();
- break;
- }
- }
- }
- }
-}
+using Server.Engines.VeteranRewards;
+
+namespace Server.Items
+{
+ public class RunebookDyeTub : DyeTub, IRewardItem
+ {
+ [Constructible]
+ public RunebookDyeTub() => LootType = LootType.Blessed;
+
+ public RunebookDyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool AllowDyables => false;
+ public override bool AllowRunebooks => true;
+ public override int TargetMessage => 1049774; // Target the runebook or runestone to dye
+ public override int FailMessage => 1049775; // You can only dye runestones or runebooks with this tub.
+ public override int LabelNumber => 1049740; // Runebook Dye Tub
+ public override CustomHuePicker CustomHuePicker => CustomHuePicker.LeatherDyeTub;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsRewardItem { get; set; }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
+ return;
+
+ base.OnDoubleClick(from);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076220); // 4th Year Veteran Reward
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(IsRewardItem);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ IsRewardItem = reader.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/SpecialDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/SpecialDyeTub.cs
index 63c603d37..790b8070c 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/SpecialDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/SpecialDyeTub.cs
@@ -1,61 +1,61 @@
-using Server.Engines.VeteranRewards;
-
-namespace Server.Items
-{
- public class SpecialDyeTub : DyeTub, IRewardItem
- {
- [Constructible]
- public SpecialDyeTub() => LootType = LootType.Blessed;
-
- public SpecialDyeTub(Serial serial) : base(serial)
- {
- }
-
- public override CustomHuePicker CustomHuePicker => CustomHuePicker.SpecialDyeTub;
- public override int LabelNumber => 1041285; // Special Dye Tub
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsRewardItem { get; set; }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
- return;
-
- base.OnDoubleClick(from);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076217); // 1st Year Veteran Reward
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(IsRewardItem);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- IsRewardItem = reader.ReadBool();
- break;
- }
- }
- }
- }
-}
+using Server.Engines.VeteranRewards;
+
+namespace Server.Items
+{
+ public class SpecialDyeTub : DyeTub, IRewardItem
+ {
+ [Constructible]
+ public SpecialDyeTub() => LootType = LootType.Blessed;
+
+ public SpecialDyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public override CustomHuePicker CustomHuePicker => CustomHuePicker.SpecialDyeTub;
+ public override int LabelNumber => 1041285; // Special Dye Tub
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsRewardItem { get; set; }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
+ return;
+
+ base.OnDoubleClick(from);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076217); // 1st Year Veteran Reward
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(IsRewardItem);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ IsRewardItem = reader.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/StatuetteDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/StatuetteDyeTub.cs
index 83644ada5..1105b625e 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/StatuetteDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/StatuetteDyeTub.cs
@@ -1,65 +1,65 @@
-using Server.Engines.VeteranRewards;
-
-namespace Server.Items
-{
- public class StatuetteDyeTub : DyeTub, IRewardItem
- {
- [Constructible]
- public StatuetteDyeTub() => LootType = LootType.Blessed;
-
- public StatuetteDyeTub(Serial serial) : base(serial)
- {
- }
-
- public override bool AllowDyables => false;
- public override bool AllowStatuettes => true;
- public override int TargetMessage => 1049777; // Target the statuette to dye
- public override int FailMessage => 1049778; // You can only dye veteran reward statuettes with this tub.
- public override int LabelNumber => 1049741; // Reward Statuette Dye Tub
- public override CustomHuePicker CustomHuePicker => CustomHuePicker.LeatherDyeTub;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public bool IsRewardItem { get; set; }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
- return;
-
- base.OnDoubleClick(from);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (Core.ML && IsRewardItem)
- list.Add(1076221); // 5th Year Veteran Reward
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(IsRewardItem);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- IsRewardItem = reader.ReadBool();
- break;
- }
- }
- }
- }
-}
+using Server.Engines.VeteranRewards;
+
+namespace Server.Items
+{
+ public class StatuetteDyeTub : DyeTub, IRewardItem
+ {
+ [Constructible]
+ public StatuetteDyeTub() => LootType = LootType.Blessed;
+
+ public StatuetteDyeTub(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool AllowDyables => false;
+ public override bool AllowStatuettes => true;
+ public override int TargetMessage => 1049777; // Target the statuette to dye
+ public override int FailMessage => 1049778; // You can only dye veteran reward statuettes with this tub.
+ public override int LabelNumber => 1049741; // Reward Statuette Dye Tub
+ public override CustomHuePicker CustomHuePicker => CustomHuePicker.LeatherDyeTub;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public bool IsRewardItem { get; set; }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this))
+ return;
+
+ base.OnDoubleClick(from);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (Core.ML && IsRewardItem)
+ list.Add(1076221); // 5th Year Veteran Reward
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(IsRewardItem);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ IsRewardItem = reader.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteClothDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteClothDyeTub.cs
index d3eeddcff..d704f817e 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteClothDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteClothDyeTub.cs
@@ -1,31 +1,31 @@
-namespace Server.Items /* High seas, loot from merchant ship's hold, also a "uncommon" loot item */
-{
- public class WhiteClothDyeTub : DyeTub
- {
- [Constructible]
- public WhiteClothDyeTub() => DyedHue = Hue = 0x9C2;
-
- public WhiteClothDyeTub(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1149984; // White Cloth Dye Tub
-
- public override bool Redyable => false;
-
- 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 /* High seas, loot from merchant ship's hold, also a "uncommon" loot item */
+{
+ public class WhiteClothDyeTub : DyeTub
+ {
+ [Constructible]
+ public WhiteClothDyeTub() => DyedHue = Hue = 0x9C2;
+
+ public WhiteClothDyeTub(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1149984; // White Cloth Dye Tub
+
+ public override bool Redyable => false;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteLeatherDyeTub.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteLeatherDyeTub.cs
index b489715f0..5861a0a20 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteLeatherDyeTub.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Dyetubs/WhiteLeatherDyeTub.cs
@@ -1,35 +1,35 @@
-namespace Server.Items
-{
- public class WhiteLeatherDyeTub : LeatherDyeTub /* OSI UO 13th anniv gift, from redeemable gift tickets */
- {
- [Constructible]
- public WhiteLeatherDyeTub()
- {
- DyedHue = Hue = 0x9C2;
- LootType = LootType.Blessed;
- }
-
- public WhiteLeatherDyeTub(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1149900; // White Leather Dye Tub
-
- public override bool Redyable => false;
-
- 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();
- }
- }
+namespace Server.Items
+{
+ public class WhiteLeatherDyeTub : LeatherDyeTub /* OSI UO 13th anniv gift, from redeemable gift tickets */
+ {
+ [Constructible]
+ public WhiteLeatherDyeTub()
+ {
+ DyedHue = Hue = 0x9C2;
+ LootType = LootType.Blessed;
+ }
+
+ public WhiteLeatherDyeTub(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1149900; // White Leather Dye Tub
+
+ public override bool Redyable => false;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dressform.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dressform.cs
index 02b03041f..62626440b 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dressform.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dressform.cs
@@ -1,27 +1,27 @@
-namespace Server.Items
-{
- [Flippable(0xec6, 0xec7)]
- public class Dressform : Item
- {
- [Constructible]
- public Dressform() : base(0xec6) => Weight = 10;
-
- public Dressform(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
+{
+ [Flippable(0xec6, 0xec7)]
+ public class Dressform : Item
+ {
+ [Constructible]
+ public Dressform() : base(0xec6) => Weight = 10;
+
+ public Dressform(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dyes.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dyes.cs
index dc23c16c7..8ccfc6666 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dyes.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Dyes.cs
@@ -1,103 +1,103 @@
-using Server.HuePickers;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public class Dyes : Item /* , IUsesRemaining */ /* TODO complete usesremaing */
- {
- /*
- public bool ShowUsesRemaining { get { return false; } set { } }
-
- [CommandProperty( AccessLevel.GameMaster )]
- public virtual int UsesRemaining { get { return m_UsesRemaining; } set { m_UsesRemaining = value; } }
-
- private int m_UsesRemaining;
- */
-
- [Constructible]
- public Dyes() : base(0xFA9) => Weight = 3.0;
-
- public Dyes(Serial serial) : base(serial)
- {
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- /* writer.Write( ( int )m_UsesRemaining ); */
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- if (Weight == 0.0)
- Weight = 3.0;
-
- /* m_UsesRemaining = ( version == 0 ) ? 25 : reader.ReadInt(); */
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- from.SendLocalizedMessage(500856); // Select the dye tub to use the dyes on.
- from.Target = new InternalTarget();
- }
-
- private class InternalTarget : Target
- {
- public InternalTarget() : base(1, false, TargetFlags.None)
- {
- }
-
- public virtual void SetTubHue(Mobile from, DyeTub tub, int hue)
- {
- tub.DyedHue = hue;
- }
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (targeted is DyeTub tub)
- {
- if (tub.Redyable)
- {
- if (tub.MetallicHues) /* OSI has three metallic tubs now */
- from.SendGump(new MetallicHuePicker(from, SetTubHue, tub));
- else if (tub.CustomHuePicker != null)
- from.SendGump(new CustomHuePickerGump(from, tub.CustomHuePicker, SetTubHue, tub));
- else
- from.SendHuePicker(new InternalPicker(tub));
- }
- else if (tub is BlackDyeTub)
- {
- from.SendLocalizedMessage(1010092); // You can not use this on a black dye tub.
- }
- else
- {
- from.SendMessage("That dye tub may not be redyed.");
- }
- }
- else
- {
- from.SendLocalizedMessage(500857); // Use this on a dye tub.
- }
- }
-
- private class InternalPicker : HuePicker
- {
- private readonly DyeTub m_Tub;
-
- public InternalPicker(DyeTub tub) : base(tub.ItemID) => m_Tub = tub;
-
- public override void OnResponse(int hue)
- {
- m_Tub.DyedHue = hue;
- }
- }
- }
- }
+using Server.HuePickers;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public class Dyes : Item /* , IUsesRemaining */ /* TODO complete usesremaing */
+ {
+ /*
+ public bool ShowUsesRemaining { get { return false; } set { } }
+
+ [CommandProperty( AccessLevel.GameMaster )]
+ public virtual int UsesRemaining { get { return m_UsesRemaining; } set { m_UsesRemaining = value; } }
+
+ private int m_UsesRemaining;
+ */
+
+ [Constructible]
+ public Dyes() : base(0xFA9) => Weight = 3.0;
+
+ public Dyes(Serial serial) : base(serial)
+ {
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ /* writer.Write( ( int )m_UsesRemaining ); */
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ if (Weight == 0.0)
+ Weight = 3.0;
+
+ /* m_UsesRemaining = ( version == 0 ) ? 25 : reader.ReadInt(); */
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ from.SendLocalizedMessage(500856); // Select the dye tub to use the dyes on.
+ from.Target = new InternalTarget();
+ }
+
+ private class InternalTarget : Target
+ {
+ public InternalTarget() : base(1, false, TargetFlags.None)
+ {
+ }
+
+ public virtual void SetTubHue(Mobile from, DyeTub tub, int hue)
+ {
+ tub.DyedHue = hue;
+ }
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (targeted is DyeTub tub)
+ {
+ if (tub.Redyable)
+ {
+ if (tub.MetallicHues) /* OSI has three metallic tubs now */
+ from.SendGump(new MetallicHuePicker(from, SetTubHue, tub));
+ else if (tub.CustomHuePicker != null)
+ from.SendGump(new CustomHuePickerGump(from, tub.CustomHuePicker, SetTubHue, tub));
+ else
+ from.SendHuePicker(new InternalPicker(tub));
+ }
+ else if (tub is BlackDyeTub)
+ {
+ from.SendLocalizedMessage(1010092); // You can not use this on a black dye tub.
+ }
+ else
+ {
+ from.SendMessage("That dye tub may not be redyed.");
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(500857); // Use this on a dye tub.
+ }
+ }
+
+ private class InternalPicker : HuePicker
+ {
+ private readonly DyeTub m_Tub;
+
+ public InternalPicker(DyeTub tub) : base(tub.ItemID) => m_Tub = tub;
+
+ public override void OnResponse(int hue)
+ {
+ m_Tub.DyedHue = hue;
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Scissors.cs b/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Scissors.cs
index 28174d041..91cbc6e78 100644
--- a/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Scissors.cs
+++ b/Projects/UOContent/Items/Skill Items/Tailor Items/Misc/Scissors.cs
@@ -1,113 +1,113 @@
-using Server.Targeting;
-
-namespace Server.Items
-{
- public interface IScissorable
- {
- bool Scissor(Mobile from, Scissors scissors);
- }
-
- [Flippable(0xf9f, 0xf9e)]
- public class Scissors : Item
- {
- [Constructible]
- public Scissors() : base(0xF9F) => Weight = 1.0;
-
- public Scissors(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)
- {
- from.SendLocalizedMessage(502434); // What should I use these scissors on?
-
- from.Target = new InternalTarget(this);
- }
-
- public static bool CanScissor(Mobile from, IScissorable obj)
- {
- if (obj is Item item && item.Nontransferable)
- {
- from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
- return false;
- }
-
- // TODO: Move other general checks from the different implementations here
-
- return true;
- }
-
- private class InternalTarget : Target
- {
- private readonly Scissors m_Item;
-
- public InternalTarget(Scissors item) : base(2, false, TargetFlags.None) => m_Item = item;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Item.Deleted)
- return;
-
- /*if (targeted is Item && !((Item)targeted).IsStandardLoot())
- {
- from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
- }
- else */
- if (Core.AOS && targeted == from)
- {
- from.SendLocalizedMessage(
- 1062845 + Utility
- .Random(3)); // "That doesn't seem like the smartest thing to do." / "That was an encounter you don't wish to repeat." / "Ha! You missed!"
- }
- else if (Core.SE && Utility.RandomDouble() > .20 && (from.Direction & Direction.Running) != 0 &&
- Core.TickCount - from.LastMoveTime < from.ComputeMovementSpeed(from.Direction))
- {
- from.SendLocalizedMessage(
- 1063305); // Didn't your parents ever tell you not to run with scissors in your hand?!
- }
- else if (targeted is Item item && !item.Movable)
- {
- if (item is IScissorable obj && (obj is PlagueBeastInnard || obj is PlagueBeastMutationCore))
- if (CanScissor(from, obj) && obj.Scissor(from, m_Item))
- from.PlaySound(0x248);
- }
- else if (targeted is IScissorable obj)
- {
- if (CanScissor(from, obj) && obj.Scissor(from, m_Item))
- from.PlaySound(0x248);
- }
- else
- {
- from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
- }
- }
-
- protected override void OnNonlocalTarget(Mobile from, object targeted)
- {
- if (targeted is IScissorable obj && (obj is PlagueBeastInnard || obj is PlagueBeastMutationCore))
- {
- if (CanScissor(from, obj) && obj.Scissor(from, m_Item))
- from.PlaySound(0x248);
- }
- else
- {
- base.OnNonlocalTarget(from, targeted);
- }
- }
- }
- }
-}
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public interface IScissorable
+ {
+ bool Scissor(Mobile from, Scissors scissors);
+ }
+
+ [Flippable(0xf9f, 0xf9e)]
+ public class Scissors : Item
+ {
+ [Constructible]
+ public Scissors() : base(0xF9F) => Weight = 1.0;
+
+ public Scissors(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)
+ {
+ from.SendLocalizedMessage(502434); // What should I use these scissors on?
+
+ from.Target = new InternalTarget(this);
+ }
+
+ public static bool CanScissor(Mobile from, IScissorable obj)
+ {
+ if (obj is Item item && item.Nontransferable)
+ {
+ from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
+ return false;
+ }
+
+ // TODO: Move other general checks from the different implementations here
+
+ return true;
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly Scissors m_Item;
+
+ public InternalTarget(Scissors item) : base(2, false, TargetFlags.None) => m_Item = item;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Item.Deleted)
+ return;
+
+ /*if (targeted is Item && !((Item)targeted).IsStandardLoot())
+ {
+ from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
+ }
+ else */
+ if (Core.AOS && targeted == from)
+ {
+ from.SendLocalizedMessage(
+ 1062845 + Utility
+ .Random(3)); // "That doesn't seem like the smartest thing to do." / "That was an encounter you don't wish to repeat." / "Ha! You missed!"
+ }
+ else if (Core.SE && Utility.RandomDouble() > .20 && (from.Direction & Direction.Running) != 0 &&
+ Core.TickCount - from.LastMoveTime < from.ComputeMovementSpeed(from.Direction))
+ {
+ from.SendLocalizedMessage(
+ 1063305); // Didn't your parents ever tell you not to run with scissors in your hand?!
+ }
+ else if (targeted is Item item && !item.Movable)
+ {
+ if (item is IScissorable obj && (obj is PlagueBeastInnard || obj is PlagueBeastMutationCore))
+ if (CanScissor(from, obj) && obj.Scissor(from, m_Item))
+ from.PlaySound(0x248);
+ }
+ else if (targeted is IScissorable obj)
+ {
+ if (CanScissor(from, obj) && obj.Scissor(from, m_Item))
+ from.PlaySound(0x248);
+ }
+ else
+ {
+ from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
+ }
+ }
+
+ protected override void OnNonlocalTarget(Mobile from, object targeted)
+ {
+ if (targeted is IScissorable obj && (obj is PlagueBeastInnard || obj is PlagueBeastMutationCore))
+ {
+ if (CanScissor(from, obj) && obj.Scissor(from, m_Item))
+ from.PlaySound(0x248);
+ }
+ else
+ {
+ base.OnNonlocalTarget(from, targeted);
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Thief/DisguiseKit.cs b/Projects/UOContent/Items/Skill Items/Thief/DisguiseKit.cs
index aeaee2db3..d503a5c01 100644
--- a/Projects/UOContent/Items/Skill Items/Thief/DisguiseKit.cs
+++ b/Projects/UOContent/Items/Skill Items/Thief/DisguiseKit.cs
@@ -1,316 +1,316 @@
-using System;
-using System.Collections.Generic;
-using Server.Factions;
-using Server.Gumps;
-using Server.Mobiles;
-using Server.Network;
-using Server.SkillHandlers;
-using Server.Spells;
-using Server.Spells.Fifth;
-using Server.Spells.Seventh;
-
-namespace Server.Items
-{
- public class DisguiseKit : Item
- {
- [Constructible]
- public DisguiseKit() : base(0xE05) => Weight = 1.0;
-
- public DisguiseKit(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041078; // a disguise kit
-
- 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 bool ValidateUse(Mobile from)
- {
- PlayerMobile pm = from as PlayerMobile;
-
- if (!IsChildOf(from.Backpack))
- from.SendLocalizedMessage(1042001);
- else if (pm == null || pm.NpcGuild != NpcGuild.ThievesGuild)
- from.SendLocalizedMessage(501702);
- else if (Stealing.SuspendOnMurder && pm.Kills > 0)
- from.SendLocalizedMessage(501703);
- else if (!from.CanBeginAction())
- from.SendLocalizedMessage(501704);
- else if (Sigil.ExistsOn(from))
- from.SendLocalizedMessage(1010465); // You cannot disguise yourself while holding a sigil
- else if (TransformationSpellHelper.UnderTransformation(from))
- from.SendLocalizedMessage(1061634);
- else if (from.BodyMod == 183 || from.BodyMod == 184)
- from.SendLocalizedMessage(1040002);
- else if (!from.CanBeginAction() || from.IsBodyMod)
- from.SendLocalizedMessage(501705);
- else
- return true;
-
- return false;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (ValidateUse(from))
- from.SendGump(new DisguiseGump(from, this, true, false));
- }
- }
-
- public class DisguiseGump : Gump
- {
- private static readonly DisguiseEntry[] m_HairEntries =
- {
- new DisguiseEntry(8251, 50700, 0, 5, 1011052), // Short
- new DisguiseEntry(8261, 60710, 0, 3, 1011047), // Pageboy
- new DisguiseEntry(8252, 60708, 0, -5, 1011053), // Long
- new DisguiseEntry(8264, 60901, 0, 5, 1011048), // Receding
- new DisguiseEntry(8253, 60702, 0, -5, 1011054), // Ponytail
- new DisguiseEntry(8265, 60707, 0, -5, 1011049), // 2-tails
- new DisguiseEntry(8260, 50703, 0, 5, 1011055), // Mohawk
- new DisguiseEntry(8266, 60713, 0, 10, 1011050), // Topknot
- null,
- new DisguiseEntry(0, 0, 0, 0, 1011051) // None
- };
-
- private static readonly DisguiseEntry[] m_BeardEntries =
- {
- new DisguiseEntry(8269, 50906, 0, 0, 1011401), // Vandyke
- new DisguiseEntry(8257, 50808, 0, -2, 1011062), // Mustache
- new DisguiseEntry(8255, 50802, 0, 0, 1011060), // Short beard
- new DisguiseEntry(8268, 50905, 0, -10, 1011061), // Long beard
- new DisguiseEntry(8267, 50904, 0, 0, 1011060), // Short beard
- new DisguiseEntry(8254, 50801, 0, -10, 1011061), // Long beard
- null,
- new DisguiseEntry(0, 0, 0, 0, 1011051) // None
- };
-
- private readonly Mobile m_From;
- private readonly DisguiseKit m_Kit;
- private readonly bool m_Used;
-
- public DisguiseGump(Mobile from, DisguiseKit kit, bool startAtHair, bool used) : base(50, 50)
- {
- m_From = from;
- m_Kit = kit;
- m_Used = used;
-
- from.CloseGump();
-
- AddPage(0);
-
- AddBackground(100, 10, 400, 385, 2600);
-
- //
THIEF DISGUISE KIT
- AddHtmlLocalized(100, 25, 400, 35, 1011045);
-
- AddButton(140, 353, 4005, 4007, 0);
- AddHtmlLocalized(172, 355, 90, 35, 1011036); // OKAY
-
- AddButton(257, 353, 4005, 4007, 1);
- AddHtmlLocalized(289, 355, 90, 35, 1011046); // APPLY
-
- if (from.Female || from.Body.IsFemale)
- {
- DrawEntries(0, 1, -1, m_HairEntries, -1);
- }
- else if (startAtHair)
- {
- DrawEntries(0, 1, 2, m_HairEntries, 1011056);
- DrawEntries(1, 2, 1, m_BeardEntries, 1011059);
- }
- else
- {
- DrawEntries(1, 1, 2, m_BeardEntries, 1011059);
- DrawEntries(0, 2, 1, m_HairEntries, 1011056);
- }
- }
-
- private void DrawEntries(int index, int page, int nextPage, DisguiseEntry[] entries, int nextNumber)
- {
- AddPage(page);
-
- if (nextPage != -1)
- {
- AddButton(155, 320, 250 + index * 2, 251 + index * 2, 0, GumpButtonType.Page, nextPage);
- AddHtmlLocalized(180, 320, 150, 35, nextNumber);
- }
-
- for (int i = 0; i < entries.Length; ++i)
- {
- DisguiseEntry entry = entries[i];
-
- if (entry == null)
- continue;
-
- int x = i % 2 * 205;
- int y = i / 2 * 55;
-
- if (entry.m_GumpID != 0)
- {
- AddBackground(220 + x, 60 + y, 50, 50, 2620);
- AddImage(153 + x + entry.m_OffsetX, 15 + y + entry.m_OffsetY, entry.m_GumpID);
- }
-
- AddHtmlLocalized(140 + x, 72 + y, 80, 35, entry.m_Number);
- AddRadio(118 + x, 73 + y, 208, 209, false, i * 2 + index);
- }
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (info.ButtonID == 0)
- {
- if (m_Used)
- m_From.SendLocalizedMessage(501706); // Disguises wear off after 2 hours.
- else
- m_From.SendLocalizedMessage(501707); // You're looking good.
-
- return;
- }
-
- int[] switches = info.Switches;
-
- if (switches.Length == 0)
- return;
-
- int switched = switches[0];
- int type = switched % 2;
- int index = switched / 2;
-
- bool hair = type == 0;
-
- DisguiseEntry[] entries = hair ? m_HairEntries : m_BeardEntries;
-
- if (index >= 0 && index < entries.Length)
- {
- DisguiseEntry entry = entries[index];
-
- if (entry == null)
- return;
-
- if (!m_Kit.ValidateUse(m_From))
- return;
-
- if (!hair && (m_From.Female || m_From.Body.IsFemale))
- return;
-
- m_From.NameMod = NameList.RandomName(m_From.Female ? "female" : "male");
-
- if (m_From is PlayerMobile pm)
- {
- if (hair)
- pm.SetHairMods(entry.m_ItemID, -2);
- else
- pm.SetHairMods(-2, entry.m_ItemID);
- }
-
- m_From.SendGump(new DisguiseGump(m_From, m_Kit, hair, true));
-
- DisguiseTimers.RemoveTimer(m_From);
-
- DisguiseTimers.CreateTimer(m_From, TimeSpan.FromHours(2.0));
- DisguiseTimers.StartTimer(m_From);
- }
- }
-
- private class DisguiseEntry
- {
- public readonly int m_GumpID;
- public readonly int m_ItemID;
- public readonly int m_Number;
- public readonly int m_OffsetX;
- public readonly int m_OffsetY;
-
- public DisguiseEntry(int itemID, int gumpID, int ox, int oy, int name)
- {
- m_ItemID = itemID;
- m_GumpID = gumpID;
- m_OffsetX = ox;
- m_OffsetY = oy;
- m_Number = name;
- }
- }
- }
-
- public class DisguiseTimers
- {
- public static Dictionary Timers { get; } = new Dictionary();
-
- public static void Initialize()
- {
- new DisguisePersistance();
- }
-
- public static void CreateTimer(Mobile m, TimeSpan delay)
- {
- if (m != null && !IsDisguised(m))
- Timers[m] = new InternalTimer(m, delay);
- }
-
- public static void StartTimer(Mobile m)
- {
- Timers.TryGetValue(m, out Timer t);
- t?.Start();
- }
-
- public static bool IsDisguised(Mobile m) => Timers.ContainsKey(m);
-
- public static void StopTimer(Mobile m)
- {
- if (!Timers.TryGetValue(m, out Timer t))
- return;
-
- TimeSpan ts = t.Next - DateTime.UtcNow;
- if (ts < TimeSpan.Zero)
- ts = TimeSpan.Zero;
-
- t.Delay = ts;
- t.Stop();
- }
-
- public static void RemoveTimer(Mobile m)
- {
- if (Timers.TryGetValue(m, out Timer t))
- {
- t.Stop();
- Timers.Remove(m);
- }
- }
-
- public static TimeSpan TimeRemaining(Mobile m) => Timers.TryGetValue(m, out Timer t) ? t.Next - DateTime.UtcNow : TimeSpan.Zero;
-
- private class InternalTimer : Timer
- {
- private readonly Mobile m_Player;
-
- public InternalTimer(Mobile m, TimeSpan delay) : base(delay)
- {
- m_Player = m;
- Priority = TimerPriority.OneMinute;
- }
-
- protected override void OnTick()
- {
- m_Player.NameMod = null;
-
- if (m_Player is PlayerMobile mobile)
- mobile.SetHairMods(-1, -1);
-
- RemoveTimer(m_Player);
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.Factions;
+using Server.Gumps;
+using Server.Mobiles;
+using Server.Network;
+using Server.SkillHandlers;
+using Server.Spells;
+using Server.Spells.Fifth;
+using Server.Spells.Seventh;
+
+namespace Server.Items
+{
+ public class DisguiseKit : Item
+ {
+ [Constructible]
+ public DisguiseKit() : base(0xE05) => Weight = 1.0;
+
+ public DisguiseKit(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041078; // a disguise kit
+
+ 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 bool ValidateUse(Mobile from)
+ {
+ PlayerMobile pm = from as PlayerMobile;
+
+ if (!IsChildOf(from.Backpack))
+ from.SendLocalizedMessage(1042001);
+ else if (pm == null || pm.NpcGuild != NpcGuild.ThievesGuild)
+ from.SendLocalizedMessage(501702);
+ else if (Stealing.SuspendOnMurder && pm.Kills > 0)
+ from.SendLocalizedMessage(501703);
+ else if (!from.CanBeginAction())
+ from.SendLocalizedMessage(501704);
+ else if (Sigil.ExistsOn(from))
+ from.SendLocalizedMessage(1010465); // You cannot disguise yourself while holding a sigil
+ else if (TransformationSpellHelper.UnderTransformation(from))
+ from.SendLocalizedMessage(1061634);
+ else if (from.BodyMod == 183 || from.BodyMod == 184)
+ from.SendLocalizedMessage(1040002);
+ else if (!from.CanBeginAction() || from.IsBodyMod)
+ from.SendLocalizedMessage(501705);
+ else
+ return true;
+
+ return false;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (ValidateUse(from))
+ from.SendGump(new DisguiseGump(from, this, true, false));
+ }
+ }
+
+ public class DisguiseGump : Gump
+ {
+ private static readonly DisguiseEntry[] m_HairEntries =
+ {
+ new DisguiseEntry(8251, 50700, 0, 5, 1011052), // Short
+ new DisguiseEntry(8261, 60710, 0, 3, 1011047), // Pageboy
+ new DisguiseEntry(8252, 60708, 0, -5, 1011053), // Long
+ new DisguiseEntry(8264, 60901, 0, 5, 1011048), // Receding
+ new DisguiseEntry(8253, 60702, 0, -5, 1011054), // Ponytail
+ new DisguiseEntry(8265, 60707, 0, -5, 1011049), // 2-tails
+ new DisguiseEntry(8260, 50703, 0, 5, 1011055), // Mohawk
+ new DisguiseEntry(8266, 60713, 0, 10, 1011050), // Topknot
+ null,
+ new DisguiseEntry(0, 0, 0, 0, 1011051) // None
+ };
+
+ private static readonly DisguiseEntry[] m_BeardEntries =
+ {
+ new DisguiseEntry(8269, 50906, 0, 0, 1011401), // Vandyke
+ new DisguiseEntry(8257, 50808, 0, -2, 1011062), // Mustache
+ new DisguiseEntry(8255, 50802, 0, 0, 1011060), // Short beard
+ new DisguiseEntry(8268, 50905, 0, -10, 1011061), // Long beard
+ new DisguiseEntry(8267, 50904, 0, 0, 1011060), // Short beard
+ new DisguiseEntry(8254, 50801, 0, -10, 1011061), // Long beard
+ null,
+ new DisguiseEntry(0, 0, 0, 0, 1011051) // None
+ };
+
+ private readonly Mobile m_From;
+ private readonly DisguiseKit m_Kit;
+ private readonly bool m_Used;
+
+ public DisguiseGump(Mobile from, DisguiseKit kit, bool startAtHair, bool used) : base(50, 50)
+ {
+ m_From = from;
+ m_Kit = kit;
+ m_Used = used;
+
+ from.CloseGump();
+
+ AddPage(0);
+
+ AddBackground(100, 10, 400, 385, 2600);
+
+ //
THIEF DISGUISE KIT
+ AddHtmlLocalized(100, 25, 400, 35, 1011045);
+
+ AddButton(140, 353, 4005, 4007, 0);
+ AddHtmlLocalized(172, 355, 90, 35, 1011036); // OKAY
+
+ AddButton(257, 353, 4005, 4007, 1);
+ AddHtmlLocalized(289, 355, 90, 35, 1011046); // APPLY
+
+ if (from.Female || from.Body.IsFemale)
+ {
+ DrawEntries(0, 1, -1, m_HairEntries, -1);
+ }
+ else if (startAtHair)
+ {
+ DrawEntries(0, 1, 2, m_HairEntries, 1011056);
+ DrawEntries(1, 2, 1, m_BeardEntries, 1011059);
+ }
+ else
+ {
+ DrawEntries(1, 1, 2, m_BeardEntries, 1011059);
+ DrawEntries(0, 2, 1, m_HairEntries, 1011056);
+ }
+ }
+
+ private void DrawEntries(int index, int page, int nextPage, DisguiseEntry[] entries, int nextNumber)
+ {
+ AddPage(page);
+
+ if (nextPage != -1)
+ {
+ AddButton(155, 320, 250 + index * 2, 251 + index * 2, 0, GumpButtonType.Page, nextPage);
+ AddHtmlLocalized(180, 320, 150, 35, nextNumber);
+ }
+
+ for (int i = 0; i < entries.Length; ++i)
+ {
+ DisguiseEntry entry = entries[i];
+
+ if (entry == null)
+ continue;
+
+ int x = i % 2 * 205;
+ int y = i / 2 * 55;
+
+ if (entry.m_GumpID != 0)
+ {
+ AddBackground(220 + x, 60 + y, 50, 50, 2620);
+ AddImage(153 + x + entry.m_OffsetX, 15 + y + entry.m_OffsetY, entry.m_GumpID);
+ }
+
+ AddHtmlLocalized(140 + x, 72 + y, 80, 35, entry.m_Number);
+ AddRadio(118 + x, 73 + y, 208, 209, false, i * 2 + index);
+ }
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (info.ButtonID == 0)
+ {
+ if (m_Used)
+ m_From.SendLocalizedMessage(501706); // Disguises wear off after 2 hours.
+ else
+ m_From.SendLocalizedMessage(501707); // You're looking good.
+
+ return;
+ }
+
+ int[] switches = info.Switches;
+
+ if (switches.Length == 0)
+ return;
+
+ int switched = switches[0];
+ int type = switched % 2;
+ int index = switched / 2;
+
+ bool hair = type == 0;
+
+ DisguiseEntry[] entries = hair ? m_HairEntries : m_BeardEntries;
+
+ if (index >= 0 && index < entries.Length)
+ {
+ DisguiseEntry entry = entries[index];
+
+ if (entry == null)
+ return;
+
+ if (!m_Kit.ValidateUse(m_From))
+ return;
+
+ if (!hair && (m_From.Female || m_From.Body.IsFemale))
+ return;
+
+ m_From.NameMod = NameList.RandomName(m_From.Female ? "female" : "male");
+
+ if (m_From is PlayerMobile pm)
+ {
+ if (hair)
+ pm.SetHairMods(entry.m_ItemID, -2);
+ else
+ pm.SetHairMods(-2, entry.m_ItemID);
+ }
+
+ m_From.SendGump(new DisguiseGump(m_From, m_Kit, hair, true));
+
+ DisguiseTimers.RemoveTimer(m_From);
+
+ DisguiseTimers.CreateTimer(m_From, TimeSpan.FromHours(2.0));
+ DisguiseTimers.StartTimer(m_From);
+ }
+ }
+
+ private class DisguiseEntry
+ {
+ public readonly int m_GumpID;
+ public readonly int m_ItemID;
+ public readonly int m_Number;
+ public readonly int m_OffsetX;
+ public readonly int m_OffsetY;
+
+ public DisguiseEntry(int itemID, int gumpID, int ox, int oy, int name)
+ {
+ m_ItemID = itemID;
+ m_GumpID = gumpID;
+ m_OffsetX = ox;
+ m_OffsetY = oy;
+ m_Number = name;
+ }
+ }
+ }
+
+ public class DisguiseTimers
+ {
+ public static Dictionary Timers { get; } = new Dictionary();
+
+ public static void Initialize()
+ {
+ new DisguisePersistance();
+ }
+
+ public static void CreateTimer(Mobile m, TimeSpan delay)
+ {
+ if (m != null && !IsDisguised(m))
+ Timers[m] = new InternalTimer(m, delay);
+ }
+
+ public static void StartTimer(Mobile m)
+ {
+ Timers.TryGetValue(m, out Timer t);
+ t?.Start();
+ }
+
+ public static bool IsDisguised(Mobile m) => Timers.ContainsKey(m);
+
+ public static void StopTimer(Mobile m)
+ {
+ if (!Timers.TryGetValue(m, out Timer t))
+ return;
+
+ TimeSpan ts = t.Next - DateTime.UtcNow;
+ if (ts < TimeSpan.Zero)
+ ts = TimeSpan.Zero;
+
+ t.Delay = ts;
+ t.Stop();
+ }
+
+ public static void RemoveTimer(Mobile m)
+ {
+ if (Timers.TryGetValue(m, out Timer t))
+ {
+ t.Stop();
+ Timers.Remove(m);
+ }
+ }
+
+ public static TimeSpan TimeRemaining(Mobile m) => Timers.TryGetValue(m, out Timer t) ? t.Next - DateTime.UtcNow : TimeSpan.Zero;
+
+ private class InternalTimer : Timer
+ {
+ private readonly Mobile m_Player;
+
+ public InternalTimer(Mobile m, TimeSpan delay) : base(delay)
+ {
+ m_Player = m;
+ Priority = TimerPriority.OneMinute;
+ }
+
+ protected override void OnTick()
+ {
+ m_Player.NameMod = null;
+
+ if (m_Player is PlayerMobile mobile)
+ mobile.SetHairMods(-1, -1);
+
+ RemoveTimer(m_Player);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs b/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs
index 62b3c0e36..d562bf5a5 100644
--- a/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs
+++ b/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs
@@ -1,72 +1,72 @@
-using System;
-using System.Collections.Generic;
-
-namespace Server.Items
-{
- public class DisguisePersistance : Item
- {
- public DisguisePersistance() : base(1)
- {
- Movable = false;
-
- if (Instance?.Deleted != false)
- Instance = this;
- else
- base.Delete();
- }
-
- public DisguisePersistance(Serial serial) : base(serial) => Instance = this;
-
- public static DisguisePersistance Instance { get; private set; }
-
- public override string DefaultName => "Disguise Persistance - Internal";
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- int timerCount = DisguiseTimers.Timers.Count;
-
- writer.Write(timerCount);
-
- foreach (KeyValuePair entry in DisguiseTimers.Timers)
- {
- Mobile m = entry.Key;
-
- writer.Write(m);
- writer.Write(entry.Value.Next - DateTime.UtcNow);
- writer.Write(m.NameMod);
- }
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- int count = reader.ReadInt();
-
- for (int i = 0; i < count; ++i)
- {
- Mobile m = reader.ReadMobile();
- DisguiseTimers.CreateTimer(m, reader.ReadTimeSpan());
- m.NameMod = reader.ReadString();
- }
-
- break;
- }
- }
- }
-
- public override void Delete()
- {
- }
- }
-}
+using System;
+using System.Collections.Generic;
+
+namespace Server.Items
+{
+ public class DisguisePersistance : Item
+ {
+ public DisguisePersistance() : base(1)
+ {
+ Movable = false;
+
+ if (Instance?.Deleted != false)
+ Instance = this;
+ else
+ base.Delete();
+ }
+
+ public DisguisePersistance(Serial serial) : base(serial) => Instance = this;
+
+ public static DisguisePersistance Instance { get; private set; }
+
+ public override string DefaultName => "Disguise Persistance - Internal";
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ int timerCount = DisguiseTimers.Timers.Count;
+
+ writer.Write(timerCount);
+
+ foreach (KeyValuePair entry in DisguiseTimers.Timers)
+ {
+ Mobile m = entry.Key;
+
+ writer.Write(m);
+ writer.Write(entry.Value.Next - DateTime.UtcNow);
+ writer.Write(m.NameMod);
+ }
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ int count = reader.ReadInt();
+
+ for (int i = 0; i < count; ++i)
+ {
+ Mobile m = reader.ReadMobile();
+ DisguiseTimers.CreateTimer(m, reader.ReadTimeSpan());
+ m.NameMod = reader.ReadString();
+ }
+
+ break;
+ }
+ }
+ }
+
+ public override void Delete()
+ {
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Thief/LockPick.cs b/Projects/UOContent/Items/Skill Items/Thief/LockPick.cs
index b2d09502e..6e98fe01d 100644
--- a/Projects/UOContent/Items/Skill Items/Thief/LockPick.cs
+++ b/Projects/UOContent/Items/Skill Items/Thief/LockPick.cs
@@ -1,160 +1,160 @@
-using System;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public interface ILockpickable : IPoint2D
- {
- int LockLevel { get; set; }
- bool Locked { get; set; }
- Mobile Picker { get; set; }
- int MaxLockLevel { get; set; }
- int RequiredSkill { get; set; }
-
- void LockPick(Mobile from);
- }
-
- [Flippable(0x14fc, 0x14fb)]
- public class Lockpick : Item
- {
- [Constructible]
- public Lockpick(int amount = 1) : base(0x14FC)
- {
- Stackable = true;
- Amount = amount;
- }
-
- public Lockpick(Serial serial) : base(serial)
- {
- }
-
- 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 == 0 && Weight == 0.1)
- Weight = -1;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- from.SendLocalizedMessage(502068); // What do you want to pick?
- from.Target = new InternalTarget(this);
- }
-
- private class InternalTarget : Target
- {
- private readonly Lockpick m_Item;
-
- public InternalTarget(Lockpick item) : base(1, false, TargetFlags.None) => m_Item = item;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Item.Deleted)
- return;
-
- if (targeted is ILockpickable lockpickable)
- {
- Item item = lockpickable as Item;
- from.Direction = from.GetDirectionTo(item);
-
- if (lockpickable.Locked)
- {
- from.PlaySound(0x241);
-
- new InternalTimer(from, lockpickable, m_Item).Start();
- }
- else
- {
- // The door is not locked
- from.SendLocalizedMessage(502069); // This does not appear to be locked
- }
- }
- else
- {
- from.SendLocalizedMessage(501666); // You can't unlock that!
- }
- }
-
- private class InternalTimer : Timer
- {
- private readonly Mobile m_From;
- private readonly ILockpickable m_Item;
- private readonly Lockpick m_Lockpick;
-
- public InternalTimer(Mobile from, ILockpickable item, Lockpick lockpick) : base(TimeSpan.FromSeconds(3.0))
- {
- m_From = from;
- m_Item = item;
- m_Lockpick = lockpick;
- Priority = TimerPriority.TwoFiftyMS;
- }
-
- protected void BrokeLockPickTest()
- {
- // When failed, a 25% chance to break the lockpick
- if (Utility.Random(4) == 0)
- {
- Item item = (Item)m_Item;
-
- // You broke the lockpick.
- item.SendLocalizedMessageTo(m_From, 502074);
-
- m_From.PlaySound(0x3A4);
- m_Lockpick.Consume();
- }
- }
-
- protected override void OnTick()
- {
- Item item = (Item)m_Item;
-
- if (!m_From.InRange(item.GetWorldLocation(), 1))
- return;
-
- if (m_Item.LockLevel == 0 || m_Item.LockLevel == -255)
- {
- // LockLevel of 0 means that the door can't be picklocked
- // LockLevel of -255 means it's magic locked
- item.SendLocalizedMessageTo(m_From, 502073); // This lock cannot be picked by normal means
- return;
- }
-
- if (m_From.Skills.Lockpicking.Value < m_Item.RequiredSkill)
- {
- /*
- // Do some training to gain skills
- m_From.CheckSkill( SkillName.Lockpicking, 0, m_Item.LockLevel );*/
-
- // The LockLevel is higher thant the LockPicking of the player
- item.SendLocalizedMessageTo(m_From, 502072); // You don't see how that lock can be manipulated.
- return;
- }
-
- if (m_From.CheckTargetSkill(SkillName.Lockpicking, m_Item, m_Item.LockLevel, m_Item.MaxLockLevel))
- {
- // Success! Pick the lock!
- item.SendLocalizedMessageTo(m_From, 502076); // The lock quickly yields to your skill.
- m_From.PlaySound(0x4A);
- m_Item.LockPick(m_From);
- }
- else
- {
- // The player failed to pick the lock
- BrokeLockPickTest();
- item.SendLocalizedMessageTo(m_From, 502075); // You are unable to pick the lock.
- }
- }
- }
- }
- }
-}
+using System;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public interface ILockpickable : IPoint2D
+ {
+ int LockLevel { get; set; }
+ bool Locked { get; set; }
+ Mobile Picker { get; set; }
+ int MaxLockLevel { get; set; }
+ int RequiredSkill { get; set; }
+
+ void LockPick(Mobile from);
+ }
+
+ [Flippable(0x14fc, 0x14fb)]
+ public class Lockpick : Item
+ {
+ [Constructible]
+ public Lockpick(int amount = 1) : base(0x14FC)
+ {
+ Stackable = true;
+ Amount = amount;
+ }
+
+ public Lockpick(Serial serial) : base(serial)
+ {
+ }
+
+ 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 == 0 && Weight == 0.1)
+ Weight = -1;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ from.SendLocalizedMessage(502068); // What do you want to pick?
+ from.Target = new InternalTarget(this);
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly Lockpick m_Item;
+
+ public InternalTarget(Lockpick item) : base(1, false, TargetFlags.None) => m_Item = item;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Item.Deleted)
+ return;
+
+ if (targeted is ILockpickable lockpickable)
+ {
+ Item item = lockpickable as Item;
+ from.Direction = from.GetDirectionTo(item);
+
+ if (lockpickable.Locked)
+ {
+ from.PlaySound(0x241);
+
+ new InternalTimer(from, lockpickable, m_Item).Start();
+ }
+ else
+ {
+ // The door is not locked
+ from.SendLocalizedMessage(502069); // This does not appear to be locked
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(501666); // You can't unlock that!
+ }
+ }
+
+ private class InternalTimer : Timer
+ {
+ private readonly Mobile m_From;
+ private readonly ILockpickable m_Item;
+ private readonly Lockpick m_Lockpick;
+
+ public InternalTimer(Mobile from, ILockpickable item, Lockpick lockpick) : base(TimeSpan.FromSeconds(3.0))
+ {
+ m_From = from;
+ m_Item = item;
+ m_Lockpick = lockpick;
+ Priority = TimerPriority.TwoFiftyMS;
+ }
+
+ protected void BrokeLockPickTest()
+ {
+ // When failed, a 25% chance to break the lockpick
+ if (Utility.Random(4) == 0)
+ {
+ Item item = (Item)m_Item;
+
+ // You broke the lockpick.
+ item.SendLocalizedMessageTo(m_From, 502074);
+
+ m_From.PlaySound(0x3A4);
+ m_Lockpick.Consume();
+ }
+ }
+
+ protected override void OnTick()
+ {
+ Item item = (Item)m_Item;
+
+ if (!m_From.InRange(item.GetWorldLocation(), 1))
+ return;
+
+ if (m_Item.LockLevel == 0 || m_Item.LockLevel == -255)
+ {
+ // LockLevel of 0 means that the door can't be picklocked
+ // LockLevel of -255 means it's magic locked
+ item.SendLocalizedMessageTo(m_From, 502073); // This lock cannot be picked by normal means
+ return;
+ }
+
+ if (m_From.Skills.Lockpicking.Value < m_Item.RequiredSkill)
+ {
+ /*
+ // Do some training to gain skills
+ m_From.CheckSkill( SkillName.Lockpicking, 0, m_Item.LockLevel );*/
+
+ // The LockLevel is higher thant the LockPicking of the player
+ item.SendLocalizedMessageTo(m_From, 502072); // You don't see how that lock can be manipulated.
+ return;
+ }
+
+ if (m_From.CheckTargetSkill(SkillName.Lockpicking, m_Item, m_Item.LockLevel, m_Item.MaxLockLevel))
+ {
+ // Success! Pick the lock!
+ item.SendLocalizedMessageTo(m_From, 502076); // The lock quickly yields to your skill.
+ m_From.PlaySound(0x4A);
+ m_Item.LockPick(m_From);
+ }
+ else
+ {
+ // The player failed to pick the lock
+ BrokeLockPickTest();
+ item.SendLocalizedMessageTo(m_From, 502075); // You are unable to pick the lock.
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Axle.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Axle.cs
index 33dcb25be..05c8ad244 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Axle.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Axle.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x105B, 0x105C)]
- public class Axle : Item
- {
- [Constructible]
- public Axle(int amount = 1) : base(0x105B)
- {
- Stackable = true;
- Amount = amount;
- Weight = 1.0;
- }
-
- public Axle(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
+{
+ [Flippable(0x105B, 0x105C)]
+ public class Axle : Item
+ {
+ [Constructible]
+ public Axle(int amount = 1) : base(0x105B)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 1.0;
+ }
+
+ public Axle(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/AxleGears.cs b/Projects/UOContent/Items/Skill Items/Tinkering/AxleGears.cs
index 969078743..429499544 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/AxleGears.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/AxleGears.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x1051, 0x1052)]
- public class AxleGears : Item
- {
- [Constructible]
- public AxleGears(int amount = 1) : base(0x1051)
- {
- Stackable = true;
- Amount = amount;
- Weight = 1.0;
- }
-
- public AxleGears(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
+{
+ [Flippable(0x1051, 0x1052)]
+ public class AxleGears : Item
+ {
+ [Constructible]
+ public AxleGears(int amount = 1) : base(0x1051)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 1.0;
+ }
+
+ public AxleGears(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/ClockFrame.cs b/Projects/UOContent/Items/Skill Items/Tinkering/ClockFrame.cs
index 60c144417..a129b852c 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/ClockFrame.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/ClockFrame.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x104D, 0x104E)]
- public class ClockFrame : Item
- {
- [Constructible]
- public ClockFrame(int amount = 1) : base(0x104D)
- {
- Stackable = true;
- Amount = amount;
- Weight = 2.0;
- }
-
- public ClockFrame(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
+{
+ [Flippable(0x104D, 0x104E)]
+ public class ClockFrame : Item
+ {
+ [Constructible]
+ public ClockFrame(int amount = 1) : base(0x104D)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 2.0;
+ }
+
+ public ClockFrame(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/ClockParts.cs b/Projects/UOContent/Items/Skill Items/Tinkering/ClockParts.cs
index 35ef1aeae..8827b584a 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/ClockParts.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/ClockParts.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x104F, 0x1050)]
- public class ClockParts : Item
- {
- [Constructible]
- public ClockParts(int amount = 1) : base(0x104F)
- {
- Stackable = true;
- Amount = amount;
- Weight = 1.0;
- }
-
- public ClockParts(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
+{
+ [Flippable(0x104F, 0x1050)]
+ public class ClockParts : Item
+ {
+ [Constructible]
+ public ClockParts(int amount = 1) : base(0x104F)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 1.0;
+ }
+
+ public ClockParts(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Clocks.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Clocks.cs
index 1c4d22165..75d8f04da 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Clocks.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Clocks.cs
@@ -1,194 +1,194 @@
-using System;
-
-namespace Server.Items
-{
- public enum MoonPhase
- {
- NewMoon,
- WaxingCrescentMoon,
- FirstQuarter,
- WaxingGibbous,
- FullMoon,
- WaningGibbous,
- LastQuarter,
- WaningCrescent
- }
-
- [Flippable(0x104B, 0x104C)]
- public class Clock : Item
- {
- public const double SecondsPerUOMinute = 5.0;
- public const double MinutesPerUODay = SecondsPerUOMinute * 24;
-
- private static readonly DateTime WorldStart = new DateTime(1997, 9, 1);
-
- [Constructible]
- public Clock(int itemID = 0x104B) : base(itemID) => Weight = 3.0;
-
- public Clock(Serial serial) : base(serial)
- {
- }
-
- public static DateTime ServerStart { get; private set; }
-
- public static void Initialize()
- {
- ServerStart = DateTime.UtcNow;
- }
-
- public static MoonPhase GetMoonPhase(Map map, int x, int y)
- {
- GetTime(map, x, y, out _, out _, out int totalMinutes);
-
- if (map != null)
- totalMinutes /= 10 + map.MapIndex * 20;
-
- return (MoonPhase)(totalMinutes % 8);
- }
-
- public static void GetTime(Map map, int x, int y, out int hours, out int minutes)
- {
- GetTime(map, x, y, out hours, out minutes, out _);
- }
-
- public static void GetTime(Map map, int x, int y, out int hours, out int minutes, out int totalMinutes)
- {
- TimeSpan timeSpan = DateTime.UtcNow - WorldStart;
-
- totalMinutes = (int)(timeSpan.TotalSeconds / SecondsPerUOMinute);
-
- if (map != null)
- totalMinutes += map.MapIndex * 320;
-
- // Really on OSI this must be by subserver
- totalMinutes += x / 16;
-
- hours = totalMinutes / 60 % 24;
- minutes = totalMinutes % 60;
- }
-
- public static void GetTime(out int generalNumber, out string exactTime)
- {
- GetTime(null, 0, 0, out generalNumber, out exactTime);
- }
-
- public static void GetTime(Mobile from, out int generalNumber, out string exactTime)
- {
- GetTime(from.Map, from.X, from.Y, out generalNumber, out exactTime);
- }
-
- public static void GetTime(Map map, int x, int y, out int generalNumber, out string exactTime)
- {
- GetTime(map, x, y, out int hours, out int minutes);
-
- // 00:00 AM - 00:59 AM : Witching hour
- // 01:00 AM - 03:59 AM : Middle of night
- // 04:00 AM - 07:59 AM : Early morning
- // 08:00 AM - 11:59 AM : Late morning
- // 12:00 PM - 12:59 PM : Noon
- // 01:00 PM - 03:59 PM : Afternoon
- // 04:00 PM - 07:59 PM : Early evening
- // 08:00 PM - 11:59 AM : Late at night
-
- if (hours >= 20)
- generalNumber = 1042957; // It's late at night
- else if (hours >= 16)
- generalNumber = 1042956; // It's early in the evening
- else if (hours >= 13)
- generalNumber = 1042955; // It's the afternoon
- else if (hours >= 12)
- generalNumber = 1042954; // It's around noon
- else if (hours >= 08)
- generalNumber = 1042953; // It's late in the morning
- else if (hours >= 04)
- generalNumber = 1042952; // It's early in the morning
- else if (hours >= 01)
- generalNumber = 1042951; // It's the middle of the night
- else
- generalNumber = 1042950; // 'Tis the witching hour. 12 Midnight.
-
- hours %= 12;
-
- if (hours == 0)
- hours = 12;
-
- exactTime = $"{hours}:{minutes:D2}";
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- GetTime(from, out int genericNumber, out string exactTime);
-
- SendLocalizedMessageTo(from, genericNumber);
- SendLocalizedMessageTo(from, 1042958, exactTime); // ~1_TIME~ to be exact
- }
-
- 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(0x104B, 0x104C)]
- public class ClockRight : Clock
- {
- [Constructible]
- public ClockRight() : base(0x104B)
- {
- }
-
- public ClockRight(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(0x104B, 0x104C)]
- public class ClockLeft : Clock
- {
- [Constructible]
- public ClockLeft() : base(0x104C)
- {
- }
-
- public ClockLeft(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 System;
+
+namespace Server.Items
+{
+ public enum MoonPhase
+ {
+ NewMoon,
+ WaxingCrescentMoon,
+ FirstQuarter,
+ WaxingGibbous,
+ FullMoon,
+ WaningGibbous,
+ LastQuarter,
+ WaningCrescent
+ }
+
+ [Flippable(0x104B, 0x104C)]
+ public class Clock : Item
+ {
+ public const double SecondsPerUOMinute = 5.0;
+ public const double MinutesPerUODay = SecondsPerUOMinute * 24;
+
+ private static readonly DateTime WorldStart = new DateTime(1997, 9, 1);
+
+ [Constructible]
+ public Clock(int itemID = 0x104B) : base(itemID) => Weight = 3.0;
+
+ public Clock(Serial serial) : base(serial)
+ {
+ }
+
+ public static DateTime ServerStart { get; private set; }
+
+ public static void Initialize()
+ {
+ ServerStart = DateTime.UtcNow;
+ }
+
+ public static MoonPhase GetMoonPhase(Map map, int x, int y)
+ {
+ GetTime(map, x, y, out _, out _, out int totalMinutes);
+
+ if (map != null)
+ totalMinutes /= 10 + map.MapIndex * 20;
+
+ return (MoonPhase)(totalMinutes % 8);
+ }
+
+ public static void GetTime(Map map, int x, int y, out int hours, out int minutes)
+ {
+ GetTime(map, x, y, out hours, out minutes, out _);
+ }
+
+ public static void GetTime(Map map, int x, int y, out int hours, out int minutes, out int totalMinutes)
+ {
+ TimeSpan timeSpan = DateTime.UtcNow - WorldStart;
+
+ totalMinutes = (int)(timeSpan.TotalSeconds / SecondsPerUOMinute);
+
+ if (map != null)
+ totalMinutes += map.MapIndex * 320;
+
+ // Really on OSI this must be by subserver
+ totalMinutes += x / 16;
+
+ hours = totalMinutes / 60 % 24;
+ minutes = totalMinutes % 60;
+ }
+
+ public static void GetTime(out int generalNumber, out string exactTime)
+ {
+ GetTime(null, 0, 0, out generalNumber, out exactTime);
+ }
+
+ public static void GetTime(Mobile from, out int generalNumber, out string exactTime)
+ {
+ GetTime(from.Map, from.X, from.Y, out generalNumber, out exactTime);
+ }
+
+ public static void GetTime(Map map, int x, int y, out int generalNumber, out string exactTime)
+ {
+ GetTime(map, x, y, out int hours, out int minutes);
+
+ // 00:00 AM - 00:59 AM : Witching hour
+ // 01:00 AM - 03:59 AM : Middle of night
+ // 04:00 AM - 07:59 AM : Early morning
+ // 08:00 AM - 11:59 AM : Late morning
+ // 12:00 PM - 12:59 PM : Noon
+ // 01:00 PM - 03:59 PM : Afternoon
+ // 04:00 PM - 07:59 PM : Early evening
+ // 08:00 PM - 11:59 AM : Late at night
+
+ if (hours >= 20)
+ generalNumber = 1042957; // It's late at night
+ else if (hours >= 16)
+ generalNumber = 1042956; // It's early in the evening
+ else if (hours >= 13)
+ generalNumber = 1042955; // It's the afternoon
+ else if (hours >= 12)
+ generalNumber = 1042954; // It's around noon
+ else if (hours >= 08)
+ generalNumber = 1042953; // It's late in the morning
+ else if (hours >= 04)
+ generalNumber = 1042952; // It's early in the morning
+ else if (hours >= 01)
+ generalNumber = 1042951; // It's the middle of the night
+ else
+ generalNumber = 1042950; // 'Tis the witching hour. 12 Midnight.
+
+ hours %= 12;
+
+ if (hours == 0)
+ hours = 12;
+
+ exactTime = $"{hours}:{minutes:D2}";
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ GetTime(from, out int genericNumber, out string exactTime);
+
+ SendLocalizedMessageTo(from, genericNumber);
+ SendLocalizedMessageTo(from, 1042958, exactTime); // ~1_TIME~ to be exact
+ }
+
+ 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(0x104B, 0x104C)]
+ public class ClockRight : Clock
+ {
+ [Constructible]
+ public ClockRight() : base(0x104B)
+ {
+ }
+
+ public ClockRight(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(0x104B, 0x104C)]
+ public class ClockLeft : Clock
+ {
+ [Constructible]
+ public ClockLeft() : base(0x104C)
+ {
+ }
+
+ public ClockLeft(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Gears.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Gears.cs
index 87ab52788..91e618877 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Gears.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Gears.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x1053, 0x1054)]
- public class Gears : Item
- {
- [Constructible]
- public Gears(int amount = 1) : base(0x1053)
- {
- Stackable = true;
- Amount = amount;
- Weight = 1.0;
- }
-
- public Gears(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
+{
+ [Flippable(0x1053, 0x1054)]
+ public class Gears : Item
+ {
+ [Constructible]
+ public Gears(int amount = 1) : base(0x1053)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 1.0;
+ }
+
+ public Gears(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Globe.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Globe.cs
index 9197b5ed6..54f24673f 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Globe.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Globe.cs
@@ -1,28 +1,28 @@
-namespace Server.Items
-{
- public class Globe : Item
- {
- [Constructible]
- public Globe() : base(0x1047) // It isn't flippable
- =>
- Weight = 3.0;
-
- public Globe(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 Globe : Item
+ {
+ [Constructible]
+ public Globe() : base(0x1047) // It isn't flippable
+ =>
+ Weight = 3.0;
+
+ public Globe(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Hinge.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Hinge.cs
index addbb79e0..bbf8171b6 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Hinge.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Hinge.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x1055, 0x1056)]
- public class Hinge : Item
- {
- [Constructible]
- public Hinge(int amount = 1) : base(0x1055)
- {
- Stackable = true;
- Amount = amount;
- Weight = 1.0;
- }
-
- public Hinge(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
+{
+ [Flippable(0x1055, 0x1056)]
+ public class Hinge : Item
+ {
+ [Constructible]
+ public Hinge(int amount = 1) : base(0x1055)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 1.0;
+ }
+
+ public Hinge(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/SextantParts.cs b/Projects/UOContent/Items/Skill Items/Tinkering/SextantParts.cs
index c1e537cc5..4ba60da71 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/SextantParts.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/SextantParts.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x1059, 0x105A)]
- public class SextantParts : Item
- {
- [Constructible]
- public SextantParts(int amount = 1) : base(0x1059)
- {
- Stackable = true;
- Amount = amount;
- Weight = 2.0;
- }
-
- public SextantParts(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
+{
+ [Flippable(0x1059, 0x105A)]
+ public class SextantParts : Item
+ {
+ [Constructible]
+ public SextantParts(int amount = 1) : base(0x1059)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 2.0;
+ }
+
+ public SextantParts(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Springs.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Springs.cs
index 9255b2f1b..628901102 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Springs.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Springs.cs
@@ -1,32 +1,32 @@
-namespace Server.Items
-{
- [Flippable(0x105D, 0x105E)]
- public class Springs : Item
- {
- [Constructible]
- public Springs(int amount = 1) : base(0x105D)
- {
- Stackable = true;
- Amount = amount;
- Weight = 1.0;
- }
-
- public Springs(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
+{
+ [Flippable(0x105D, 0x105E)]
+ public class Springs : Item
+ {
+ [Constructible]
+ public Springs(int amount = 1) : base(0x105D)
+ {
+ Stackable = true;
+ Amount = amount;
+ Weight = 1.0;
+ }
+
+ public Springs(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Spyglass.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Spyglass.cs
index b97c8f5d9..95b0d320a 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Spyglass.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Spyglass.cs
@@ -1,71 +1,71 @@
-using Server.Engines.Quests;
-using Server.Engines.Quests.Hag;
-using Server.Mobiles;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x14F5, 0x14F6)]
- public class Spyglass : Item
- {
- [Constructible]
- public Spyglass() : base(0x14F5) => Weight = 3.0;
-
- public Spyglass(Serial serial) : base(serial)
- {
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2,
- 1008155); // You peer into the heavens, seeking the moons...
-
- from.Send(new MessageLocalizedAffix(from.Serial, from.Body, MessageType.Regular, 0x3B2, 3,
- 1008146 + (int)Clock.GetMoonPhase(Map.Trammel, from.X, from.Y), "", AffixType.Prepend, "Trammel : ", ""));
- from.Send(new MessageLocalizedAffix(from.Serial, from.Body, MessageType.Regular, 0x3B2, 3,
- 1008146 + (int)Clock.GetMoonPhase(Map.Felucca, from.X, from.Y), "", AffixType.Prepend, "Felucca : ", ""));
-
- if (from is PlayerMobile player)
- {
- QuestSystem qs = player.Quest;
-
- if (!(qs is WitchApprenticeQuest))
- return;
-
- FindIngredientObjective obj = qs.FindObjective();
-
- if (obj?.Completed == false && obj.Ingredient == Ingredient.StarChart)
- {
- Clock.GetTime(from.Map, from.X, from.Y, out int hours, out int _);
-
- if (hours < 5 || hours > 17)
- {
- player.SendLocalizedMessage(
- 1055040); // You gaze up into the glittering night sky. With great care, you compose a chart of the most prominent star patterns.
-
- obj.Complete();
- }
- else
- {
- player.SendLocalizedMessage(
- 1055039); // You gaze up into the sky, but it is not dark enough to see any stars.
- }
- }
- }
- }
-
- 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.Quests;
+using Server.Engines.Quests.Hag;
+using Server.Mobiles;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x14F5, 0x14F6)]
+ public class Spyglass : Item
+ {
+ [Constructible]
+ public Spyglass() : base(0x14F5) => Weight = 3.0;
+
+ public Spyglass(Serial serial) : base(serial)
+ {
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2,
+ 1008155); // You peer into the heavens, seeking the moons...
+
+ from.Send(new MessageLocalizedAffix(from.Serial, from.Body, MessageType.Regular, 0x3B2, 3,
+ 1008146 + (int)Clock.GetMoonPhase(Map.Trammel, from.X, from.Y), "", AffixType.Prepend, "Trammel : ", ""));
+ from.Send(new MessageLocalizedAffix(from.Serial, from.Body, MessageType.Regular, 0x3B2, 3,
+ 1008146 + (int)Clock.GetMoonPhase(Map.Felucca, from.X, from.Y), "", AffixType.Prepend, "Felucca : ", ""));
+
+ if (from is PlayerMobile player)
+ {
+ QuestSystem qs = player.Quest;
+
+ if (!(qs is WitchApprenticeQuest))
+ return;
+
+ FindIngredientObjective obj = qs.FindObjective();
+
+ if (obj?.Completed == false && obj.Ingredient == Ingredient.StarChart)
+ {
+ Clock.GetTime(from.Map, from.X, from.Y, out int hours, out int _);
+
+ if (hours < 5 || hours > 17)
+ {
+ player.SendLocalizedMessage(
+ 1055040); // You gaze up into the glittering night sky. With great care, you compose a chart of the most prominent star patterns.
+
+ obj.Complete();
+ }
+ else
+ {
+ player.SendLocalizedMessage(
+ 1055039); // You gaze up into the sky, but it is not dark enough to see any stars.
+ }
+ }
+ }
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tinkering/Utensils.cs b/Projects/UOContent/Items/Skill Items/Tinkering/Utensils.cs
index 46955d459..96c437b34 100644
--- a/Projects/UOContent/Items/Skill Items/Tinkering/Utensils.cs
+++ b/Projects/UOContent/Items/Skill Items/Tinkering/Utensils.cs
@@ -1,245 +1,245 @@
-namespace Server.Items
-{
- [Flippable(0x9F4, 0x9F5, 0x9A3, 0x9A4)]
- public class Fork : Item
- {
- [Constructible]
- public Fork() : base(0x9F4) => Weight = 1.0;
-
- public Fork(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 ForkLeft : Item
- {
- [Constructible]
- public ForkLeft() : base(0x9F4) => Weight = 1.0;
-
- public ForkLeft(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 ForkRight : Item
- {
- [Constructible]
- public ForkRight() : base(0x9F5) => Weight = 1.0;
-
- public ForkRight(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(0x9F8, 0x9F9, 0x9C2, 0x9C3)]
- public class Spoon : Item
- {
- [Constructible]
- public Spoon() : base(0x9F8) => Weight = 1.0;
-
- public Spoon(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 SpoonLeft : Item
- {
- [Constructible]
- public SpoonLeft() : base(0x9F8) => Weight = 1.0;
-
- public SpoonLeft(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 SpoonRight : Item
- {
- [Constructible]
- public SpoonRight() : base(0x9F9) => Weight = 1.0;
-
- public SpoonRight(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(0x9F6, 0x9F7, 0x9A5, 0x9A6)]
- public class Knife : Item
- {
- [Constructible]
- public Knife() : base(0x9F6) => Weight = 1.0;
-
- public Knife(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 KnifeLeft : Item
- {
- [Constructible]
- public KnifeLeft() : base(0x9F6) => Weight = 1.0;
-
- public KnifeLeft(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 KnifeRight : Item
- {
- [Constructible]
- public KnifeRight() : base(0x9F7) => Weight = 1.0;
-
- public KnifeRight(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 Plate : Item
- {
- [Constructible]
- public Plate() : base(0x9D7) => Weight = 1.0;
-
- public Plate(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
+{
+ [Flippable(0x9F4, 0x9F5, 0x9A3, 0x9A4)]
+ public class Fork : Item
+ {
+ [Constructible]
+ public Fork() : base(0x9F4) => Weight = 1.0;
+
+ public Fork(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 ForkLeft : Item
+ {
+ [Constructible]
+ public ForkLeft() : base(0x9F4) => Weight = 1.0;
+
+ public ForkLeft(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 ForkRight : Item
+ {
+ [Constructible]
+ public ForkRight() : base(0x9F5) => Weight = 1.0;
+
+ public ForkRight(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(0x9F8, 0x9F9, 0x9C2, 0x9C3)]
+ public class Spoon : Item
+ {
+ [Constructible]
+ public Spoon() : base(0x9F8) => Weight = 1.0;
+
+ public Spoon(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 SpoonLeft : Item
+ {
+ [Constructible]
+ public SpoonLeft() : base(0x9F8) => Weight = 1.0;
+
+ public SpoonLeft(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 SpoonRight : Item
+ {
+ [Constructible]
+ public SpoonRight() : base(0x9F9) => Weight = 1.0;
+
+ public SpoonRight(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(0x9F6, 0x9F7, 0x9A5, 0x9A6)]
+ public class Knife : Item
+ {
+ [Constructible]
+ public Knife() : base(0x9F6) => Weight = 1.0;
+
+ public Knife(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 KnifeLeft : Item
+ {
+ [Constructible]
+ public KnifeLeft() : base(0x9F6) => Weight = 1.0;
+
+ public KnifeLeft(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 KnifeRight : Item
+ {
+ [Constructible]
+ public KnifeRight() : base(0x9F7) => Weight = 1.0;
+
+ public KnifeRight(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 Plate : Item
+ {
+ [Constructible]
+ public Plate() : base(0x9D7) => Weight = 1.0;
+
+ public Plate(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs b/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs
index 403db60d2..573b644b1 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs
@@ -1,918 +1,918 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace Server.Items
-{
- public abstract class BaseRunicTool : BaseTool
- {
- private const int MaxProperties = 32;
-
- private static bool m_IsRunicTool;
- private static int m_LuckChance;
-
- private static readonly SkillName[] m_PossibleBonusSkills =
- {
- SkillName.Swords,
- SkillName.Fencing,
- SkillName.Macing,
- SkillName.Archery,
- SkillName.Wrestling,
- SkillName.Parry,
- SkillName.Tactics,
- SkillName.Anatomy,
- SkillName.Healing,
- SkillName.Magery,
- SkillName.Meditation,
- SkillName.EvalInt,
- SkillName.MagicResist,
- SkillName.AnimalTaming,
- SkillName.AnimalLore,
- SkillName.Veterinary,
- SkillName.Musicianship,
- SkillName.Provocation,
- SkillName.Discordance,
- SkillName.Peacemaking,
- SkillName.Chivalry,
- SkillName.Focus,
- SkillName.Necromancy,
- SkillName.Stealing,
- SkillName.Stealth,
- SkillName.SpiritSpeak,
- SkillName.Bushido,
- SkillName.Ninjitsu
- };
-
- private static readonly SkillName[] m_PossibleSpellbookSkills =
- {
- SkillName.Magery,
- SkillName.Meditation,
- SkillName.EvalInt,
- SkillName.MagicResist
- };
-
- private static readonly BitArray m_Props = new BitArray(MaxProperties);
- private static readonly int[] m_Possible = new int[MaxProperties];
- private CraftResource m_Resource;
-
- public BaseRunicTool(CraftResource resource, int itemID) : base(itemID) => m_Resource = resource;
-
- public BaseRunicTool(CraftResource resource, int uses, int itemID) : base(uses, itemID) => m_Resource = resource;
-
- public BaseRunicTool(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public CraftResource Resource
- {
- get => m_Resource;
- set
- {
- m_Resource = value;
- Hue = CraftResources.GetHue(m_Resource);
- InvalidateProperties();
- }
- }
-
- 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;
- }
- }
- }
-
- private static int Scale(int min, int max, int low, int high)
- {
- int percent;
-
- if (m_IsRunicTool)
- {
- percent = Utility.RandomMinMax(min, max);
- }
- else
- {
- // Behold, the worst system ever!
- int v = Utility.RandomMinMax(0, 10000);
-
- v = (int)Math.Sqrt(v);
- v = 100 - v;
-
- if (LootPack.CheckLuck(m_LuckChance))
- v += 10;
-
- if (v < min)
- v = min;
- else if (v > max)
- v = max;
-
- percent = v;
- }
-
- int scaledBy = Math.Abs(high - low) + 1;
-
- if (scaledBy != 0)
- scaledBy = 10000 / scaledBy;
-
- percent *= 10000 + scaledBy;
-
- return low + (high - low) * percent / 1000001;
- }
-
- private static void ApplyAttribute(AosAttributes attrs, int min, int max, AosAttribute attr, int low, int high,
- int scale = 1)
- {
- if (attr == AosAttribute.CastSpeed)
- attrs[attr] += Scale(min, max, low / scale, high / scale) * scale;
- else
- attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
-
- if (attr == AosAttribute.SpellChanneling)
- attrs[AosAttribute.CastSpeed] -= 1;
- }
-
- private static void ApplyAttribute(AosArmorAttributes attrs, int min, int max, AosArmorAttribute attr, int low,
- int high)
- {
- attrs[attr] = Scale(min, max, low, high);
- }
-
- private static void ApplyAttribute(AosArmorAttributes attrs, int min, int max, AosArmorAttribute attr, int low,
- int high, int scale)
- {
- attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
- }
-
- private static void ApplyAttribute(AosWeaponAttributes attrs, int min, int max, AosWeaponAttribute attr, int low,
- int high)
- {
- attrs[attr] = Scale(min, max, low, high);
- }
-
- private static void ApplyAttribute(AosWeaponAttributes attrs, int min, int max, AosWeaponAttribute attr, int low,
- int high, int scale)
- {
- attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
- }
-
- private static void ApplyAttribute(AosElementAttributes attrs, int min, int max, AosElementAttribute attr, int low,
- int high)
- {
- attrs[attr] = Scale(min, max, low, high);
- }
-
- private static void ApplyAttribute(AosElementAttributes attrs, int min, int max, AosElementAttribute attr, int low,
- int high, int scale)
- {
- attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
- }
-
- private static void ApplySkillBonus(AosSkillBonuses attrs, int min, int max, int index, int low, int high)
- {
- List possibleSkills =
- new List(attrs.Owner is Spellbook ? m_PossibleSpellbookSkills : m_PossibleBonusSkills);
- int count = Core.SE ? possibleSkills.Count : possibleSkills.Count - 2;
-
- SkillName sk;
- bool found;
-
- do
- {
- found = false;
- sk = possibleSkills[Utility.Random(count--)];
- possibleSkills.Remove(sk);
-
- for (int i = 0; !found && i < 5; ++i)
- found = attrs.GetValues(i, out SkillName check, out _) && check == sk;
- } while (found && count > 0);
-
- attrs.SetValues(index, sk, Scale(min, max, low, high));
- }
-
- private static void ApplyResistance(BaseArmor ar, int min, int max, ResistanceType res, int low, int high)
- {
- switch (res)
- {
- case ResistanceType.Physical:
- ar.PhysicalBonus += Scale(min, max, low, high);
- break;
- case ResistanceType.Fire:
- ar.FireBonus += Scale(min, max, low, high);
- break;
- case ResistanceType.Cold:
- ar.ColdBonus += Scale(min, max, low, high);
- break;
- case ResistanceType.Poison:
- ar.PoisonBonus += Scale(min, max, low, high);
- break;
- case ResistanceType.Energy:
- ar.EnergyBonus += Scale(min, max, low, high);
- break;
- }
- }
-
- public static int GetUniqueRandom(int count)
- {
- int avail = 0;
-
- for (int i = 0; i < count; ++i)
- if (!m_Props[i])
- m_Possible[avail++] = i;
-
- if (avail == 0)
- return -1;
-
- int v = m_Possible[Utility.Random(avail)];
-
- m_Props.Set(v, true);
-
- return v;
- }
-
- public void ApplyAttributesTo(BaseWeapon weapon)
- {
- CraftResourceInfo resInfo = CraftResources.GetInfo(m_Resource);
-
- CraftAttributeInfo attrs = resInfo?.AttributeInfo;
-
- if (attrs == null)
- return;
-
- int attributeCount = Utility.RandomMinMax(attrs.RunicMinAttributes, attrs.RunicMaxAttributes);
- int min = attrs.RunicMinIntensity;
- int max = attrs.RunicMaxIntensity;
-
- ApplyAttributesTo(weapon, true, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(BaseWeapon weapon, int attributeCount, int min, int max)
- {
- ApplyAttributesTo(weapon, false, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(BaseWeapon weapon, bool isRunicTool, int luckChance, int attributeCount,
- int min, int max)
- {
- m_IsRunicTool = isRunicTool;
- m_LuckChance = luckChance;
-
- AosAttributes primary = weapon.Attributes;
- AosWeaponAttributes secondary = weapon.WeaponAttributes;
-
- m_Props.SetAll(false);
-
- if (weapon is BaseRanged)
- m_Props.Set(2, true); // ranged weapons cannot be ubws or mageweapon
-
- for (int i = 0; i < attributeCount; ++i)
- {
- int random = GetUniqueRandom(25);
-
- if (random == -1)
- break;
-
- switch (random)
- {
- case 0:
- {
- switch (Utility.Random(5))
- {
- case 0:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitPhysicalArea, 2, 50, 2);
- break;
- case 1:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitFireArea, 2, 50, 2);
- break;
- case 2:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitColdArea, 2, 50, 2);
- break;
- case 3:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitPoisonArea, 2, 50, 2);
- break;
- case 4:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitEnergyArea, 2, 50, 2);
- break;
- }
-
- break;
- }
- case 1:
- {
- switch (Utility.Random(4))
- {
- case 0:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitMagicArrow, 2, 50, 2);
- break;
- case 1:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitHarm, 2, 50, 2);
- break;
- case 2:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitFireball, 2, 50, 2);
- break;
- case 3:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLightning, 2, 50, 2);
- break;
- }
-
- break;
- }
- case 2:
- {
- switch (Utility.Random(2))
- {
- case 0:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.UseBestSkill, 1, 1);
- break;
- case 1:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.MageWeapon, 1, 10);
- break;
- }
-
- break;
- }
- case 3:
- ApplyAttribute(primary, min, max, AosAttribute.WeaponDamage, 1, 50);
- break;
- case 4:
- ApplyAttribute(primary, min, max, AosAttribute.DefendChance, 1, 15);
- break;
- case 5:
- ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
- break;
- case 6:
- ApplyAttribute(primary, min, max, AosAttribute.AttackChance, 1, 15);
- break;
- case 7:
- ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
- break;
- case 8:
- ApplyAttribute(primary, min, max, AosAttribute.WeaponSpeed, 5, 30, 5);
- break;
- case 9:
- ApplyAttribute(primary, min, max, AosAttribute.SpellChanneling, 1, 1);
- break;
- case 10:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitDispel, 2, 50, 2);
- break;
- case 11:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLeechHits, 2, 50, 2);
- break;
- case 12:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLowerAttack, 2, 50, 2);
- break;
- case 13:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLowerDefend, 2, 50, 2);
- break;
- case 14:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLeechMana, 2, 50, 2);
- break;
- case 15:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLeechStam, 2, 50, 2);
- break;
- case 16:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.LowerStatReq, 10, 100, 10);
- break;
- case 17:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistPhysicalBonus, 1, 15);
- break;
- case 18:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistFireBonus, 1, 15);
- break;
- case 19:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistColdBonus, 1, 15);
- break;
- case 20:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistPoisonBonus, 1, 15);
- break;
- case 21:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistEnergyBonus, 1, 15);
- break;
- case 22:
- ApplyAttribute(secondary, min, max, AosWeaponAttribute.DurabilityBonus, 10, 100, 10);
- break;
- case 23:
- weapon.Slayer = GetRandomSlayer();
- break;
- case 24:
- GetElementalDamages(weapon);
- break;
- }
- }
- }
-
- public static void GetElementalDamages(BaseWeapon weapon)
- {
- GetElementalDamages(weapon, true);
- }
-
- public static void GetElementalDamages(BaseWeapon weapon, bool randomizeOrder)
- {
- weapon.GetDamageTypes(null, out int phys, out _, out _, out _, out _, out _, out _);
-
- int totalDamage = phys;
-
- AosElementAttribute[] attrs =
- {
- AosElementAttribute.Cold,
- AosElementAttribute.Energy,
- AosElementAttribute.Fire,
- AosElementAttribute.Poison
- };
-
- if (randomizeOrder)
- for (int i = 0; i < attrs.Length; i++)
- {
- AosElementAttribute temp = attrs[i];
- int rand = Utility.Random(attrs.Length);
-
- attrs[i] = attrs[rand];
- attrs[rand] = temp;
- }
-
- /*
- totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Cold, totalDamage );
- totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Energy, totalDamage );
- totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Fire, totalDamage );
- totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Poison, totalDamage );
-
- weapon.AosElementDamages[AosElementAttribute.Physical] = 100 - totalDamage;
- * */
-
- for (int i = 0; i < attrs.Length; i++)
- totalDamage = AssignElementalDamage(weapon, attrs[i], totalDamage);
-
- // Order is Cold, Energy, Fire, Poison -> Physical left
- // Cannot be looped, AoselementAttribute is 'out of order'
-
- weapon.Hue = weapon.GetElementalDamageHue();
- }
-
- private static int AssignElementalDamage(BaseWeapon weapon, AosElementAttribute attr, int totalDamage)
- {
- if (totalDamage <= 0)
- return 0;
-
- int random = Utility.Random(totalDamage / 10 + 1) * 10;
- weapon.AosElementDamages[attr] = random;
-
- return totalDamage - random;
- }
-
- public static SlayerName GetRandomSlayer()
- {
- // TODO: Check random algorithm on OSI
-
- SlayerGroup[] groups = SlayerGroup.Groups;
-
- if (groups.Length == 0)
- return SlayerName.None;
-
- SlayerGroup
- group = groups[
- Utility.Random(groups.Length -
- 1)]; // -1 To Exclude the Fey Slayer which appears ONLY on a certain artifact.
- SlayerEntry entry;
-
- if (Utility.Random(100) < 10) // 10% chance to do super slayer
- {
- entry = group.Super;
- }
- else
- {
- SlayerEntry[] entries = group.Entries;
-
- if (entries.Length == 0)
- return SlayerName.None;
-
- entry = entries.RandomElement();
- }
-
- return entry.Name;
- }
-
- public void ApplyAttributesTo(BaseArmor armor)
- {
- CraftResourceInfo resInfo = CraftResources.GetInfo(m_Resource);
-
- CraftAttributeInfo attrs = resInfo?.AttributeInfo;
-
- if (attrs == null)
- return;
-
- int attributeCount = Utility.RandomMinMax(attrs.RunicMinAttributes, attrs.RunicMaxAttributes);
- int min = attrs.RunicMinIntensity;
- int max = attrs.RunicMaxIntensity;
-
- ApplyAttributesTo(armor, true, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(BaseArmor armor, int attributeCount, int min, int max)
- {
- ApplyAttributesTo(armor, false, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(BaseArmor armor, bool isRunicTool, int luckChance, int attributeCount, int min,
- int max)
- {
- m_IsRunicTool = isRunicTool;
- m_LuckChance = luckChance;
-
- AosAttributes primary = armor.Attributes;
- AosArmorAttributes secondary = armor.ArmorAttributes;
-
- m_Props.SetAll(false);
-
- bool isShield = armor is BaseShield;
- int baseCount = isShield ? 7 : 20;
- int baseOffset = isShield ? 0 : 4;
-
- if (!isShield && armor.MeditationAllowance == ArmorMeditationAllowance.All)
- m_Props.Set(3, true); // remove mage armor from possible properties
- if (armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather)
- {
- m_Props.Set(0, true); // remove lower requirements from possible properties for leather armor
- m_Props.Set(2, true); // remove durability bonus from possible properties
- }
-
- if (armor.RequiredRace == Race.Elf)
- m_Props.Set(7,
- true); // elves inherently have night sight and elf only armor doesn't get night sight as a mod
-
- for (int i = 0; i < attributeCount; ++i)
- {
- int random = GetUniqueRandom(baseCount);
-
- if (random == -1)
- break;
-
- random += baseOffset;
-
- switch (random)
- {
- /* Begin Sheilds */
- case 0:
- ApplyAttribute(primary, min, max, AosAttribute.SpellChanneling, 1, 1);
- break;
- case 1:
- ApplyAttribute(primary, min, max, AosAttribute.DefendChance, 1, 15);
- break;
- case 2:
- if (Core.ML)
- ApplyAttribute(primary, min, max, AosAttribute.ReflectPhysical, 1, 15);
- else
- ApplyAttribute(primary, min, max, AosAttribute.AttackChance, 1, 15);
- break;
- case 3:
- ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
- break;
- /* Begin Armor */
- case 4:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.LowerStatReq, 10, 100, 10);
- break;
- case 5:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5);
- break;
- case 6:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10);
- break;
- /* End Shields */
- case 7:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.MageArmor, 1, 1);
- break;
- case 8:
- ApplyAttribute(primary, min, max, AosAttribute.RegenHits, 1, 2);
- break;
- case 9:
- ApplyAttribute(primary, min, max, AosAttribute.RegenStam, 1, 3);
- break;
- case 10:
- ApplyAttribute(primary, min, max, AosAttribute.RegenMana, 1, 2);
- break;
- case 11:
- ApplyAttribute(primary, min, max, AosAttribute.NightSight, 1, 1);
- break;
- case 12:
- ApplyAttribute(primary, min, max, AosAttribute.BonusHits, 1, 5);
- break;
- case 13:
- ApplyAttribute(primary, min, max, AosAttribute.BonusStam, 1, 8);
- break;
- case 14:
- ApplyAttribute(primary, min, max, AosAttribute.BonusMana, 1, 8);
- break;
- case 15:
- ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
- break;
- case 16:
- ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
- break;
- case 17:
- ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
- break;
- case 18:
- ApplyAttribute(primary, min, max, AosAttribute.ReflectPhysical, 1, 15);
- break;
- case 19:
- ApplyResistance(armor, min, max, ResistanceType.Physical, 1, 15);
- break;
- case 20:
- ApplyResistance(armor, min, max, ResistanceType.Fire, 1, 15);
- break;
- case 21:
- ApplyResistance(armor, min, max, ResistanceType.Cold, 1, 15);
- break;
- case 22:
- ApplyResistance(armor, min, max, ResistanceType.Poison, 1, 15);
- break;
- case 23:
- ApplyResistance(armor, min, max, ResistanceType.Energy, 1, 15);
- break;
- /* End Armor */
- }
- }
- }
-
- public static void ApplyAttributesTo(BaseHat hat, int attributeCount, int min, int max)
- {
- ApplyAttributesTo(hat, false, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(BaseHat hat, bool isRunicTool, int luckChance, int attributeCount, int min,
- int max)
- {
- m_IsRunicTool = isRunicTool;
- m_LuckChance = luckChance;
-
- AosAttributes primary = hat.Attributes;
- AosArmorAttributes secondary = hat.ClothingAttributes;
- AosElementAttributes resists = hat.Resistances;
-
- m_Props.SetAll(false);
-
- for (int i = 0; i < attributeCount; ++i)
- {
- int random = GetUniqueRandom(19);
-
- if (random == -1)
- break;
-
- switch (random)
- {
- case 0:
- ApplyAttribute(primary, min, max, AosAttribute.ReflectPhysical, 1, 15);
- break;
- case 1:
- ApplyAttribute(primary, min, max, AosAttribute.RegenHits, 1, 2);
- break;
- case 2:
- ApplyAttribute(primary, min, max, AosAttribute.RegenStam, 1, 3);
- break;
- case 3:
- ApplyAttribute(primary, min, max, AosAttribute.RegenMana, 1, 2);
- break;
- case 4:
- ApplyAttribute(primary, min, max, AosAttribute.NightSight, 1, 1);
- break;
- case 5:
- ApplyAttribute(primary, min, max, AosAttribute.BonusHits, 1, 5);
- break;
- case 6:
- ApplyAttribute(primary, min, max, AosAttribute.BonusStam, 1, 8);
- break;
- case 7:
- ApplyAttribute(primary, min, max, AosAttribute.BonusMana, 1, 8);
- break;
- case 8:
- ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
- break;
- case 9:
- ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
- break;
- case 10:
- ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
- break;
- case 11:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.LowerStatReq, 10, 100, 10);
- break;
- case 12:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5);
- break;
- case 13:
- ApplyAttribute(secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10);
- break;
- case 14:
- ApplyAttribute(resists, min, max, AosElementAttribute.Physical, 1, 15);
- break;
- case 15:
- ApplyAttribute(resists, min, max, AosElementAttribute.Fire, 1, 15);
- break;
- case 16:
- ApplyAttribute(resists, min, max, AosElementAttribute.Cold, 1, 15);
- break;
- case 17:
- ApplyAttribute(resists, min, max, AosElementAttribute.Poison, 1, 15);
- break;
- case 18:
- ApplyAttribute(resists, min, max, AosElementAttribute.Energy, 1, 15);
- break;
- }
- }
- }
-
- public static void ApplyAttributesTo(BaseJewel jewelry, int attributeCount, int min, int max)
- {
- ApplyAttributesTo(jewelry, false, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(BaseJewel jewelry, bool isRunicTool, int luckChance, int attributeCount,
- int min, int max)
- {
- m_IsRunicTool = isRunicTool;
- m_LuckChance = luckChance;
-
- AosAttributes primary = jewelry.Attributes;
- AosElementAttributes resists = jewelry.Resistances;
- AosSkillBonuses skills = jewelry.SkillBonuses;
-
- m_Props.SetAll(false);
-
- for (int i = 0; i < attributeCount; ++i)
- {
- int random = GetUniqueRandom(24);
-
- if (random == -1)
- break;
-
- switch (random)
- {
- case 0:
- ApplyAttribute(resists, min, max, AosElementAttribute.Physical, 1, 15);
- break;
- case 1:
- ApplyAttribute(resists, min, max, AosElementAttribute.Fire, 1, 15);
- break;
- case 2:
- ApplyAttribute(resists, min, max, AosElementAttribute.Cold, 1, 15);
- break;
- case 3:
- ApplyAttribute(resists, min, max, AosElementAttribute.Poison, 1, 15);
- break;
- case 4:
- ApplyAttribute(resists, min, max, AosElementAttribute.Energy, 1, 15);
- break;
- case 5:
- ApplyAttribute(primary, min, max, AosAttribute.WeaponDamage, 1, 25);
- break;
- case 6:
- ApplyAttribute(primary, min, max, AosAttribute.DefendChance, 1, 15);
- break;
- case 7:
- ApplyAttribute(primary, min, max, AosAttribute.AttackChance, 1, 15);
- break;
- case 8:
- ApplyAttribute(primary, min, max, AosAttribute.BonusStr, 1, 8);
- break;
- case 9:
- ApplyAttribute(primary, min, max, AosAttribute.BonusDex, 1, 8);
- break;
- case 10:
- ApplyAttribute(primary, min, max, AosAttribute.BonusInt, 1, 8);
- break;
- case 11:
- ApplyAttribute(primary, min, max, AosAttribute.EnhancePotions, 5, 25, 5);
- break;
- case 12:
- ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
- break;
- case 13:
- ApplyAttribute(primary, min, max, AosAttribute.CastRecovery, 1, 3);
- break;
- case 14:
- ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
- break;
- case 15:
- ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
- break;
- case 16:
- ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
- break;
- case 17:
- ApplyAttribute(primary, min, max, AosAttribute.SpellDamage, 1, 12);
- break;
- case 18:
- ApplyAttribute(primary, min, max, AosAttribute.NightSight, 1, 1);
- break;
- case 19:
- ApplySkillBonus(skills, min, max, 0, 1, 15);
- break;
- case 20:
- ApplySkillBonus(skills, min, max, 1, 1, 15);
- break;
- case 21:
- ApplySkillBonus(skills, min, max, 2, 1, 15);
- break;
- case 22:
- ApplySkillBonus(skills, min, max, 3, 1, 15);
- break;
- case 23:
- ApplySkillBonus(skills, min, max, 4, 1, 15);
- break;
- }
- }
- }
-
- public static void ApplyAttributesTo(Spellbook spellbook, int attributeCount, int min, int max)
- {
- ApplyAttributesTo(spellbook, false, 0, attributeCount, min, max);
- }
-
- public static void ApplyAttributesTo(Spellbook spellbook, bool isRunicTool, int luckChance, int attributeCount,
- int min, int max)
- {
- m_IsRunicTool = isRunicTool;
- m_LuckChance = luckChance;
-
- AosAttributes primary = spellbook.Attributes;
- AosSkillBonuses skills = spellbook.SkillBonuses;
-
- m_Props.SetAll(false);
-
- for (int i = 0; i < attributeCount; ++i)
- {
- int random = GetUniqueRandom(16);
-
- if (random == -1)
- break;
-
- switch (random)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- {
- ApplyAttribute(primary, min, max, AosAttribute.BonusInt, 1, 8);
-
- for (int j = 0; j < 4; ++j)
- m_Props.Set(j, true);
-
- break;
- }
- case 4:
- ApplyAttribute(primary, min, max, AosAttribute.BonusMana, 1, 8);
- break;
- case 5:
- ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
- break;
- case 6:
- ApplyAttribute(primary, min, max, AosAttribute.CastRecovery, 1, 3);
- break;
- case 7:
- ApplyAttribute(primary, min, max, AosAttribute.SpellDamage, 1, 12);
- break;
- case 8:
- ApplySkillBonus(skills, min, max, 0, 1, 15);
- break;
- case 9:
- ApplySkillBonus(skills, min, max, 1, 1, 15);
- break;
- case 10:
- ApplySkillBonus(skills, min, max, 2, 1, 15);
- break;
- case 11:
- ApplySkillBonus(skills, min, max, 3, 1, 15);
- break;
- case 12:
- ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
- break;
- case 13:
- ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
- break;
- case 14:
- ApplyAttribute(primary, min, max, AosAttribute.RegenMana, 1, 2);
- break;
- case 15:
- spellbook.Slayer = GetRandomSlayer();
- break;
- }
- }
- }
- }
-}
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace Server.Items
+{
+ public abstract class BaseRunicTool : BaseTool
+ {
+ private const int MaxProperties = 32;
+
+ private static bool m_IsRunicTool;
+ private static int m_LuckChance;
+
+ private static readonly SkillName[] m_PossibleBonusSkills =
+ {
+ SkillName.Swords,
+ SkillName.Fencing,
+ SkillName.Macing,
+ SkillName.Archery,
+ SkillName.Wrestling,
+ SkillName.Parry,
+ SkillName.Tactics,
+ SkillName.Anatomy,
+ SkillName.Healing,
+ SkillName.Magery,
+ SkillName.Meditation,
+ SkillName.EvalInt,
+ SkillName.MagicResist,
+ SkillName.AnimalTaming,
+ SkillName.AnimalLore,
+ SkillName.Veterinary,
+ SkillName.Musicianship,
+ SkillName.Provocation,
+ SkillName.Discordance,
+ SkillName.Peacemaking,
+ SkillName.Chivalry,
+ SkillName.Focus,
+ SkillName.Necromancy,
+ SkillName.Stealing,
+ SkillName.Stealth,
+ SkillName.SpiritSpeak,
+ SkillName.Bushido,
+ SkillName.Ninjitsu
+ };
+
+ private static readonly SkillName[] m_PossibleSpellbookSkills =
+ {
+ SkillName.Magery,
+ SkillName.Meditation,
+ SkillName.EvalInt,
+ SkillName.MagicResist
+ };
+
+ private static readonly BitArray m_Props = new BitArray(MaxProperties);
+ private static readonly int[] m_Possible = new int[MaxProperties];
+ private CraftResource m_Resource;
+
+ public BaseRunicTool(CraftResource resource, int itemID) : base(itemID) => m_Resource = resource;
+
+ public BaseRunicTool(CraftResource resource, int uses, int itemID) : base(uses, itemID) => m_Resource = resource;
+
+ public BaseRunicTool(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public CraftResource Resource
+ {
+ get => m_Resource;
+ set
+ {
+ m_Resource = value;
+ Hue = CraftResources.GetHue(m_Resource);
+ InvalidateProperties();
+ }
+ }
+
+ 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;
+ }
+ }
+ }
+
+ private static int Scale(int min, int max, int low, int high)
+ {
+ int percent;
+
+ if (m_IsRunicTool)
+ {
+ percent = Utility.RandomMinMax(min, max);
+ }
+ else
+ {
+ // Behold, the worst system ever!
+ int v = Utility.RandomMinMax(0, 10000);
+
+ v = (int)Math.Sqrt(v);
+ v = 100 - v;
+
+ if (LootPack.CheckLuck(m_LuckChance))
+ v += 10;
+
+ if (v < min)
+ v = min;
+ else if (v > max)
+ v = max;
+
+ percent = v;
+ }
+
+ int scaledBy = Math.Abs(high - low) + 1;
+
+ if (scaledBy != 0)
+ scaledBy = 10000 / scaledBy;
+
+ percent *= 10000 + scaledBy;
+
+ return low + (high - low) * percent / 1000001;
+ }
+
+ private static void ApplyAttribute(AosAttributes attrs, int min, int max, AosAttribute attr, int low, int high,
+ int scale = 1)
+ {
+ if (attr == AosAttribute.CastSpeed)
+ attrs[attr] += Scale(min, max, low / scale, high / scale) * scale;
+ else
+ attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
+
+ if (attr == AosAttribute.SpellChanneling)
+ attrs[AosAttribute.CastSpeed] -= 1;
+ }
+
+ private static void ApplyAttribute(AosArmorAttributes attrs, int min, int max, AosArmorAttribute attr, int low,
+ int high)
+ {
+ attrs[attr] = Scale(min, max, low, high);
+ }
+
+ private static void ApplyAttribute(AosArmorAttributes attrs, int min, int max, AosArmorAttribute attr, int low,
+ int high, int scale)
+ {
+ attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
+ }
+
+ private static void ApplyAttribute(AosWeaponAttributes attrs, int min, int max, AosWeaponAttribute attr, int low,
+ int high)
+ {
+ attrs[attr] = Scale(min, max, low, high);
+ }
+
+ private static void ApplyAttribute(AosWeaponAttributes attrs, int min, int max, AosWeaponAttribute attr, int low,
+ int high, int scale)
+ {
+ attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
+ }
+
+ private static void ApplyAttribute(AosElementAttributes attrs, int min, int max, AosElementAttribute attr, int low,
+ int high)
+ {
+ attrs[attr] = Scale(min, max, low, high);
+ }
+
+ private static void ApplyAttribute(AosElementAttributes attrs, int min, int max, AosElementAttribute attr, int low,
+ int high, int scale)
+ {
+ attrs[attr] = Scale(min, max, low / scale, high / scale) * scale;
+ }
+
+ private static void ApplySkillBonus(AosSkillBonuses attrs, int min, int max, int index, int low, int high)
+ {
+ List possibleSkills =
+ new List(attrs.Owner is Spellbook ? m_PossibleSpellbookSkills : m_PossibleBonusSkills);
+ int count = Core.SE ? possibleSkills.Count : possibleSkills.Count - 2;
+
+ SkillName sk;
+ bool found;
+
+ do
+ {
+ found = false;
+ sk = possibleSkills[Utility.Random(count--)];
+ possibleSkills.Remove(sk);
+
+ for (int i = 0; !found && i < 5; ++i)
+ found = attrs.GetValues(i, out SkillName check, out _) && check == sk;
+ } while (found && count > 0);
+
+ attrs.SetValues(index, sk, Scale(min, max, low, high));
+ }
+
+ private static void ApplyResistance(BaseArmor ar, int min, int max, ResistanceType res, int low, int high)
+ {
+ switch (res)
+ {
+ case ResistanceType.Physical:
+ ar.PhysicalBonus += Scale(min, max, low, high);
+ break;
+ case ResistanceType.Fire:
+ ar.FireBonus += Scale(min, max, low, high);
+ break;
+ case ResistanceType.Cold:
+ ar.ColdBonus += Scale(min, max, low, high);
+ break;
+ case ResistanceType.Poison:
+ ar.PoisonBonus += Scale(min, max, low, high);
+ break;
+ case ResistanceType.Energy:
+ ar.EnergyBonus += Scale(min, max, low, high);
+ break;
+ }
+ }
+
+ public static int GetUniqueRandom(int count)
+ {
+ int avail = 0;
+
+ for (int i = 0; i < count; ++i)
+ if (!m_Props[i])
+ m_Possible[avail++] = i;
+
+ if (avail == 0)
+ return -1;
+
+ int v = m_Possible[Utility.Random(avail)];
+
+ m_Props.Set(v, true);
+
+ return v;
+ }
+
+ public void ApplyAttributesTo(BaseWeapon weapon)
+ {
+ CraftResourceInfo resInfo = CraftResources.GetInfo(m_Resource);
+
+ CraftAttributeInfo attrs = resInfo?.AttributeInfo;
+
+ if (attrs == null)
+ return;
+
+ int attributeCount = Utility.RandomMinMax(attrs.RunicMinAttributes, attrs.RunicMaxAttributes);
+ int min = attrs.RunicMinIntensity;
+ int max = attrs.RunicMaxIntensity;
+
+ ApplyAttributesTo(weapon, true, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(BaseWeapon weapon, int attributeCount, int min, int max)
+ {
+ ApplyAttributesTo(weapon, false, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(BaseWeapon weapon, bool isRunicTool, int luckChance, int attributeCount,
+ int min, int max)
+ {
+ m_IsRunicTool = isRunicTool;
+ m_LuckChance = luckChance;
+
+ AosAttributes primary = weapon.Attributes;
+ AosWeaponAttributes secondary = weapon.WeaponAttributes;
+
+ m_Props.SetAll(false);
+
+ if (weapon is BaseRanged)
+ m_Props.Set(2, true); // ranged weapons cannot be ubws or mageweapon
+
+ for (int i = 0; i < attributeCount; ++i)
+ {
+ int random = GetUniqueRandom(25);
+
+ if (random == -1)
+ break;
+
+ switch (random)
+ {
+ case 0:
+ {
+ switch (Utility.Random(5))
+ {
+ case 0:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitPhysicalArea, 2, 50, 2);
+ break;
+ case 1:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitFireArea, 2, 50, 2);
+ break;
+ case 2:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitColdArea, 2, 50, 2);
+ break;
+ case 3:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitPoisonArea, 2, 50, 2);
+ break;
+ case 4:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitEnergyArea, 2, 50, 2);
+ break;
+ }
+
+ break;
+ }
+ case 1:
+ {
+ switch (Utility.Random(4))
+ {
+ case 0:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitMagicArrow, 2, 50, 2);
+ break;
+ case 1:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitHarm, 2, 50, 2);
+ break;
+ case 2:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitFireball, 2, 50, 2);
+ break;
+ case 3:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLightning, 2, 50, 2);
+ break;
+ }
+
+ break;
+ }
+ case 2:
+ {
+ switch (Utility.Random(2))
+ {
+ case 0:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.UseBestSkill, 1, 1);
+ break;
+ case 1:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.MageWeapon, 1, 10);
+ break;
+ }
+
+ break;
+ }
+ case 3:
+ ApplyAttribute(primary, min, max, AosAttribute.WeaponDamage, 1, 50);
+ break;
+ case 4:
+ ApplyAttribute(primary, min, max, AosAttribute.DefendChance, 1, 15);
+ break;
+ case 5:
+ ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
+ break;
+ case 6:
+ ApplyAttribute(primary, min, max, AosAttribute.AttackChance, 1, 15);
+ break;
+ case 7:
+ ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
+ break;
+ case 8:
+ ApplyAttribute(primary, min, max, AosAttribute.WeaponSpeed, 5, 30, 5);
+ break;
+ case 9:
+ ApplyAttribute(primary, min, max, AosAttribute.SpellChanneling, 1, 1);
+ break;
+ case 10:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitDispel, 2, 50, 2);
+ break;
+ case 11:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLeechHits, 2, 50, 2);
+ break;
+ case 12:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLowerAttack, 2, 50, 2);
+ break;
+ case 13:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLowerDefend, 2, 50, 2);
+ break;
+ case 14:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLeechMana, 2, 50, 2);
+ break;
+ case 15:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.HitLeechStam, 2, 50, 2);
+ break;
+ case 16:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.LowerStatReq, 10, 100, 10);
+ break;
+ case 17:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistPhysicalBonus, 1, 15);
+ break;
+ case 18:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistFireBonus, 1, 15);
+ break;
+ case 19:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistColdBonus, 1, 15);
+ break;
+ case 20:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistPoisonBonus, 1, 15);
+ break;
+ case 21:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.ResistEnergyBonus, 1, 15);
+ break;
+ case 22:
+ ApplyAttribute(secondary, min, max, AosWeaponAttribute.DurabilityBonus, 10, 100, 10);
+ break;
+ case 23:
+ weapon.Slayer = GetRandomSlayer();
+ break;
+ case 24:
+ GetElementalDamages(weapon);
+ break;
+ }
+ }
+ }
+
+ public static void GetElementalDamages(BaseWeapon weapon)
+ {
+ GetElementalDamages(weapon, true);
+ }
+
+ public static void GetElementalDamages(BaseWeapon weapon, bool randomizeOrder)
+ {
+ weapon.GetDamageTypes(null, out int phys, out _, out _, out _, out _, out _, out _);
+
+ int totalDamage = phys;
+
+ AosElementAttribute[] attrs =
+ {
+ AosElementAttribute.Cold,
+ AosElementAttribute.Energy,
+ AosElementAttribute.Fire,
+ AosElementAttribute.Poison
+ };
+
+ if (randomizeOrder)
+ for (int i = 0; i < attrs.Length; i++)
+ {
+ AosElementAttribute temp = attrs[i];
+ int rand = Utility.Random(attrs.Length);
+
+ attrs[i] = attrs[rand];
+ attrs[rand] = temp;
+ }
+
+ /*
+ totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Cold, totalDamage );
+ totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Energy, totalDamage );
+ totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Fire, totalDamage );
+ totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Poison, totalDamage );
+
+ weapon.AosElementDamages[AosElementAttribute.Physical] = 100 - totalDamage;
+ * */
+
+ for (int i = 0; i < attrs.Length; i++)
+ totalDamage = AssignElementalDamage(weapon, attrs[i], totalDamage);
+
+ // Order is Cold, Energy, Fire, Poison -> Physical left
+ // Cannot be looped, AoselementAttribute is 'out of order'
+
+ weapon.Hue = weapon.GetElementalDamageHue();
+ }
+
+ private static int AssignElementalDamage(BaseWeapon weapon, AosElementAttribute attr, int totalDamage)
+ {
+ if (totalDamage <= 0)
+ return 0;
+
+ int random = Utility.Random(totalDamage / 10 + 1) * 10;
+ weapon.AosElementDamages[attr] = random;
+
+ return totalDamage - random;
+ }
+
+ public static SlayerName GetRandomSlayer()
+ {
+ // TODO: Check random algorithm on OSI
+
+ SlayerGroup[] groups = SlayerGroup.Groups;
+
+ if (groups.Length == 0)
+ return SlayerName.None;
+
+ SlayerGroup
+ group = groups[
+ Utility.Random(groups.Length -
+ 1)]; // -1 To Exclude the Fey Slayer which appears ONLY on a certain artifact.
+ SlayerEntry entry;
+
+ if (Utility.Random(100) < 10) // 10% chance to do super slayer
+ {
+ entry = group.Super;
+ }
+ else
+ {
+ SlayerEntry[] entries = group.Entries;
+
+ if (entries.Length == 0)
+ return SlayerName.None;
+
+ entry = entries.RandomElement();
+ }
+
+ return entry.Name;
+ }
+
+ public void ApplyAttributesTo(BaseArmor armor)
+ {
+ CraftResourceInfo resInfo = CraftResources.GetInfo(m_Resource);
+
+ CraftAttributeInfo attrs = resInfo?.AttributeInfo;
+
+ if (attrs == null)
+ return;
+
+ int attributeCount = Utility.RandomMinMax(attrs.RunicMinAttributes, attrs.RunicMaxAttributes);
+ int min = attrs.RunicMinIntensity;
+ int max = attrs.RunicMaxIntensity;
+
+ ApplyAttributesTo(armor, true, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(BaseArmor armor, int attributeCount, int min, int max)
+ {
+ ApplyAttributesTo(armor, false, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(BaseArmor armor, bool isRunicTool, int luckChance, int attributeCount, int min,
+ int max)
+ {
+ m_IsRunicTool = isRunicTool;
+ m_LuckChance = luckChance;
+
+ AosAttributes primary = armor.Attributes;
+ AosArmorAttributes secondary = armor.ArmorAttributes;
+
+ m_Props.SetAll(false);
+
+ bool isShield = armor is BaseShield;
+ int baseCount = isShield ? 7 : 20;
+ int baseOffset = isShield ? 0 : 4;
+
+ if (!isShield && armor.MeditationAllowance == ArmorMeditationAllowance.All)
+ m_Props.Set(3, true); // remove mage armor from possible properties
+ if (armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather)
+ {
+ m_Props.Set(0, true); // remove lower requirements from possible properties for leather armor
+ m_Props.Set(2, true); // remove durability bonus from possible properties
+ }
+
+ if (armor.RequiredRace == Race.Elf)
+ m_Props.Set(7,
+ true); // elves inherently have night sight and elf only armor doesn't get night sight as a mod
+
+ for (int i = 0; i < attributeCount; ++i)
+ {
+ int random = GetUniqueRandom(baseCount);
+
+ if (random == -1)
+ break;
+
+ random += baseOffset;
+
+ switch (random)
+ {
+ /* Begin Sheilds */
+ case 0:
+ ApplyAttribute(primary, min, max, AosAttribute.SpellChanneling, 1, 1);
+ break;
+ case 1:
+ ApplyAttribute(primary, min, max, AosAttribute.DefendChance, 1, 15);
+ break;
+ case 2:
+ if (Core.ML)
+ ApplyAttribute(primary, min, max, AosAttribute.ReflectPhysical, 1, 15);
+ else
+ ApplyAttribute(primary, min, max, AosAttribute.AttackChance, 1, 15);
+ break;
+ case 3:
+ ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
+ break;
+ /* Begin Armor */
+ case 4:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.LowerStatReq, 10, 100, 10);
+ break;
+ case 5:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5);
+ break;
+ case 6:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10);
+ break;
+ /* End Shields */
+ case 7:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.MageArmor, 1, 1);
+ break;
+ case 8:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenHits, 1, 2);
+ break;
+ case 9:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenStam, 1, 3);
+ break;
+ case 10:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenMana, 1, 2);
+ break;
+ case 11:
+ ApplyAttribute(primary, min, max, AosAttribute.NightSight, 1, 1);
+ break;
+ case 12:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusHits, 1, 5);
+ break;
+ case 13:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusStam, 1, 8);
+ break;
+ case 14:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusMana, 1, 8);
+ break;
+ case 15:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
+ break;
+ case 16:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
+ break;
+ case 17:
+ ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
+ break;
+ case 18:
+ ApplyAttribute(primary, min, max, AosAttribute.ReflectPhysical, 1, 15);
+ break;
+ case 19:
+ ApplyResistance(armor, min, max, ResistanceType.Physical, 1, 15);
+ break;
+ case 20:
+ ApplyResistance(armor, min, max, ResistanceType.Fire, 1, 15);
+ break;
+ case 21:
+ ApplyResistance(armor, min, max, ResistanceType.Cold, 1, 15);
+ break;
+ case 22:
+ ApplyResistance(armor, min, max, ResistanceType.Poison, 1, 15);
+ break;
+ case 23:
+ ApplyResistance(armor, min, max, ResistanceType.Energy, 1, 15);
+ break;
+ /* End Armor */
+ }
+ }
+ }
+
+ public static void ApplyAttributesTo(BaseHat hat, int attributeCount, int min, int max)
+ {
+ ApplyAttributesTo(hat, false, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(BaseHat hat, bool isRunicTool, int luckChance, int attributeCount, int min,
+ int max)
+ {
+ m_IsRunicTool = isRunicTool;
+ m_LuckChance = luckChance;
+
+ AosAttributes primary = hat.Attributes;
+ AosArmorAttributes secondary = hat.ClothingAttributes;
+ AosElementAttributes resists = hat.Resistances;
+
+ m_Props.SetAll(false);
+
+ for (int i = 0; i < attributeCount; ++i)
+ {
+ int random = GetUniqueRandom(19);
+
+ if (random == -1)
+ break;
+
+ switch (random)
+ {
+ case 0:
+ ApplyAttribute(primary, min, max, AosAttribute.ReflectPhysical, 1, 15);
+ break;
+ case 1:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenHits, 1, 2);
+ break;
+ case 2:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenStam, 1, 3);
+ break;
+ case 3:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenMana, 1, 2);
+ break;
+ case 4:
+ ApplyAttribute(primary, min, max, AosAttribute.NightSight, 1, 1);
+ break;
+ case 5:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusHits, 1, 5);
+ break;
+ case 6:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusStam, 1, 8);
+ break;
+ case 7:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusMana, 1, 8);
+ break;
+ case 8:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
+ break;
+ case 9:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
+ break;
+ case 10:
+ ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
+ break;
+ case 11:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.LowerStatReq, 10, 100, 10);
+ break;
+ case 12:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5);
+ break;
+ case 13:
+ ApplyAttribute(secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10);
+ break;
+ case 14:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Physical, 1, 15);
+ break;
+ case 15:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Fire, 1, 15);
+ break;
+ case 16:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Cold, 1, 15);
+ break;
+ case 17:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Poison, 1, 15);
+ break;
+ case 18:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Energy, 1, 15);
+ break;
+ }
+ }
+ }
+
+ public static void ApplyAttributesTo(BaseJewel jewelry, int attributeCount, int min, int max)
+ {
+ ApplyAttributesTo(jewelry, false, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(BaseJewel jewelry, bool isRunicTool, int luckChance, int attributeCount,
+ int min, int max)
+ {
+ m_IsRunicTool = isRunicTool;
+ m_LuckChance = luckChance;
+
+ AosAttributes primary = jewelry.Attributes;
+ AosElementAttributes resists = jewelry.Resistances;
+ AosSkillBonuses skills = jewelry.SkillBonuses;
+
+ m_Props.SetAll(false);
+
+ for (int i = 0; i < attributeCount; ++i)
+ {
+ int random = GetUniqueRandom(24);
+
+ if (random == -1)
+ break;
+
+ switch (random)
+ {
+ case 0:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Physical, 1, 15);
+ break;
+ case 1:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Fire, 1, 15);
+ break;
+ case 2:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Cold, 1, 15);
+ break;
+ case 3:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Poison, 1, 15);
+ break;
+ case 4:
+ ApplyAttribute(resists, min, max, AosElementAttribute.Energy, 1, 15);
+ break;
+ case 5:
+ ApplyAttribute(primary, min, max, AosAttribute.WeaponDamage, 1, 25);
+ break;
+ case 6:
+ ApplyAttribute(primary, min, max, AosAttribute.DefendChance, 1, 15);
+ break;
+ case 7:
+ ApplyAttribute(primary, min, max, AosAttribute.AttackChance, 1, 15);
+ break;
+ case 8:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusStr, 1, 8);
+ break;
+ case 9:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusDex, 1, 8);
+ break;
+ case 10:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusInt, 1, 8);
+ break;
+ case 11:
+ ApplyAttribute(primary, min, max, AosAttribute.EnhancePotions, 5, 25, 5);
+ break;
+ case 12:
+ ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
+ break;
+ case 13:
+ ApplyAttribute(primary, min, max, AosAttribute.CastRecovery, 1, 3);
+ break;
+ case 14:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
+ break;
+ case 15:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
+ break;
+ case 16:
+ ApplyAttribute(primary, min, max, AosAttribute.Luck, 1, 100);
+ break;
+ case 17:
+ ApplyAttribute(primary, min, max, AosAttribute.SpellDamage, 1, 12);
+ break;
+ case 18:
+ ApplyAttribute(primary, min, max, AosAttribute.NightSight, 1, 1);
+ break;
+ case 19:
+ ApplySkillBonus(skills, min, max, 0, 1, 15);
+ break;
+ case 20:
+ ApplySkillBonus(skills, min, max, 1, 1, 15);
+ break;
+ case 21:
+ ApplySkillBonus(skills, min, max, 2, 1, 15);
+ break;
+ case 22:
+ ApplySkillBonus(skills, min, max, 3, 1, 15);
+ break;
+ case 23:
+ ApplySkillBonus(skills, min, max, 4, 1, 15);
+ break;
+ }
+ }
+ }
+
+ public static void ApplyAttributesTo(Spellbook spellbook, int attributeCount, int min, int max)
+ {
+ ApplyAttributesTo(spellbook, false, 0, attributeCount, min, max);
+ }
+
+ public static void ApplyAttributesTo(Spellbook spellbook, bool isRunicTool, int luckChance, int attributeCount,
+ int min, int max)
+ {
+ m_IsRunicTool = isRunicTool;
+ m_LuckChance = luckChance;
+
+ AosAttributes primary = spellbook.Attributes;
+ AosSkillBonuses skills = spellbook.SkillBonuses;
+
+ m_Props.SetAll(false);
+
+ for (int i = 0; i < attributeCount; ++i)
+ {
+ int random = GetUniqueRandom(16);
+
+ if (random == -1)
+ break;
+
+ switch (random)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ {
+ ApplyAttribute(primary, min, max, AosAttribute.BonusInt, 1, 8);
+
+ for (int j = 0; j < 4; ++j)
+ m_Props.Set(j, true);
+
+ break;
+ }
+ case 4:
+ ApplyAttribute(primary, min, max, AosAttribute.BonusMana, 1, 8);
+ break;
+ case 5:
+ ApplyAttribute(primary, min, max, AosAttribute.CastSpeed, 1, 1);
+ break;
+ case 6:
+ ApplyAttribute(primary, min, max, AosAttribute.CastRecovery, 1, 3);
+ break;
+ case 7:
+ ApplyAttribute(primary, min, max, AosAttribute.SpellDamage, 1, 12);
+ break;
+ case 8:
+ ApplySkillBonus(skills, min, max, 0, 1, 15);
+ break;
+ case 9:
+ ApplySkillBonus(skills, min, max, 1, 1, 15);
+ break;
+ case 10:
+ ApplySkillBonus(skills, min, max, 2, 1, 15);
+ break;
+ case 11:
+ ApplySkillBonus(skills, min, max, 3, 1, 15);
+ break;
+ case 12:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerRegCost, 1, 20);
+ break;
+ case 13:
+ ApplyAttribute(primary, min, max, AosAttribute.LowerManaCost, 1, 8);
+ break;
+ case 14:
+ ApplyAttribute(primary, min, max, AosAttribute.RegenMana, 1, 2);
+ break;
+ case 15:
+ spellbook.Slayer = GetRandomSlayer();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs b/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs
index fcb286620..3b5db4eae 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs
@@ -1,205 +1,205 @@
-using System;
-using Server.Engines.Craft;
-using Server.Network;
-
-namespace Server.Items
-{
- public enum ToolQuality
- {
- Low,
- Regular,
- Exceptional
- }
-
- public abstract class BaseTool : Item, IUsesRemaining, ICraftable
- {
- private Mobile m_Crafter;
- private ToolQuality m_Quality;
- private int m_UsesRemaining;
-
- public BaseTool(int itemID) : this(Utility.RandomMinMax(25, 75), itemID)
- {
- }
-
- public BaseTool(int uses, int itemID) : base(itemID)
- {
- m_UsesRemaining = uses;
- m_Quality = ToolQuality.Regular;
- }
-
- public BaseTool(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Crafter
- {
- get => m_Crafter;
- set
- {
- m_Crafter = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public ToolQuality Quality
- {
- get => m_Quality;
- set
- {
- UnscaleUses();
- m_Quality = value;
- InvalidateProperties();
- ScaleUses();
- }
- }
-
- public virtual bool BreakOnDepletion => true;
-
- public abstract CraftSystem CraftSystem { get; }
-
- public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
- CraftItem craftItem, int resHue)
- {
- Quality = (ToolQuality)quality;
-
- if (makersMark)
- Crafter = from;
-
- return quality;
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- private bool ShowUsesRemaining { get; set; } = true;
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => ShowUsesRemaining;
- set => ShowUsesRemaining = value;
- }
-
- public void ScaleUses()
- {
- m_UsesRemaining = m_UsesRemaining * GetUsesScalar() / 100;
- InvalidateProperties();
- }
-
- public void UnscaleUses()
- {
- m_UsesRemaining = m_UsesRemaining * 100 / GetUsesScalar();
- }
-
- public int GetUsesScalar()
- {
- if (m_Quality == ToolQuality.Exceptional)
- return 200;
-
- return 100;
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- // Makers mark not displayed on OSI
- // if (m_Crafter != null)
- // list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
-
- if (m_Quality == ToolQuality.Exceptional)
- list.Add(1060636); // exceptional
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
- }
-
- public virtual void DisplayDurabilityTo(Mobile m)
- {
- LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability
- }
-
- public static bool CheckAccessible(Item tool, Mobile m) => tool.IsChildOf(m) || tool.Parent == m;
-
- public static bool CheckTool(Item tool, Mobile m)
- {
- Item check = m.FindItemOnLayer(Layer.OneHanded);
-
- if (check is BaseTool && check != tool && !(check is AncientSmithyHammer))
- return false;
-
- check = m.FindItemOnLayer(Layer.TwoHanded);
-
- return !(check is BaseTool) || check == tool || check is AncientSmithyHammer;
- }
-
- public override void OnSingleClick(Mobile from)
- {
- DisplayDurabilityTo(from);
-
- base.OnSingleClick(from);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack) || Parent == from)
- {
- CraftSystem system = CraftSystem;
-
- int num = system.CanCraft(from, this, null);
-
- // Blacksmithing shows the gump regardless of proximity of an anvil and forge after SE
- if (num > 0 && (num != 1044267 || !Core.SE))
- from.SendLocalizedMessage(num);
- else
- from.SendGump(new CraftGump(from, system, this, null));
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(m_Crafter);
- writer.Write((int)m_Quality);
-
- writer.Write(m_UsesRemaining);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- m_Crafter = reader.ReadMobile();
- m_Quality = (ToolQuality)reader.ReadInt();
- goto case 0;
- }
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
- break;
- }
- }
- }
- }
-}
+using System;
+using Server.Engines.Craft;
+using Server.Network;
+
+namespace Server.Items
+{
+ public enum ToolQuality
+ {
+ Low,
+ Regular,
+ Exceptional
+ }
+
+ public abstract class BaseTool : Item, IUsesRemaining, ICraftable
+ {
+ private Mobile m_Crafter;
+ private ToolQuality m_Quality;
+ private int m_UsesRemaining;
+
+ public BaseTool(int itemID) : this(Utility.RandomMinMax(25, 75), itemID)
+ {
+ }
+
+ public BaseTool(int uses, int itemID) : base(itemID)
+ {
+ m_UsesRemaining = uses;
+ m_Quality = ToolQuality.Regular;
+ }
+
+ public BaseTool(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Crafter
+ {
+ get => m_Crafter;
+ set
+ {
+ m_Crafter = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public ToolQuality Quality
+ {
+ get => m_Quality;
+ set
+ {
+ UnscaleUses();
+ m_Quality = value;
+ InvalidateProperties();
+ ScaleUses();
+ }
+ }
+
+ public virtual bool BreakOnDepletion => true;
+
+ public abstract CraftSystem CraftSystem { get; }
+
+ public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
+ CraftItem craftItem, int resHue)
+ {
+ Quality = (ToolQuality)quality;
+
+ if (makersMark)
+ Crafter = from;
+
+ return quality;
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ private bool ShowUsesRemaining { get; set; } = true;
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => ShowUsesRemaining;
+ set => ShowUsesRemaining = value;
+ }
+
+ public void ScaleUses()
+ {
+ m_UsesRemaining = m_UsesRemaining * GetUsesScalar() / 100;
+ InvalidateProperties();
+ }
+
+ public void UnscaleUses()
+ {
+ m_UsesRemaining = m_UsesRemaining * 100 / GetUsesScalar();
+ }
+
+ public int GetUsesScalar()
+ {
+ if (m_Quality == ToolQuality.Exceptional)
+ return 200;
+
+ return 100;
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ // Makers mark not displayed on OSI
+ // if (m_Crafter != null)
+ // list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
+
+ if (m_Quality == ToolQuality.Exceptional)
+ list.Add(1060636); // exceptional
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+ }
+
+ public virtual void DisplayDurabilityTo(Mobile m)
+ {
+ LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability
+ }
+
+ public static bool CheckAccessible(Item tool, Mobile m) => tool.IsChildOf(m) || tool.Parent == m;
+
+ public static bool CheckTool(Item tool, Mobile m)
+ {
+ Item check = m.FindItemOnLayer(Layer.OneHanded);
+
+ if (check is BaseTool && check != tool && !(check is AncientSmithyHammer))
+ return false;
+
+ check = m.FindItemOnLayer(Layer.TwoHanded);
+
+ return !(check is BaseTool) || check == tool || check is AncientSmithyHammer;
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ DisplayDurabilityTo(from);
+
+ base.OnSingleClick(from);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack) || Parent == from)
+ {
+ CraftSystem system = CraftSystem;
+
+ int num = system.CanCraft(from, this, null);
+
+ // Blacksmithing shows the gump regardless of proximity of an anvil and forge after SE
+ if (num > 0 && (num != 1044267 || !Core.SE))
+ from.SendLocalizedMessage(num);
+ else
+ from.SendGump(new CraftGump(from, system, this, null));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(m_Crafter);
+ writer.Write((int)m_Quality);
+
+ writer.Write(m_UsesRemaining);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ m_Crafter = reader.ReadMobile();
+ m_Quality = (ToolQuality)reader.ReadInt();
+ goto case 0;
+ }
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Blowpipe.cs b/Projects/UOContent/Items/Skill Items/Tools/Blowpipe.cs
index 7c984b5a0..b6a962c60 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Blowpipe.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Blowpipe.cs
@@ -1,47 +1,47 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0xE8A, 0xE89)]
- public class Blowpipe : BaseTool
- {
- [Constructible]
- public Blowpipe() : base(0xE8A)
- {
- Weight = 4.0;
- Hue = 0x3B9;
- }
-
- [Constructible]
- public Blowpipe(int uses) : base(uses, 0xE8A)
- {
- Weight = 4.0;
- Hue = 0x3B9;
- }
-
- public Blowpipe(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefGlassblowing.CraftSystem;
-
- public override int LabelNumber => 1044608; // blow pipe
-
- 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 (Weight == 2.0)
- Weight = 4.0;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0xE8A, 0xE89)]
+ public class Blowpipe : BaseTool
+ {
+ [Constructible]
+ public Blowpipe() : base(0xE8A)
+ {
+ Weight = 4.0;
+ Hue = 0x3B9;
+ }
+
+ [Constructible]
+ public Blowpipe(int uses) : base(uses, 0xE8A)
+ {
+ Weight = 4.0;
+ Hue = 0x3B9;
+ }
+
+ public Blowpipe(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefGlassblowing.CraftSystem;
+
+ public override int LabelNumber => 1044608; // blow pipe
+
+ 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 (Weight == 2.0)
+ Weight = 4.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/DovetailSaw.cs b/Projects/UOContent/Items/Skill Items/Tools/DovetailSaw.cs
index 77efe71a9..e5a69ca10 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/DovetailSaw.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/DovetailSaw.cs
@@ -1,37 +1,37 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x1028, 0x1029)]
- public class DovetailSaw : BaseTool
- {
- [Constructible]
- public DovetailSaw() : base(0x1028) => Weight = 2.0;
-
- [Constructible]
- public DovetailSaw(int uses) : base(uses, 0x1028) => Weight = 2.0;
-
- public DovetailSaw(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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 (Weight == 1.0)
- Weight = 2.0;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x1028, 0x1029)]
+ public class DovetailSaw : BaseTool
+ {
+ [Constructible]
+ public DovetailSaw() : base(0x1028) => Weight = 2.0;
+
+ [Constructible]
+ public DovetailSaw(int uses) : base(uses, 0x1028) => Weight = 2.0;
+
+ public DovetailSaw(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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 (Weight == 1.0)
+ Weight = 2.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/DrawKnife.cs b/Projects/UOContent/Items/Skill Items/Tools/DrawKnife.cs
index 7b9b7e40b..13f9275cc 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/DrawKnife.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/DrawKnife.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class DrawKnife : BaseTool
- {
- [Constructible]
- public DrawKnife() : base(0x10E4) => Weight = 1.0;
-
- [Constructible]
- public DrawKnife(int uses) : base(uses, 0x10E4) => Weight = 1.0;
-
- public DrawKnife(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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
+{
+ public class DrawKnife : BaseTool
+ {
+ [Constructible]
+ public DrawKnife() : base(0x10E4) => Weight = 1.0;
+
+ [Constructible]
+ public DrawKnife(int uses) : base(uses, 0x10E4) => Weight = 1.0;
+
+ public DrawKnife(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/FletcherTools.cs b/Projects/UOContent/Items/Skill Items/Tools/FletcherTools.cs
index 289a64ad6..48f077fbe 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/FletcherTools.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/FletcherTools.cs
@@ -1,37 +1,37 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x1022, 0x1023)]
- public class FletcherTools : BaseTool
- {
- [Constructible]
- public FletcherTools() : base(0x1022) => Weight = 2.0;
-
- [Constructible]
- public FletcherTools(int uses) : base(uses, 0x1022) => Weight = 2.0;
-
- public FletcherTools(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefBowFletching.CraftSystem;
-
- 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 (Weight == 1.0)
- Weight = 2.0;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x1022, 0x1023)]
+ public class FletcherTools : BaseTool
+ {
+ [Constructible]
+ public FletcherTools() : base(0x1022) => Weight = 2.0;
+
+ [Constructible]
+ public FletcherTools(int uses) : base(uses, 0x1022) => Weight = 2.0;
+
+ public FletcherTools(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefBowFletching.CraftSystem;
+
+ 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 (Weight == 1.0)
+ Weight = 2.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/FlourSifter.cs b/Projects/UOContent/Items/Skill Items/Tools/FlourSifter.cs
index cc6f879a7..524810a2e 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/FlourSifter.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/FlourSifter.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class FlourSifter : BaseTool
- {
- [Constructible]
- public FlourSifter() : base(0x103E) => Weight = 1.0;
-
- [Constructible]
- public FlourSifter(int uses) : base(uses, 0x103E) => Weight = 1.0;
-
- public FlourSifter(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCooking.CraftSystem;
-
- 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
+{
+ public class FlourSifter : BaseTool
+ {
+ [Constructible]
+ public FlourSifter() : base(0x103E) => Weight = 1.0;
+
+ [Constructible]
+ public FlourSifter(int uses) : base(uses, 0x103E) => Weight = 1.0;
+
+ public FlourSifter(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCooking.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Froe.cs b/Projects/UOContent/Items/Skill Items/Tools/Froe.cs
index 589630e69..b21692746 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Froe.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Froe.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class Froe : BaseTool
- {
- [Constructible]
- public Froe() : base(0x10E5) => Weight = 1.0;
-
- [Constructible]
- public Froe(int uses) : base(uses, 0x10E5) => Weight = 1.0;
-
- public Froe(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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
+{
+ public class Froe : BaseTool
+ {
+ [Constructible]
+ public Froe() : base(0x10E5) => Weight = 1.0;
+
+ [Constructible]
+ public Froe(int uses) : base(uses, 0x10E5) => Weight = 1.0;
+
+ public Froe(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Hammer.cs b/Projects/UOContent/Items/Skill Items/Tools/Hammer.cs
index 4fa8281f2..457e0b4c7 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Hammer.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Hammer.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class Hammer : BaseTool
- {
- [Constructible]
- public Hammer() : base(0x102A) => Weight = 2.0;
-
- [Constructible]
- public Hammer(int uses) : base(uses, 0x102A) => Weight = 2.0;
-
- public Hammer(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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
+{
+ public class Hammer : BaseTool
+ {
+ [Constructible]
+ public Hammer() : base(0x102A) => Weight = 2.0;
+
+ [Constructible]
+ public Hammer(int uses) : base(uses, 0x102A) => Weight = 2.0;
+
+ public Hammer(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Inshave.cs b/Projects/UOContent/Items/Skill Items/Tools/Inshave.cs
index 5b99873f8..71bd64358 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Inshave.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Inshave.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class Inshave : BaseTool
- {
- [Constructible]
- public Inshave() : base(0x10E6) => Weight = 1.0;
-
- [Constructible]
- public Inshave(int uses) : base(uses, 0x10E6) => Weight = 1.0;
-
- public Inshave(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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
+{
+ public class Inshave : BaseTool
+ {
+ [Constructible]
+ public Inshave() : base(0x10E6) => Weight = 1.0;
+
+ [Constructible]
+ public Inshave(int uses) : base(uses, 0x10E6) => Weight = 1.0;
+
+ public Inshave(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/JointingPlane.cs b/Projects/UOContent/Items/Skill Items/Tools/JointingPlane.cs
index b8821945b..5797c7d13 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/JointingPlane.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/JointingPlane.cs
@@ -1,37 +1,37 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x1030, 0x1031)]
- public class JointingPlane : BaseTool
- {
- [Constructible]
- public JointingPlane() : base(0x1030) => Weight = 2.0;
-
- [Constructible]
- public JointingPlane(int uses) : base(uses, 0x1030) => Weight = 2.0;
-
- public JointingPlane(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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 (Weight == 1.0)
- Weight = 2.0;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x1030, 0x1031)]
+ public class JointingPlane : BaseTool
+ {
+ [Constructible]
+ public JointingPlane() : base(0x1030) => Weight = 2.0;
+
+ [Constructible]
+ public JointingPlane(int uses) : base(uses, 0x1030) => Weight = 2.0;
+
+ public JointingPlane(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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 (Weight == 1.0)
+ Weight = 2.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/MalletAndChisel.cs b/Projects/UOContent/Items/Skill Items/Tools/MalletAndChisel.cs
index 6381adc5d..7363dd5a5 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/MalletAndChisel.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/MalletAndChisel.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class MalletAndChisel : BaseTool
- {
- [Constructible]
- public MalletAndChisel() : base(0x12B3) => Weight = 1.0;
-
- [Constructible]
- public MalletAndChisel(int uses) : base(uses, 0x12B3) => Weight = 1.0;
-
- public MalletAndChisel(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefMasonry.CraftSystem;
-
- 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
+{
+ public class MalletAndChisel : BaseTool
+ {
+ [Constructible]
+ public MalletAndChisel() : base(0x12B3) => Weight = 1.0;
+
+ [Constructible]
+ public MalletAndChisel(int uses) : base(uses, 0x12B3) => Weight = 1.0;
+
+ public MalletAndChisel(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefMasonry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/MapmakersPen.cs b/Projects/UOContent/Items/Skill Items/Tools/MapmakersPen.cs
index 642693fdd..9ece16636 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/MapmakersPen.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/MapmakersPen.cs
@@ -1,39 +1,39 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x0FBF, 0x0FC0)]
- public class MapmakersPen : BaseTool
- {
- [Constructible]
- public MapmakersPen() : base(0x0FBF) => Weight = 1.0;
-
- [Constructible]
- public MapmakersPen(int uses) : base(uses, 0x0FBF) => Weight = 1.0;
-
- public MapmakersPen(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCartography.CraftSystem;
-
- public override int LabelNumber => 1044167; // mapmaker's pen
-
- 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 (Weight == 2.0)
- Weight = 1.0;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x0FBF, 0x0FC0)]
+ public class MapmakersPen : BaseTool
+ {
+ [Constructible]
+ public MapmakersPen() : base(0x0FBF) => Weight = 1.0;
+
+ [Constructible]
+ public MapmakersPen(int uses) : base(uses, 0x0FBF) => Weight = 1.0;
+
+ public MapmakersPen(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCartography.CraftSystem;
+
+ public override int LabelNumber => 1044167; // mapmaker's pen
+
+ 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 (Weight == 2.0)
+ Weight = 1.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/MortarPestle.cs b/Projects/UOContent/Items/Skill Items/Tools/MortarPestle.cs
index 258f4a451..32f0f2f2c 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/MortarPestle.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/MortarPestle.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class MortarPestle : BaseTool
- {
- [Constructible]
- public MortarPestle() : base(0xE9B) => Weight = 1.0;
-
- [Constructible]
- public MortarPestle(int uses) : base(uses, 0xE9B) => Weight = 1.0;
-
- public MortarPestle(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefAlchemy.CraftSystem;
-
- 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
+{
+ public class MortarPestle : BaseTool
+ {
+ [Constructible]
+ public MortarPestle() : base(0xE9B) => Weight = 1.0;
+
+ [Constructible]
+ public MortarPestle(int uses) : base(uses, 0xE9B) => Weight = 1.0;
+
+ public MortarPestle(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefAlchemy.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/MouldingPlane.cs b/Projects/UOContent/Items/Skill Items/Tools/MouldingPlane.cs
index 517bac953..a5b573b0c 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/MouldingPlane.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/MouldingPlane.cs
@@ -1,34 +1,34 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x102C, 0x102D)]
- public class MouldingPlane : BaseTool
- {
- [Constructible]
- public MouldingPlane() : base(0x102C) => Weight = 2.0;
-
- [Constructible]
- public MouldingPlane(int uses) : base(uses, 0x102C) => Weight = 2.0;
-
- public MouldingPlane(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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(0x102C, 0x102D)]
+ public class MouldingPlane : BaseTool
+ {
+ [Constructible]
+ public MouldingPlane() : base(0x102C) => Weight = 2.0;
+
+ [Constructible]
+ public MouldingPlane(int uses) : base(uses, 0x102C) => Weight = 2.0;
+
+ public MouldingPlane(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Nails.cs b/Projects/UOContent/Items/Skill Items/Tools/Nails.cs
index 1690e0bca..15f43f2d6 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Nails.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Nails.cs
@@ -1,34 +1,34 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x102E, 0x102F)]
- public class Nails : BaseTool
- {
- [Constructible]
- public Nails() : base(0x102E) => Weight = 2.0;
-
- [Constructible]
- public Nails(int uses) : base(uses, 0x102C) => Weight = 2.0;
-
- public Nails(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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(0x102E, 0x102F)]
+ public class Nails : BaseTool
+ {
+ [Constructible]
+ public Nails() : base(0x102E) => Weight = 2.0;
+
+ [Constructible]
+ public Nails(int uses) : base(uses, 0x102C) => Weight = 2.0;
+
+ public Nails(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/RollingPin.cs b/Projects/UOContent/Items/Skill Items/Tools/RollingPin.cs
index 4768ae77a..029a9afff 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/RollingPin.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/RollingPin.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class RollingPin : BaseTool
- {
- [Constructible]
- public RollingPin() : base(0x1043) => Weight = 1.0;
-
- [Constructible]
- public RollingPin(int uses) : base(uses, 0x1043) => Weight = 1.0;
-
- public RollingPin(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCooking.CraftSystem;
-
- 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
+{
+ public class RollingPin : BaseTool
+ {
+ [Constructible]
+ public RollingPin() : base(0x1043) => Weight = 1.0;
+
+ [Constructible]
+ public RollingPin(int uses) : base(uses, 0x1043) => Weight = 1.0;
+
+ public RollingPin(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCooking.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/RunicDovetailSaw.cs b/Projects/UOContent/Items/Skill Items/Tools/RunicDovetailSaw.cs
index e86d97874..83861b832 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/RunicDovetailSaw.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/RunicDovetailSaw.cs
@@ -1,54 +1,54 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class RunicDovetailSaw : BaseRunicTool
- {
- [Constructible]
- public RunicDovetailSaw(CraftResource resource) : base(resource, 0x1028)
- {
- Weight = 2.0;
- Hue = CraftResources.GetHue(resource);
- }
-
- [Constructible]
- public RunicDovetailSaw(CraftResource resource, int uses) : base(resource, uses, 0x1028)
- {
- Weight = 2.0;
- Hue = CraftResources.GetHue(resource);
- }
-
- public RunicDovetailSaw(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- public override int LabelNumber
- {
- get
- {
- int index = CraftResources.GetIndex(Resource);
-
- if (index >= 1 && index <= 6)
- return 1072633 + index;
-
- return 1024137; // dovetail saw
- }
- }
-
- 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
+{
+ public class RunicDovetailSaw : BaseRunicTool
+ {
+ [Constructible]
+ public RunicDovetailSaw(CraftResource resource) : base(resource, 0x1028)
+ {
+ Weight = 2.0;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ [Constructible]
+ public RunicDovetailSaw(CraftResource resource, int uses) : base(resource, uses, 0x1028)
+ {
+ Weight = 2.0;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ public RunicDovetailSaw(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ public override int LabelNumber
+ {
+ get
+ {
+ int index = CraftResources.GetIndex(Resource);
+
+ if (index >= 1 && index <= 6)
+ return 1072633 + index;
+
+ return 1024137; // dovetail saw
+ }
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/RunicFletcherTool.cs b/Projects/UOContent/Items/Skill Items/Tools/RunicFletcherTool.cs
index b4b8900b3..d346214ca 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/RunicFletcherTool.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/RunicFletcherTool.cs
@@ -1,54 +1,54 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class RunicFletcherTool : BaseRunicTool
- {
- [Constructible]
- public RunicFletcherTool(CraftResource resource) : base(resource, 0x1022)
- {
- Weight = 2.0;
- Hue = CraftResources.GetHue(resource);
- }
-
- [Constructible]
- public RunicFletcherTool(CraftResource resource, int uses) : base(resource, uses, 0x1022)
- {
- Weight = 2.0;
- Hue = CraftResources.GetHue(resource);
- }
-
- public RunicFletcherTool(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefBowFletching.CraftSystem;
-
- public override int LabelNumber
- {
- get
- {
- int index = CraftResources.GetIndex(Resource);
-
- if (index >= 1 && index <= 6)
- return 1072627 + index;
-
- return 1044559; // Fletcher's Tools
- }
- }
-
- 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
+{
+ public class RunicFletcherTool : BaseRunicTool
+ {
+ [Constructible]
+ public RunicFletcherTool(CraftResource resource) : base(resource, 0x1022)
+ {
+ Weight = 2.0;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ [Constructible]
+ public RunicFletcherTool(CraftResource resource, int uses) : base(resource, uses, 0x1022)
+ {
+ Weight = 2.0;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ public RunicFletcherTool(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefBowFletching.CraftSystem;
+
+ public override int LabelNumber
+ {
+ get
+ {
+ int index = CraftResources.GetIndex(Resource);
+
+ if (index >= 1 && index <= 6)
+ return 1072627 + index;
+
+ return 1044559; // Fletcher's Tools
+ }
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/RunicHammer.cs b/Projects/UOContent/Items/Skill Items/Tools/RunicHammer.cs
index ff22222a2..648f523aa 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/RunicHammer.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/RunicHammer.cs
@@ -1,77 +1,77 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x13E4, 0x13E3)]
- public class RunicHammer : BaseRunicTool
- {
- [Constructible]
- public RunicHammer(CraftResource resource) : base(resource, 0x13E3)
- {
- Weight = 8.0;
- Layer = Layer.OneHanded;
- Hue = CraftResources.GetHue(resource);
- }
-
- [Constructible]
- public RunicHammer(CraftResource resource, int uses) : base(resource, uses, 0x13E3)
- {
- Weight = 8.0;
- Layer = Layer.OneHanded;
- Hue = CraftResources.GetHue(resource);
- }
-
- public RunicHammer(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
-
- public override int LabelNumber
- {
- get
- {
- int index = CraftResources.GetIndex(Resource);
-
- if (index >= 1 && index <= 8)
- return 1049019 + index;
-
- return 1045128; // runic smithy hammer
- }
- }
-
- public override void AddNameProperties(ObjectPropertyList list)
- {
- base.AddNameProperties(list);
-
- int index = CraftResources.GetIndex(Resource);
-
- if (index >= 1 && index <= 8)
- return;
-
- if (!CraftResources.IsStandard(Resource))
- {
- int num = CraftResources.GetLocalizationNumber(Resource);
-
- if (num > 0)
- list.Add(num);
- else
- list.Add(CraftResources.GetName(Resource));
- }
- }
-
- 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(0x13E4, 0x13E3)]
+ public class RunicHammer : BaseRunicTool
+ {
+ [Constructible]
+ public RunicHammer(CraftResource resource) : base(resource, 0x13E3)
+ {
+ Weight = 8.0;
+ Layer = Layer.OneHanded;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ [Constructible]
+ public RunicHammer(CraftResource resource, int uses) : base(resource, uses, 0x13E3)
+ {
+ Weight = 8.0;
+ Layer = Layer.OneHanded;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ public RunicHammer(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
+
+ public override int LabelNumber
+ {
+ get
+ {
+ int index = CraftResources.GetIndex(Resource);
+
+ if (index >= 1 && index <= 8)
+ return 1049019 + index;
+
+ return 1045128; // runic smithy hammer
+ }
+ }
+
+ public override void AddNameProperties(ObjectPropertyList list)
+ {
+ base.AddNameProperties(list);
+
+ int index = CraftResources.GetIndex(Resource);
+
+ if (index >= 1 && index <= 8)
+ return;
+
+ if (!CraftResources.IsStandard(Resource))
+ {
+ int num = CraftResources.GetLocalizationNumber(Resource);
+
+ if (num > 0)
+ list.Add(num);
+ else
+ list.Add(CraftResources.GetName(Resource));
+ }
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/RunicSewingKit.cs b/Projects/UOContent/Items/Skill Items/Tools/RunicSewingKit.cs
index 72668fb8b..586104e58 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/RunicSewingKit.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/RunicSewingKit.cs
@@ -1,78 +1,78 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class RunicSewingKit : BaseRunicTool
- {
- [Constructible]
- public RunicSewingKit(CraftResource resource) : base(resource, 0xF9D)
- {
- Weight = 2.0;
- Hue = CraftResources.GetHue(resource);
- }
-
- [Constructible]
- public RunicSewingKit(CraftResource resource, int uses) : base(resource, uses, 0xF9D)
- {
- Weight = 2.0;
- Hue = CraftResources.GetHue(resource);
- }
-
- public RunicSewingKit(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefTailoring.CraftSystem;
-
- public override void AddNameProperty(ObjectPropertyList list)
- {
- string v = " ";
-
- if (!CraftResources.IsStandard(Resource))
- {
- int num = CraftResources.GetLocalizationNumber(Resource);
-
- if (num > 0)
- v = $"#{num}";
- else
- v = CraftResources.GetName(Resource);
- }
-
- list.Add(1061119, v); // ~1_LEATHER_TYPE~ runic sewing kit
- }
-
- public override void OnSingleClick(Mobile from)
- {
- string v = " ";
-
- if (!CraftResources.IsStandard(Resource))
- {
- int num = CraftResources.GetLocalizationNumber(Resource);
-
- if (num > 0)
- v = $"#{num}";
- else
- v = CraftResources.GetName(Resource);
- }
-
- LabelTo(from, 1061119, v); // ~1_LEATHER_TYPE~ runic sewing kit
- }
-
- 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 (ItemID == 0x13E4 || ItemID == 0x13E3)
- ItemID = 0xF9D;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ public class RunicSewingKit : BaseRunicTool
+ {
+ [Constructible]
+ public RunicSewingKit(CraftResource resource) : base(resource, 0xF9D)
+ {
+ Weight = 2.0;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ [Constructible]
+ public RunicSewingKit(CraftResource resource, int uses) : base(resource, uses, 0xF9D)
+ {
+ Weight = 2.0;
+ Hue = CraftResources.GetHue(resource);
+ }
+
+ public RunicSewingKit(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefTailoring.CraftSystem;
+
+ public override void AddNameProperty(ObjectPropertyList list)
+ {
+ string v = " ";
+
+ if (!CraftResources.IsStandard(Resource))
+ {
+ int num = CraftResources.GetLocalizationNumber(Resource);
+
+ if (num > 0)
+ v = $"#{num}";
+ else
+ v = CraftResources.GetName(Resource);
+ }
+
+ list.Add(1061119, v); // ~1_LEATHER_TYPE~ runic sewing kit
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ string v = " ";
+
+ if (!CraftResources.IsStandard(Resource))
+ {
+ int num = CraftResources.GetLocalizationNumber(Resource);
+
+ if (num > 0)
+ v = $"#{num}";
+ else
+ v = CraftResources.GetName(Resource);
+ }
+
+ LabelTo(from, 1061119, v); // ~1_LEATHER_TYPE~ runic sewing kit
+ }
+
+ 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 (ItemID == 0x13E4 || ItemID == 0x13E3)
+ ItemID = 0xF9D;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Saw.cs b/Projects/UOContent/Items/Skill Items/Tools/Saw.cs
index ee9537bc2..4c3998652 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Saw.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Saw.cs
@@ -1,34 +1,34 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x1034, 0x1035)]
- public class Saw : BaseTool
- {
- [Constructible]
- public Saw() : base(0x1034) => Weight = 2.0;
-
- [Constructible]
- public Saw(int uses) : base(uses, 0x1034) => Weight = 2.0;
-
- public Saw(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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(0x1034, 0x1035)]
+ public class Saw : BaseTool
+ {
+ [Constructible]
+ public Saw() : base(0x1034) => Weight = 2.0;
+
+ [Constructible]
+ public Saw(int uses) : base(uses, 0x1034) => Weight = 2.0;
+
+ public Saw(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Scorp.cs b/Projects/UOContent/Items/Skill Items/Tools/Scorp.cs
index 13ec7a8cc..c338ee92b 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Scorp.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Scorp.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class Scorp : BaseTool
- {
- [Constructible]
- public Scorp() : base(0x10E7) => Weight = 1.0;
-
- [Constructible]
- public Scorp(int uses) : base(uses, 0x10E7) => Weight = 1.0;
-
- public Scorp(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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
+{
+ public class Scorp : BaseTool
+ {
+ [Constructible]
+ public Scorp() : base(0x10E7) => Weight = 1.0;
+
+ [Constructible]
+ public Scorp(int uses) : base(uses, 0x10E7) => Weight = 1.0;
+
+ public Scorp(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/ScribesPen.cs b/Projects/UOContent/Items/Skill Items/Tools/ScribesPen.cs
index d7e855500..e1a77d53f 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/ScribesPen.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/ScribesPen.cs
@@ -1,39 +1,39 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x0FBF, 0x0FC0)]
- public class ScribesPen : BaseTool
- {
- [Constructible]
- public ScribesPen() : base(0x0FBF) => Weight = 1.0;
-
- [Constructible]
- public ScribesPen(int uses) : base(uses, 0x0FBF) => Weight = 1.0;
-
- public ScribesPen(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefInscription.CraftSystem;
-
- public override int LabelNumber => 1044168; // scribe's pen
-
- 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 (Weight == 2.0)
- Weight = 1.0;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x0FBF, 0x0FC0)]
+ public class ScribesPen : BaseTool
+ {
+ [Constructible]
+ public ScribesPen() : base(0x0FBF) => Weight = 1.0;
+
+ [Constructible]
+ public ScribesPen(int uses) : base(uses, 0x0FBF) => Weight = 1.0;
+
+ public ScribesPen(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefInscription.CraftSystem;
+
+ public override int LabelNumber => 1044168; // scribe's pen
+
+ 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 (Weight == 2.0)
+ Weight = 1.0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/SewingKit.cs b/Projects/UOContent/Items/Skill Items/Tools/SewingKit.cs
index 20d33defe..0035a484b 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/SewingKit.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/SewingKit.cs
@@ -1,33 +1,33 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class SewingKit : BaseTool
- {
- [Constructible]
- public SewingKit() : base(0xF9D) => Weight = 2.0;
-
- [Constructible]
- public SewingKit(int uses) : base(uses, 0xF9D) => Weight = 2.0;
-
- public SewingKit(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefTailoring.CraftSystem;
-
- 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
+{
+ public class SewingKit : BaseTool
+ {
+ [Constructible]
+ public SewingKit() : base(0xF9D) => Weight = 2.0;
+
+ [Constructible]
+ public SewingKit(int uses) : base(uses, 0xF9D) => Weight = 2.0;
+
+ public SewingKit(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefTailoring.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Skillet.cs b/Projects/UOContent/Items/Skill Items/Tools/Skillet.cs
index 392ba5ccc..b513a5939 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Skillet.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Skillet.cs
@@ -1,35 +1,35 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- public class Skillet : BaseTool
- {
- [Constructible]
- public Skillet() : base(0x97F) => Weight = 1.0;
-
- [Constructible]
- public Skillet(int uses) : base(uses, 0x97F) => Weight = 1.0;
-
- public Skillet(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1044567; // skillet
-
- public override CraftSystem CraftSystem => DefCooking.CraftSystem;
-
- 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
+{
+ public class Skillet : BaseTool
+ {
+ [Constructible]
+ public Skillet() : base(0x97F) => Weight = 1.0;
+
+ [Constructible]
+ public Skillet(int uses) : base(uses, 0x97F) => Weight = 1.0;
+
+ public Skillet(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1044567; // skillet
+
+ public override CraftSystem CraftSystem => DefCooking.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/SledgeHammer.cs b/Projects/UOContent/Items/Skill Items/Tools/SledgeHammer.cs
index d90549a67..79a8af497 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/SledgeHammer.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/SledgeHammer.cs
@@ -1,34 +1,34 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0xFB5, 0xFB4)]
- public class SledgeHammer : BaseTool
- {
- [Constructible]
- public SledgeHammer() : base(0xFB5) => Layer = Layer.OneHanded;
-
- [Constructible]
- public SledgeHammer(int uses) : base(uses, 0xFB5) => Layer = Layer.OneHanded;
-
- public SledgeHammer(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
-
- 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(0xFB5, 0xFB4)]
+ public class SledgeHammer : BaseTool
+ {
+ [Constructible]
+ public SledgeHammer() : base(0xFB5) => Layer = Layer.OneHanded;
+
+ [Constructible]
+ public SledgeHammer(int uses) : base(uses, 0xFB5) => Layer = Layer.OneHanded;
+
+ public SledgeHammer(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/SmithHammer.cs b/Projects/UOContent/Items/Skill Items/Tools/SmithHammer.cs
index 6b9a516b7..2cd18d53c 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/SmithHammer.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/SmithHammer.cs
@@ -1,42 +1,42 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x13E3, 0x13E4)]
- public class SmithHammer : BaseTool
- {
- [Constructible]
- public SmithHammer() : base(0x13E3)
- {
- Weight = 8.0;
- Layer = Layer.OneHanded;
- }
-
- [Constructible]
- public SmithHammer(int uses) : base(uses, 0x13E3)
- {
- Weight = 8.0;
- Layer = Layer.OneHanded;
- }
-
- public SmithHammer(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
-
- 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(0x13E3, 0x13E4)]
+ public class SmithHammer : BaseTool
+ {
+ [Constructible]
+ public SmithHammer() : base(0x13E3)
+ {
+ Weight = 8.0;
+ Layer = Layer.OneHanded;
+ }
+
+ [Constructible]
+ public SmithHammer(int uses) : base(uses, 0x13E3)
+ {
+ Weight = 8.0;
+ Layer = Layer.OneHanded;
+ }
+
+ public SmithHammer(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/SmoothingPlane.cs b/Projects/UOContent/Items/Skill Items/Tools/SmoothingPlane.cs
index 65b8f8257..ec48034eb 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/SmoothingPlane.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/SmoothingPlane.cs
@@ -1,34 +1,34 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x1032, 0x1033)]
- public class SmoothingPlane : BaseTool
- {
- [Constructible]
- public SmoothingPlane() : base(0x1032) => Weight = 1.0;
-
- [Constructible]
- public SmoothingPlane(int uses) : base(uses, 0x1032) => Weight = 1.0;
-
- public SmoothingPlane(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
-
- 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(0x1032, 0x1033)]
+ public class SmoothingPlane : BaseTool
+ {
+ [Constructible]
+ public SmoothingPlane() : base(0x1032) => Weight = 1.0;
+
+ [Constructible]
+ public SmoothingPlane(int uses) : base(uses, 0x1032) => Weight = 1.0;
+
+ public SmoothingPlane(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefCarpentry.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/TinkerTools.cs b/Projects/UOContent/Items/Skill Items/Tools/TinkerTools.cs
index 01363461d..e0f5d9fc2 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/TinkerTools.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/TinkerTools.cs
@@ -1,68 +1,68 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x1EB8, 0x1EB9)]
- public class TinkerTools : BaseTool
- {
- [Constructible]
- public TinkerTools() : base(0x1EB8) => Weight = 1.0;
-
- [Constructible]
- public TinkerTools(int uses) : base(uses, 0x1EB8) => Weight = 1.0;
-
- public TinkerTools(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefTinkering.CraftSystem;
-
- 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 TinkersTools : BaseTool
- {
- [Constructible]
- public TinkersTools()
- : base(0x1EBC) =>
- Weight = 1.0;
-
- [Constructible]
- public TinkersTools(int uses)
- : base(uses, 0x1EBC) =>
- Weight = 1.0;
-
- public TinkersTools(Serial serial)
- : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefTinkering.CraftSystem;
-
- 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(0x1EB8, 0x1EB9)]
+ public class TinkerTools : BaseTool
+ {
+ [Constructible]
+ public TinkerTools() : base(0x1EB8) => Weight = 1.0;
+
+ [Constructible]
+ public TinkerTools(int uses) : base(uses, 0x1EB8) => Weight = 1.0;
+
+ public TinkerTools(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefTinkering.CraftSystem;
+
+ 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 TinkersTools : BaseTool
+ {
+ [Constructible]
+ public TinkersTools()
+ : base(0x1EBC) =>
+ Weight = 1.0;
+
+ [Constructible]
+ public TinkersTools(int uses)
+ : base(uses, 0x1EBC) =>
+ Weight = 1.0;
+
+ public TinkersTools(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefTinkering.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Skill Items/Tools/Tongs.cs b/Projects/UOContent/Items/Skill Items/Tools/Tongs.cs
index ad7aec07d..39747705a 100644
--- a/Projects/UOContent/Items/Skill Items/Tools/Tongs.cs
+++ b/Projects/UOContent/Items/Skill Items/Tools/Tongs.cs
@@ -1,34 +1,34 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0xfbb, 0xfbc)]
- public class Tongs : BaseTool
- {
- [Constructible]
- public Tongs() : base(0xFBB) => Weight = 2.0;
-
- [Constructible]
- public Tongs(int uses) : base(uses, 0xFBB) => Weight = 2.0;
-
- public Tongs(Serial serial) : base(serial)
- {
- }
-
- public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
-
- 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(0xfbb, 0xfbc)]
+ public class Tongs : BaseTool
+ {
+ [Constructible]
+ public Tongs() : base(0xFBB) => Weight = 2.0;
+
+ [Constructible]
+ public Tongs(int uses) : base(uses, 0xFBB) => Weight = 2.0;
+
+ public Tongs(Serial serial) : base(serial)
+ {
+ }
+
+ public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/11th Year promo/EarringsOfProtection.cs b/Projects/UOContent/Items/Special/11th Year promo/EarringsOfProtection.cs
index 89df2f2d7..5d3c86aed 100644
--- a/Projects/UOContent/Items/Special/11th Year promo/EarringsOfProtection.cs
+++ b/Projects/UOContent/Items/Special/11th Year promo/EarringsOfProtection.cs
@@ -1,109 +1,109 @@
-namespace Server.Items
-{
- public class EarringBoxSet : RedVelvetGiftBox
- {
- [Constructible]
- public EarringBoxSet()
- {
- DropItem(new EarringsOfProtection(AosElementAttribute.Physical));
- DropItem(new EarringsOfProtection(AosElementAttribute.Fire));
- DropItem(new EarringsOfProtection(AosElementAttribute.Cold));
- DropItem(new EarringsOfProtection(AosElementAttribute.Poison));
- DropItem(new EarringsOfProtection(AosElementAttribute.Energy));
- }
-
- public EarringBoxSet(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 EarringsOfProtection : BaseJewel
- {
- private AosElementAttribute m_Attribute;
-
- [Constructible]
- public EarringsOfProtection() : this(RandomType())
- {
- }
-
- [Constructible]
- public EarringsOfProtection(AosElementAttribute element)
- : base(0x1087, Layer.Earrings)
- {
- Resistances[element] = 2;
-
- m_Attribute = element;
- LootType = LootType.Blessed;
- }
-
- public EarringsOfProtection(Serial serial)
- : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public virtual AosElementAttribute Attribute => m_Attribute;
-
- public override int LabelNumber => GetItemData(m_Attribute, true);
-
- public override int Hue => GetItemData(m_Attribute, false);
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
- writer.Write((int)m_Attribute);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
- m_Attribute = (AosElementAttribute)reader.ReadInt();
- }
-
- public static AosElementAttribute RandomType() => GetTypes(Utility.Random(5));
-
- public static AosElementAttribute GetTypes(int value)
- {
- return value switch
- {
- 0 => AosElementAttribute.Physical,
- 1 => AosElementAttribute.Fire,
- 2 => AosElementAttribute.Cold,
- 3 => AosElementAttribute.Poison,
- _ => AosElementAttribute.Energy
- };
- }
-
- public static int GetItemData(AosElementAttribute element, bool label)
- {
- return element switch
- {
- AosElementAttribute.Physical => label ? 1071091 : 0, // Earring of Protection (Physical) 1071091
- AosElementAttribute.Fire => label ? 1071092 : 0x4ec, // Earring of Protection (Fire) 1071092
- AosElementAttribute.Cold => label ? 1071093 : 0x4f2, // Earring of Protection (Cold) 1071093
- AosElementAttribute.Poison => label ? 1071094 : 0x4f8, // Earring of Protection (Poison) 1071094
- AosElementAttribute.Energy => label ? 1071095 : 0x4fe, // Earring of Protection (Energy) 1071095
- _ => -1
- };
- }
- }
-}
+namespace Server.Items
+{
+ public class EarringBoxSet : RedVelvetGiftBox
+ {
+ [Constructible]
+ public EarringBoxSet()
+ {
+ DropItem(new EarringsOfProtection(AosElementAttribute.Physical));
+ DropItem(new EarringsOfProtection(AosElementAttribute.Fire));
+ DropItem(new EarringsOfProtection(AosElementAttribute.Cold));
+ DropItem(new EarringsOfProtection(AosElementAttribute.Poison));
+ DropItem(new EarringsOfProtection(AosElementAttribute.Energy));
+ }
+
+ public EarringBoxSet(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 EarringsOfProtection : BaseJewel
+ {
+ private AosElementAttribute m_Attribute;
+
+ [Constructible]
+ public EarringsOfProtection() : this(RandomType())
+ {
+ }
+
+ [Constructible]
+ public EarringsOfProtection(AosElementAttribute element)
+ : base(0x1087, Layer.Earrings)
+ {
+ Resistances[element] = 2;
+
+ m_Attribute = element;
+ LootType = LootType.Blessed;
+ }
+
+ public EarringsOfProtection(Serial serial)
+ : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public virtual AosElementAttribute Attribute => m_Attribute;
+
+ public override int LabelNumber => GetItemData(m_Attribute, true);
+
+ public override int Hue => GetItemData(m_Attribute, false);
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+ writer.Write((int)m_Attribute);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+ m_Attribute = (AosElementAttribute)reader.ReadInt();
+ }
+
+ public static AosElementAttribute RandomType() => GetTypes(Utility.Random(5));
+
+ public static AosElementAttribute GetTypes(int value)
+ {
+ return value switch
+ {
+ 0 => AosElementAttribute.Physical,
+ 1 => AosElementAttribute.Fire,
+ 2 => AosElementAttribute.Cold,
+ 3 => AosElementAttribute.Poison,
+ _ => AosElementAttribute.Energy
+ };
+ }
+
+ public static int GetItemData(AosElementAttribute element, bool label)
+ {
+ return element switch
+ {
+ AosElementAttribute.Physical => label ? 1071091 : 0, // Earring of Protection (Physical) 1071091
+ AosElementAttribute.Fire => label ? 1071092 : 0x4ec, // Earring of Protection (Fire) 1071092
+ AosElementAttribute.Cold => label ? 1071093 : 0x4f2, // Earring of Protection (Cold) 1071093
+ AosElementAttribute.Poison => label ? 1071094 : 0x4f8, // Earring of Protection (Poison) 1071094
+ AosElementAttribute.Energy => label ? 1071095 : 0x4fe, // Earring of Protection (Energy) 1071095
+ _ => -1
+ };
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs
index ec3adcdf1..7922d6a36 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs
@@ -1,308 +1,308 @@
-using System;
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Gumps;
-using Server.Multis;
-using Server.Network;
-
-namespace Server.Items
-{
- public sealed class StopMusic : Packet
- {
- public static readonly Packet Instance = SetStatic(new StopMusic());
-
- public StopMusic() : base(0x6D, 3)
- {
- Stream.Write((short)0x1FFF);
- }
- }
-
- [Flippable(0x2AF9, 0x2AFD)]
- public class DawnsMusicBox : Item, ISecurable
- {
- private static Dictionary m_Info;
-
- public static MusicName[] m_CommonTracks =
- {
- MusicName.Samlethe, MusicName.Sailing, MusicName.Britain2, MusicName.Britain1,
- MusicName.Bucsden, MusicName.Forest_a, MusicName.Cove, MusicName.Death,
- MusicName.Dungeon9, MusicName.Dungeon2, MusicName.Cave01, MusicName.Combat3,
- MusicName.Combat1, MusicName.Combat2, MusicName.Jhelom, MusicName.Linelle,
- MusicName.LBCastle, MusicName.Minoc, MusicName.Moonglow, MusicName.Magincia,
- MusicName.Nujelm, MusicName.BTCastle, MusicName.Tavern04, MusicName.Skarabra,
- MusicName.Stones2, MusicName.Serpents, MusicName.Taiko, MusicName.Tavern01,
- MusicName.Tavern02, MusicName.Tavern03, MusicName.TokunoDungeon, MusicName.Trinsic,
- MusicName.OldUlt01, MusicName.Ocllo, MusicName.Vesper, MusicName.Victory,
- MusicName.Mountn_a, MusicName.Wind, MusicName.Yew, MusicName.Zento
- };
-
- public static MusicName[] m_UncommonTracks =
- {
- MusicName.GwennoConversation, MusicName.DreadHornArea, MusicName.ElfCity,
- MusicName.GoodEndGame, MusicName.GoodVsEvil, MusicName.GreatEarthSerpents,
- MusicName.GrizzleDungeon, MusicName.Humanoids_U9, MusicName.MelisandesLair,
- MusicName.MinocNegative, MusicName.ParoxysmusLair, MusicName.Paws
- };
-
- public static MusicName[] m_RareTracks =
- {
- MusicName.SelimsBar, MusicName.SerpentIsleCombat_U7, MusicName.ValoriaShips
- };
-
- private int m_Count;
- private int m_ItemID;
-
- private Timer m_Timer;
-
- [Constructible]
- public DawnsMusicBox() : base(0x2AF9)
- {
- Weight = 1.0;
-
- Tracks = new List();
-
- while (Tracks.Count < 4)
- {
- MusicName name = RandomTrack(DawnsMusicRarity.Common);
-
- if (!Tracks.Contains(name))
- Tracks.Add(name);
- }
- }
-
- public DawnsMusicBox(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1075198; // Dawn�s Music Box
-
- public List Tracks { get; private set; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SecureLevel Level { get; set; }
-
- public override void OnAfterDuped(Item newItem)
- {
- if (!(newItem is DawnsMusicBox box))
- return;
-
- box.Tracks = new List();
- box.Tracks.AddRange(Tracks);
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- int commonSongs = 0;
- int uncommonSongs = 0;
- int rareSongs = 0;
-
- for (int i = 0; i < Tracks.Count; i++)
- {
- DawnsMusicInfo info = GetInfo(Tracks[i]);
-
- switch (info.Rarity)
- {
- case DawnsMusicRarity.Common:
- commonSongs++;
- break;
- case DawnsMusicRarity.Uncommon:
- uncommonSongs++;
- break;
- case DawnsMusicRarity.Rare:
- rareSongs++;
- break;
- }
- }
-
- if (commonSongs > 0)
- list.Add(1075234, commonSongs.ToString()); // ~1_NUMBER~ Common Tracks
- if (uncommonSongs > 0)
- list.Add(1075235, uncommonSongs.ToString()); // ~1_NUMBER~ Uncommon Tracks
- if (rareSongs > 0)
- list.Add(1075236, rareSongs.ToString()); // ~1_NUMBER~ Rare Tracks
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- SetSecureLevelEntry.AddTo(from, this, list); // Set secure level
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!IsChildOf(from.Backpack) && !IsLockedDown)
- {
- from.SendLocalizedMessage(
- 1061856); // You must have the item in your backpack or locked down in order to use it.
- }
- else if (IsLockedDown && !HasAccces(from))
- {
- from.SendLocalizedMessage(502436); // That is not accessible.
- }
- else
- {
- from.CloseGump();
- from.SendGump(new DawnsMusicBoxGump(this));
- }
- }
-
- public bool HasAccces(Mobile m) => m.AccessLevel >= AccessLevel.GameMaster || BaseHouse.FindHouseAt(this)?.HasAccess(m) == true;
-
- public void PlayMusic(Mobile m, MusicName music)
- {
- if (m_Timer?.Running == true)
- EndMusic(m);
- else
- m_ItemID = ItemID;
-
- m.Send(new PlayMusic(music));
- m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 4, Animate);
- }
-
- public void EndMusic(Mobile m)
- {
- if (m_Timer?.Running == true)
- m_Timer.Stop();
-
- m.Send(StopMusic.Instance);
-
- if (m_Count > 0)
- ItemID = m_ItemID;
-
- m_Count = 0;
- }
-
- private void Animate()
- {
- m_Count++;
-
- if (m_Count >= 4)
- {
- m_Count = 0;
- ItemID = m_ItemID;
- }
- else
- {
- ItemID++;
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.Write(Tracks.Count);
-
- for (int i = 0; i < Tracks.Count; i++)
- writer.Write((int)Tracks[i]);
-
- writer.Write((int)Level);
- writer.Write(m_ItemID);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- int count = reader.ReadInt();
- Tracks = new List();
-
- for (int i = 0; i < count; i++)
- Tracks.Add((MusicName)reader.ReadInt());
-
- Level = (SecureLevel)reader.ReadInt();
- m_ItemID = reader.ReadInt();
- }
-
- public static void Initialize()
- {
- m_Info = new Dictionary
- {
- { MusicName.Samlethe, new DawnsMusicInfo(1075152, DawnsMusicRarity.Common) },
- { MusicName.Sailing, new DawnsMusicInfo(1075163, DawnsMusicRarity.Common) },
- { MusicName.Britain2, new DawnsMusicInfo(1075145, DawnsMusicRarity.Common) },
- { MusicName.Britain1, new DawnsMusicInfo(1075144, DawnsMusicRarity.Common) },
- { MusicName.Bucsden, new DawnsMusicInfo(1075146, DawnsMusicRarity.Common) },
- { MusicName.Forest_a, new DawnsMusicInfo(1075161, DawnsMusicRarity.Common) },
- { MusicName.Cove, new DawnsMusicInfo(1075176, DawnsMusicRarity.Common) },
- { MusicName.Death, new DawnsMusicInfo(1075171, DawnsMusicRarity.Common) },
- { MusicName.Dungeon9, new DawnsMusicInfo(1075160, DawnsMusicRarity.Common) },
- { MusicName.Dungeon2, new DawnsMusicInfo(1075175, DawnsMusicRarity.Common) },
- { MusicName.Cave01, new DawnsMusicInfo(1075159, DawnsMusicRarity.Common) },
- { MusicName.Combat3, new DawnsMusicInfo(1075170, DawnsMusicRarity.Common) },
- { MusicName.Combat1, new DawnsMusicInfo(1075168, DawnsMusicRarity.Common) },
- { MusicName.Combat2, new DawnsMusicInfo(1075169, DawnsMusicRarity.Common) },
- { MusicName.Jhelom, new DawnsMusicInfo(1075147, DawnsMusicRarity.Common) },
- { MusicName.Linelle, new DawnsMusicInfo(1075185, DawnsMusicRarity.Common) },
- { MusicName.LBCastle, new DawnsMusicInfo(1075148, DawnsMusicRarity.Common) },
- { MusicName.Minoc, new DawnsMusicInfo(1075150, DawnsMusicRarity.Common) },
- { MusicName.Moonglow, new DawnsMusicInfo(1075177, DawnsMusicRarity.Common) },
- { MusicName.Magincia, new DawnsMusicInfo(1075149, DawnsMusicRarity.Common) },
- { MusicName.Nujelm, new DawnsMusicInfo(1075174, DawnsMusicRarity.Common) },
- { MusicName.BTCastle, new DawnsMusicInfo(1075173, DawnsMusicRarity.Common) },
- { MusicName.Tavern04, new DawnsMusicInfo(1075167, DawnsMusicRarity.Common) },
- { MusicName.Skarabra, new DawnsMusicInfo(1075154, DawnsMusicRarity.Common) },
- { MusicName.Stones2, new DawnsMusicInfo(1075143, DawnsMusicRarity.Common) },
- { MusicName.Serpents, new DawnsMusicInfo(1075153, DawnsMusicRarity.Common) },
- { MusicName.Taiko, new DawnsMusicInfo(1075180, DawnsMusicRarity.Common) },
- { MusicName.Tavern01, new DawnsMusicInfo(1075164, DawnsMusicRarity.Common) },
- { MusicName.Tavern02, new DawnsMusicInfo(1075165, DawnsMusicRarity.Common) },
- { MusicName.Tavern03, new DawnsMusicInfo(1075166, DawnsMusicRarity.Common) },
- { MusicName.TokunoDungeon, new DawnsMusicInfo(1075179, DawnsMusicRarity.Common) },
- { MusicName.Trinsic, new DawnsMusicInfo(1075155, DawnsMusicRarity.Common) },
- { MusicName.OldUlt01, new DawnsMusicInfo(1075142, DawnsMusicRarity.Common) },
- { MusicName.Ocllo, new DawnsMusicInfo(1075151, DawnsMusicRarity.Common) },
- { MusicName.Vesper, new DawnsMusicInfo(1075156, DawnsMusicRarity.Common) },
- { MusicName.Victory, new DawnsMusicInfo(1075172, DawnsMusicRarity.Common) },
- { MusicName.Mountn_a, new DawnsMusicInfo(1075162, DawnsMusicRarity.Common) },
- { MusicName.Wind, new DawnsMusicInfo(1075157, DawnsMusicRarity.Common) },
- { MusicName.Yew, new DawnsMusicInfo(1075158, DawnsMusicRarity.Common) },
- { MusicName.Zento, new DawnsMusicInfo(1075178, DawnsMusicRarity.Common) },
- { MusicName.GwennoConversation, new DawnsMusicInfo(1075131, DawnsMusicRarity.Uncommon) },
- { MusicName.DreadHornArea, new DawnsMusicInfo(1075181, DawnsMusicRarity.Uncommon) },
- { MusicName.ElfCity, new DawnsMusicInfo(1075182, DawnsMusicRarity.Uncommon) },
- { MusicName.GoodEndGame, new DawnsMusicInfo(1075132, DawnsMusicRarity.Uncommon) },
- { MusicName.GoodVsEvil, new DawnsMusicInfo(1075133, DawnsMusicRarity.Uncommon) },
- { MusicName.GreatEarthSerpents, new DawnsMusicInfo(1075134, DawnsMusicRarity.Uncommon) },
- { MusicName.GrizzleDungeon, new DawnsMusicInfo(1075186, DawnsMusicRarity.Uncommon) },
- { MusicName.Humanoids_U9, new DawnsMusicInfo(1075135, DawnsMusicRarity.Uncommon) },
- { MusicName.MelisandesLair, new DawnsMusicInfo(1075183, DawnsMusicRarity.Uncommon) },
- { MusicName.MinocNegative, new DawnsMusicInfo(1075136, DawnsMusicRarity.Uncommon) },
- { MusicName.ParoxysmusLair, new DawnsMusicInfo(1075184, DawnsMusicRarity.Uncommon) },
- { MusicName.Paws, new DawnsMusicInfo(1075137, DawnsMusicRarity.Uncommon) },
- { MusicName.SelimsBar, new DawnsMusicInfo(1075138, DawnsMusicRarity.Rare) },
- { MusicName.SerpentIsleCombat_U7, new DawnsMusicInfo(1075139, DawnsMusicRarity.Rare) },
- { MusicName.ValoriaShips, new DawnsMusicInfo(1075140, DawnsMusicRarity.Rare) }
- };
- }
-
- public static DawnsMusicInfo GetInfo(MusicName name)
- {
- if (m_Info == null) // sanity
- return null;
-
- m_Info.TryGetValue(name, out DawnsMusicInfo info);
- return info;
- }
-
- public static MusicName RandomTrack(DawnsMusicRarity rarity)
- {
- var list = rarity switch
- {
- DawnsMusicRarity.Common => m_CommonTracks,
- DawnsMusicRarity.Uncommon => m_UncommonTracks,
- DawnsMusicRarity.Rare => m_RareTracks,
- _ => m_CommonTracks
- };
-
- return list.RandomElement();
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Gumps;
+using Server.Multis;
+using Server.Network;
+
+namespace Server.Items
+{
+ public sealed class StopMusic : Packet
+ {
+ public static readonly Packet Instance = SetStatic(new StopMusic());
+
+ public StopMusic() : base(0x6D, 3)
+ {
+ Stream.Write((short)0x1FFF);
+ }
+ }
+
+ [Flippable(0x2AF9, 0x2AFD)]
+ public class DawnsMusicBox : Item, ISecurable
+ {
+ private static Dictionary m_Info;
+
+ public static MusicName[] m_CommonTracks =
+ {
+ MusicName.Samlethe, MusicName.Sailing, MusicName.Britain2, MusicName.Britain1,
+ MusicName.Bucsden, MusicName.Forest_a, MusicName.Cove, MusicName.Death,
+ MusicName.Dungeon9, MusicName.Dungeon2, MusicName.Cave01, MusicName.Combat3,
+ MusicName.Combat1, MusicName.Combat2, MusicName.Jhelom, MusicName.Linelle,
+ MusicName.LBCastle, MusicName.Minoc, MusicName.Moonglow, MusicName.Magincia,
+ MusicName.Nujelm, MusicName.BTCastle, MusicName.Tavern04, MusicName.Skarabra,
+ MusicName.Stones2, MusicName.Serpents, MusicName.Taiko, MusicName.Tavern01,
+ MusicName.Tavern02, MusicName.Tavern03, MusicName.TokunoDungeon, MusicName.Trinsic,
+ MusicName.OldUlt01, MusicName.Ocllo, MusicName.Vesper, MusicName.Victory,
+ MusicName.Mountn_a, MusicName.Wind, MusicName.Yew, MusicName.Zento
+ };
+
+ public static MusicName[] m_UncommonTracks =
+ {
+ MusicName.GwennoConversation, MusicName.DreadHornArea, MusicName.ElfCity,
+ MusicName.GoodEndGame, MusicName.GoodVsEvil, MusicName.GreatEarthSerpents,
+ MusicName.GrizzleDungeon, MusicName.Humanoids_U9, MusicName.MelisandesLair,
+ MusicName.MinocNegative, MusicName.ParoxysmusLair, MusicName.Paws
+ };
+
+ public static MusicName[] m_RareTracks =
+ {
+ MusicName.SelimsBar, MusicName.SerpentIsleCombat_U7, MusicName.ValoriaShips
+ };
+
+ private int m_Count;
+ private int m_ItemID;
+
+ private Timer m_Timer;
+
+ [Constructible]
+ public DawnsMusicBox() : base(0x2AF9)
+ {
+ Weight = 1.0;
+
+ Tracks = new List();
+
+ while (Tracks.Count < 4)
+ {
+ MusicName name = RandomTrack(DawnsMusicRarity.Common);
+
+ if (!Tracks.Contains(name))
+ Tracks.Add(name);
+ }
+ }
+
+ public DawnsMusicBox(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1075198; // Dawn�s Music Box
+
+ public List Tracks { get; private set; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SecureLevel Level { get; set; }
+
+ public override void OnAfterDuped(Item newItem)
+ {
+ if (!(newItem is DawnsMusicBox box))
+ return;
+
+ box.Tracks = new List();
+ box.Tracks.AddRange(Tracks);
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ int commonSongs = 0;
+ int uncommonSongs = 0;
+ int rareSongs = 0;
+
+ for (int i = 0; i < Tracks.Count; i++)
+ {
+ DawnsMusicInfo info = GetInfo(Tracks[i]);
+
+ switch (info.Rarity)
+ {
+ case DawnsMusicRarity.Common:
+ commonSongs++;
+ break;
+ case DawnsMusicRarity.Uncommon:
+ uncommonSongs++;
+ break;
+ case DawnsMusicRarity.Rare:
+ rareSongs++;
+ break;
+ }
+ }
+
+ if (commonSongs > 0)
+ list.Add(1075234, commonSongs.ToString()); // ~1_NUMBER~ Common Tracks
+ if (uncommonSongs > 0)
+ list.Add(1075235, uncommonSongs.ToString()); // ~1_NUMBER~ Uncommon Tracks
+ if (rareSongs > 0)
+ list.Add(1075236, rareSongs.ToString()); // ~1_NUMBER~ Rare Tracks
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ SetSecureLevelEntry.AddTo(from, this, list); // Set secure level
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!IsChildOf(from.Backpack) && !IsLockedDown)
+ {
+ from.SendLocalizedMessage(
+ 1061856); // You must have the item in your backpack or locked down in order to use it.
+ }
+ else if (IsLockedDown && !HasAccces(from))
+ {
+ from.SendLocalizedMessage(502436); // That is not accessible.
+ }
+ else
+ {
+ from.CloseGump();
+ from.SendGump(new DawnsMusicBoxGump(this));
+ }
+ }
+
+ public bool HasAccces(Mobile m) => m.AccessLevel >= AccessLevel.GameMaster || BaseHouse.FindHouseAt(this)?.HasAccess(m) == true;
+
+ public void PlayMusic(Mobile m, MusicName music)
+ {
+ if (m_Timer?.Running == true)
+ EndMusic(m);
+ else
+ m_ItemID = ItemID;
+
+ m.Send(new PlayMusic(music));
+ m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 4, Animate);
+ }
+
+ public void EndMusic(Mobile m)
+ {
+ if (m_Timer?.Running == true)
+ m_Timer.Stop();
+
+ m.Send(StopMusic.Instance);
+
+ if (m_Count > 0)
+ ItemID = m_ItemID;
+
+ m_Count = 0;
+ }
+
+ private void Animate()
+ {
+ m_Count++;
+
+ if (m_Count >= 4)
+ {
+ m_Count = 0;
+ ItemID = m_ItemID;
+ }
+ else
+ {
+ ItemID++;
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.Write(Tracks.Count);
+
+ for (int i = 0; i < Tracks.Count; i++)
+ writer.Write((int)Tracks[i]);
+
+ writer.Write((int)Level);
+ writer.Write(m_ItemID);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ int count = reader.ReadInt();
+ Tracks = new List();
+
+ for (int i = 0; i < count; i++)
+ Tracks.Add((MusicName)reader.ReadInt());
+
+ Level = (SecureLevel)reader.ReadInt();
+ m_ItemID = reader.ReadInt();
+ }
+
+ public static void Initialize()
+ {
+ m_Info = new Dictionary
+ {
+ { MusicName.Samlethe, new DawnsMusicInfo(1075152, DawnsMusicRarity.Common) },
+ { MusicName.Sailing, new DawnsMusicInfo(1075163, DawnsMusicRarity.Common) },
+ { MusicName.Britain2, new DawnsMusicInfo(1075145, DawnsMusicRarity.Common) },
+ { MusicName.Britain1, new DawnsMusicInfo(1075144, DawnsMusicRarity.Common) },
+ { MusicName.Bucsden, new DawnsMusicInfo(1075146, DawnsMusicRarity.Common) },
+ { MusicName.Forest_a, new DawnsMusicInfo(1075161, DawnsMusicRarity.Common) },
+ { MusicName.Cove, new DawnsMusicInfo(1075176, DawnsMusicRarity.Common) },
+ { MusicName.Death, new DawnsMusicInfo(1075171, DawnsMusicRarity.Common) },
+ { MusicName.Dungeon9, new DawnsMusicInfo(1075160, DawnsMusicRarity.Common) },
+ { MusicName.Dungeon2, new DawnsMusicInfo(1075175, DawnsMusicRarity.Common) },
+ { MusicName.Cave01, new DawnsMusicInfo(1075159, DawnsMusicRarity.Common) },
+ { MusicName.Combat3, new DawnsMusicInfo(1075170, DawnsMusicRarity.Common) },
+ { MusicName.Combat1, new DawnsMusicInfo(1075168, DawnsMusicRarity.Common) },
+ { MusicName.Combat2, new DawnsMusicInfo(1075169, DawnsMusicRarity.Common) },
+ { MusicName.Jhelom, new DawnsMusicInfo(1075147, DawnsMusicRarity.Common) },
+ { MusicName.Linelle, new DawnsMusicInfo(1075185, DawnsMusicRarity.Common) },
+ { MusicName.LBCastle, new DawnsMusicInfo(1075148, DawnsMusicRarity.Common) },
+ { MusicName.Minoc, new DawnsMusicInfo(1075150, DawnsMusicRarity.Common) },
+ { MusicName.Moonglow, new DawnsMusicInfo(1075177, DawnsMusicRarity.Common) },
+ { MusicName.Magincia, new DawnsMusicInfo(1075149, DawnsMusicRarity.Common) },
+ { MusicName.Nujelm, new DawnsMusicInfo(1075174, DawnsMusicRarity.Common) },
+ { MusicName.BTCastle, new DawnsMusicInfo(1075173, DawnsMusicRarity.Common) },
+ { MusicName.Tavern04, new DawnsMusicInfo(1075167, DawnsMusicRarity.Common) },
+ { MusicName.Skarabra, new DawnsMusicInfo(1075154, DawnsMusicRarity.Common) },
+ { MusicName.Stones2, new DawnsMusicInfo(1075143, DawnsMusicRarity.Common) },
+ { MusicName.Serpents, new DawnsMusicInfo(1075153, DawnsMusicRarity.Common) },
+ { MusicName.Taiko, new DawnsMusicInfo(1075180, DawnsMusicRarity.Common) },
+ { MusicName.Tavern01, new DawnsMusicInfo(1075164, DawnsMusicRarity.Common) },
+ { MusicName.Tavern02, new DawnsMusicInfo(1075165, DawnsMusicRarity.Common) },
+ { MusicName.Tavern03, new DawnsMusicInfo(1075166, DawnsMusicRarity.Common) },
+ { MusicName.TokunoDungeon, new DawnsMusicInfo(1075179, DawnsMusicRarity.Common) },
+ { MusicName.Trinsic, new DawnsMusicInfo(1075155, DawnsMusicRarity.Common) },
+ { MusicName.OldUlt01, new DawnsMusicInfo(1075142, DawnsMusicRarity.Common) },
+ { MusicName.Ocllo, new DawnsMusicInfo(1075151, DawnsMusicRarity.Common) },
+ { MusicName.Vesper, new DawnsMusicInfo(1075156, DawnsMusicRarity.Common) },
+ { MusicName.Victory, new DawnsMusicInfo(1075172, DawnsMusicRarity.Common) },
+ { MusicName.Mountn_a, new DawnsMusicInfo(1075162, DawnsMusicRarity.Common) },
+ { MusicName.Wind, new DawnsMusicInfo(1075157, DawnsMusicRarity.Common) },
+ { MusicName.Yew, new DawnsMusicInfo(1075158, DawnsMusicRarity.Common) },
+ { MusicName.Zento, new DawnsMusicInfo(1075178, DawnsMusicRarity.Common) },
+ { MusicName.GwennoConversation, new DawnsMusicInfo(1075131, DawnsMusicRarity.Uncommon) },
+ { MusicName.DreadHornArea, new DawnsMusicInfo(1075181, DawnsMusicRarity.Uncommon) },
+ { MusicName.ElfCity, new DawnsMusicInfo(1075182, DawnsMusicRarity.Uncommon) },
+ { MusicName.GoodEndGame, new DawnsMusicInfo(1075132, DawnsMusicRarity.Uncommon) },
+ { MusicName.GoodVsEvil, new DawnsMusicInfo(1075133, DawnsMusicRarity.Uncommon) },
+ { MusicName.GreatEarthSerpents, new DawnsMusicInfo(1075134, DawnsMusicRarity.Uncommon) },
+ { MusicName.GrizzleDungeon, new DawnsMusicInfo(1075186, DawnsMusicRarity.Uncommon) },
+ { MusicName.Humanoids_U9, new DawnsMusicInfo(1075135, DawnsMusicRarity.Uncommon) },
+ { MusicName.MelisandesLair, new DawnsMusicInfo(1075183, DawnsMusicRarity.Uncommon) },
+ { MusicName.MinocNegative, new DawnsMusicInfo(1075136, DawnsMusicRarity.Uncommon) },
+ { MusicName.ParoxysmusLair, new DawnsMusicInfo(1075184, DawnsMusicRarity.Uncommon) },
+ { MusicName.Paws, new DawnsMusicInfo(1075137, DawnsMusicRarity.Uncommon) },
+ { MusicName.SelimsBar, new DawnsMusicInfo(1075138, DawnsMusicRarity.Rare) },
+ { MusicName.SerpentIsleCombat_U7, new DawnsMusicInfo(1075139, DawnsMusicRarity.Rare) },
+ { MusicName.ValoriaShips, new DawnsMusicInfo(1075140, DawnsMusicRarity.Rare) }
+ };
+ }
+
+ public static DawnsMusicInfo GetInfo(MusicName name)
+ {
+ if (m_Info == null) // sanity
+ return null;
+
+ m_Info.TryGetValue(name, out DawnsMusicInfo info);
+ return info;
+ }
+
+ public static MusicName RandomTrack(DawnsMusicRarity rarity)
+ {
+ var list = rarity switch
+ {
+ DawnsMusicRarity.Common => m_CommonTracks,
+ DawnsMusicRarity.Uncommon => m_UncommonTracks,
+ DawnsMusicRarity.Rare => m_RareTracks,
+ _ => m_CommonTracks
+ };
+
+ return list.RandomElement();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicGear.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicGear.cs
index f4400f69b..be4be6cd7 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicGear.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicGear.cs
@@ -1,135 +1,135 @@
-using Server.Targeting;
-
-namespace Server.Items
-{
- [Flippable(0x1053, 0x1054)]
- public class DawnsMusicGear : Item
- {
- [Constructible]
- public DawnsMusicGear() : this(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Common))
- {
- }
-
- [Constructible]
- public DawnsMusicGear(MusicName music) : base(0x1053)
- {
- Music = music;
-
- Weight = 1.0;
- }
-
- public DawnsMusicGear(Serial serial) : base(serial)
- {
- }
-
- public static DawnsMusicGear RandomCommon => new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Common));
-
- public static DawnsMusicGear RandomUncommon =>
- new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Uncommon));
-
- public static DawnsMusicGear RandomRare => new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Rare));
-
- [CommandProperty(AccessLevel.GameMaster)]
- public MusicName Music { get; set; }
-
- public override void AddNameProperty(ObjectPropertyList list)
- {
- DawnsMusicInfo info = DawnsMusicBox.GetInfo(Music);
-
- if (info != null)
- {
- if (info.Rarity == DawnsMusicRarity.Common)
- list.Add(1075204); // Gear for Dawn's Music Box (Common)
- else if (info.Rarity == DawnsMusicRarity.Uncommon)
- list.Add(1075205); // Gear for Dawn's Music Box (Uncommon)
- else if (info.Rarity == DawnsMusicRarity.Rare)
- list.Add(1075206); // Gear for Dawn's Music Box (Rare)
-
- list.Add(info.Name);
- }
- else
- {
- base.AddNameProperty(list);
- }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- from.Target = new InternalTarget(this);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(1); // version
-
- writer.Write((int)Music);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- switch (version)
- {
- case 1:
- {
- Music = (MusicName)reader.ReadInt();
- break;
- }
- }
-
- if (version == 0) // Music wasn't serialized in version 0, pick a new track of random rarity
- {
- DawnsMusicRarity rarity;
- double rand = Utility.RandomDouble();
-
- if (rand < 0.025)
- rarity = DawnsMusicRarity.Rare;
- else if (rand < 0.225)
- rarity = DawnsMusicRarity.Uncommon;
- else
- rarity = DawnsMusicRarity.Common;
-
- Music = DawnsMusicBox.RandomTrack(rarity);
- }
- }
-
- public class InternalTarget : Target
- {
- private readonly DawnsMusicGear m_Gear;
-
- public InternalTarget(DawnsMusicGear gear) : base(2, false, TargetFlags.None) => m_Gear = gear;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Gear?.Deleted != false)
- return;
-
- if (targeted is DawnsMusicBox box)
- {
- if (!box.Tracks.Contains(m_Gear.Music))
- {
- box.Tracks.Add(m_Gear.Music);
- box.InvalidateProperties();
-
- m_Gear.Delete();
-
- from.SendLocalizedMessage(1071961); // This song has been added to the musicbox.
- }
- else
- {
- from.SendLocalizedMessage(1071962); // This song track is already in the musicbox.
- }
- }
- else
- {
- from.SendLocalizedMessage(1071964); // Gears can only be put into a musicbox.
- }
- }
- }
- }
-}
+using Server.Targeting;
+
+namespace Server.Items
+{
+ [Flippable(0x1053, 0x1054)]
+ public class DawnsMusicGear : Item
+ {
+ [Constructible]
+ public DawnsMusicGear() : this(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Common))
+ {
+ }
+
+ [Constructible]
+ public DawnsMusicGear(MusicName music) : base(0x1053)
+ {
+ Music = music;
+
+ Weight = 1.0;
+ }
+
+ public DawnsMusicGear(Serial serial) : base(serial)
+ {
+ }
+
+ public static DawnsMusicGear RandomCommon => new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Common));
+
+ public static DawnsMusicGear RandomUncommon =>
+ new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Uncommon));
+
+ public static DawnsMusicGear RandomRare => new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Rare));
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public MusicName Music { get; set; }
+
+ public override void AddNameProperty(ObjectPropertyList list)
+ {
+ DawnsMusicInfo info = DawnsMusicBox.GetInfo(Music);
+
+ if (info != null)
+ {
+ if (info.Rarity == DawnsMusicRarity.Common)
+ list.Add(1075204); // Gear for Dawn's Music Box (Common)
+ else if (info.Rarity == DawnsMusicRarity.Uncommon)
+ list.Add(1075205); // Gear for Dawn's Music Box (Uncommon)
+ else if (info.Rarity == DawnsMusicRarity.Rare)
+ list.Add(1075206); // Gear for Dawn's Music Box (Rare)
+
+ list.Add(info.Name);
+ }
+ else
+ {
+ base.AddNameProperty(list);
+ }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ from.Target = new InternalTarget(this);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(1); // version
+
+ writer.Write((int)Music);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ Music = (MusicName)reader.ReadInt();
+ break;
+ }
+ }
+
+ if (version == 0) // Music wasn't serialized in version 0, pick a new track of random rarity
+ {
+ DawnsMusicRarity rarity;
+ double rand = Utility.RandomDouble();
+
+ if (rand < 0.025)
+ rarity = DawnsMusicRarity.Rare;
+ else if (rand < 0.225)
+ rarity = DawnsMusicRarity.Uncommon;
+ else
+ rarity = DawnsMusicRarity.Common;
+
+ Music = DawnsMusicBox.RandomTrack(rarity);
+ }
+ }
+
+ public class InternalTarget : Target
+ {
+ private readonly DawnsMusicGear m_Gear;
+
+ public InternalTarget(DawnsMusicGear gear) : base(2, false, TargetFlags.None) => m_Gear = gear;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Gear?.Deleted != false)
+ return;
+
+ if (targeted is DawnsMusicBox box)
+ {
+ if (!box.Tracks.Contains(m_Gear.Music))
+ {
+ box.Tracks.Add(m_Gear.Music);
+ box.InvalidateProperties();
+
+ m_Gear.Delete();
+
+ from.SendLocalizedMessage(1071961); // This song has been added to the musicbox.
+ }
+ else
+ {
+ from.SendLocalizedMessage(1071962); // This song track is already in the musicbox.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(1071964); // Gears can only be put into a musicbox.
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicInfo.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicInfo.cs
index c02d3663b..ba95bcbd6 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicInfo.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicInfo.cs
@@ -1,22 +1,22 @@
-namespace Server.Items
-{
- public enum DawnsMusicRarity
- {
- Common,
- Uncommon,
- Rare
- }
-
- public class DawnsMusicInfo
- {
- public DawnsMusicInfo(int name, DawnsMusicRarity rarity)
- {
- Name = name;
- Rarity = rarity;
- }
-
- public int Name { get; }
-
- public DawnsMusicRarity Rarity { get; }
- }
+namespace Server.Items
+{
+ public enum DawnsMusicRarity
+ {
+ Common,
+ Uncommon,
+ Rare
+ }
+
+ public class DawnsMusicInfo
+ {
+ public DawnsMusicInfo(int name, DawnsMusicRarity rarity)
+ {
+ Name = name;
+ Rarity = rarity;
+ }
+
+ public int Name { get; }
+
+ public DawnsMusicRarity Rarity { get; }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/DupresShield.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/DupresShield.cs
index 26a826e97..6bc6dd48a 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/DupresShield.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/DupresShield.cs
@@ -1,50 +1,50 @@
-namespace Server.Items
-{
- public class DupresShield : BaseShield, ITokunoDyable
- {
- [Constructible]
- public DupresShield() : base(0x2B01)
- {
- LootType = LootType.Blessed;
- Weight = 6.0;
-
- Attributes.BonusHits = 5;
- Attributes.RegenHits = 1;
-
- SkillBonuses.SetValues(0, SkillName.Parry, 5);
- }
-
- public DupresShield(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1075196; // Dupre�s Shield
-
- public override int BasePhysicalResistance => 1;
- public override int BaseFireResistance => 0;
- public override int BaseColdResistance => 0;
- public override int BasePoisonResistance => 0;
- public override int BaseEnergyResistance => 1;
-
- public override int InitMinHits => 255;
- public override int InitMaxHits => 255;
-
- public override int AosStrReq => 50;
-
- public override int ArmorBase => 15;
-
- 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 DupresShield : BaseShield, ITokunoDyable
+ {
+ [Constructible]
+ public DupresShield() : base(0x2B01)
+ {
+ LootType = LootType.Blessed;
+ Weight = 6.0;
+
+ Attributes.BonusHits = 5;
+ Attributes.RegenHits = 1;
+
+ SkillBonuses.SetValues(0, SkillName.Parry, 5);
+ }
+
+ public DupresShield(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1075196; // Dupre�s Shield
+
+ public override int BasePhysicalResistance => 1;
+ public override int BaseFireResistance => 0;
+ public override int BaseColdResistance => 0;
+ public override int BasePoisonResistance => 0;
+ public override int BaseEnergyResistance => 1;
+
+ public override int InitMinHits => 255;
+ public override int InitMaxHits => 255;
+
+ public override int AosStrReq => 50;
+
+ public override int ArmorBase => 15;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/FountainOfLife.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/FountainOfLife.cs
index c3315b388..a677c9392 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/FountainOfLife.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/FountainOfLife.cs
@@ -1,250 +1,250 @@
-using System;
-
-namespace Server.Items
-{
- public class EnhancedBandage : Bandage
- {
- [Constructible]
- public EnhancedBandage(int amount = 1)
- : base(amount) =>
- Hue = 0x8A5;
-
- public EnhancedBandage(Serial serial)
- : base(serial)
- {
- }
-
- public static int HealingBonus => 10;
-
- public override int LabelNumber => 1152441; // enhanced bandage
-
- public override bool Dye(Mobile from, DyeTub sender) => false;
-
- public override void AddNameProperties(ObjectPropertyList list)
- {
- base.AddNameProperties(list);
-
- list.Add(1075216); // these bandages have been enhanced
- }
-
- 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();
- }
- }
-
- [Flippable(0x2AC0, 0x2AC3)]
- public class FountainOfLife : BaseAddonContainer
- {
- private int m_Charges;
-
- private Timer m_Timer;
-
- [Constructible]
- public FountainOfLife(int charges = 10)
- : base(0x2AC0)
- {
- m_Charges = charges;
-
- m_Timer = Timer.DelayCall(RechargeTime, RechargeTime, Recharge);
- }
-
- public FountainOfLife(Serial serial)
- : base(serial)
- {
- }
-
- public override BaseAddonContainerDeed Deed => new FountainOfLifeDeed(m_Charges);
-
- public virtual TimeSpan RechargeTime => TimeSpan.FromDays(1);
-
- public override int LabelNumber => 1075197; // Fountain of Life
- public override int DefaultGumpID => 0x484;
- public override int DefaultDropSound => 66;
- public override int DefaultMaxItems => 125;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Charges
- {
- get => m_Charges;
- set
- {
- m_Charges = Math.Min(value, 10);
- InvalidateProperties();
- }
- }
-
- public override bool OnDragLift(Mobile from) => false;
-
- public override bool OnDragDrop(Mobile from, Item dropped)
- {
- if (dropped is Bandage)
- {
- bool allow = base.OnDragDrop(from, dropped);
-
- if (allow)
- Enhance(from);
-
- return allow;
- }
-
- from.SendLocalizedMessage(1075209); // Only bandages may be dropped into the fountain.
- return false;
- }
-
- public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
- {
- if (item is Bandage)
- {
- bool allow = base.OnDragDropInto(from, item, p);
-
- if (allow)
- Enhance(from);
-
- return allow;
- }
-
- from.SendLocalizedMessage(1075209); // Only bandages may be dropped into the fountain.
- return false;
- }
-
- public override void AddNameProperties(ObjectPropertyList list)
- {
- base.AddNameProperties(list);
-
- list.Add(1075217, m_Charges.ToString()); // ~1_val~ charges remaining
- }
-
- public override void OnDelete()
- {
- m_Timer?.Stop();
-
- base.OnDelete();
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.Write(m_Charges);
- writer.Write(m_Timer.Next);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- m_Charges = reader.ReadInt();
-
- DateTime next = reader.ReadDateTime();
-
- var now = DateTime.UtcNow;
-
- if (next < now)
- m_Timer = Timer.DelayCall(RechargeTime, Recharge);
- else
- m_Timer = Timer.DelayCall(next - now, RechargeTime, Recharge);
- }
-
- public void Recharge()
- {
- m_Charges = 10;
-
- Enhance(null);
- }
-
- public void Enhance(Mobile from)
- {
- for (int i = Items.Count - 1; i >= 0 && m_Charges > 0; --i)
- {
- if (Items[i] is EnhancedBandage)
- continue;
-
- if (Items[i] is Bandage bandage)
- {
- Item enhanced;
-
- if (bandage.Amount > m_Charges)
- {
- bandage.Amount -= m_Charges;
- enhanced = new EnhancedBandage(m_Charges);
- m_Charges = 0;
- }
- else
- {
- enhanced = new EnhancedBandage(bandage.Amount);
- m_Charges -= bandage.Amount;
- bandage.Delete();
- }
-
- if (from == null || !TryDropItem(from, enhanced, false)) // try stacking first
- DropItem(enhanced);
- }
- }
-
- InvalidateProperties();
- }
- }
-
- public class FountainOfLifeDeed : BaseAddonContainerDeed
- {
- private int m_Charges;
-
- [Constructible]
- public FountainOfLifeDeed(int charges = 10)
- {
- LootType = LootType.Blessed;
- m_Charges = charges;
- }
-
- public FountainOfLifeDeed(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1075197; // Fountain of Life
- public override BaseAddonContainer Addon => new FountainOfLife(m_Charges);
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Charges
- {
- get => m_Charges;
- set
- {
- m_Charges = Math.Min(value, 10);
- InvalidateProperties();
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.Write(m_Charges);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- m_Charges = reader.ReadInt();
- }
- }
-}
+using System;
+
+namespace Server.Items
+{
+ public class EnhancedBandage : Bandage
+ {
+ [Constructible]
+ public EnhancedBandage(int amount = 1)
+ : base(amount) =>
+ Hue = 0x8A5;
+
+ public EnhancedBandage(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public static int HealingBonus => 10;
+
+ public override int LabelNumber => 1152441; // enhanced bandage
+
+ public override bool Dye(Mobile from, DyeTub sender) => false;
+
+ public override void AddNameProperties(ObjectPropertyList list)
+ {
+ base.AddNameProperties(list);
+
+ list.Add(1075216); // these bandages have been enhanced
+ }
+
+ 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();
+ }
+ }
+
+ [Flippable(0x2AC0, 0x2AC3)]
+ public class FountainOfLife : BaseAddonContainer
+ {
+ private int m_Charges;
+
+ private Timer m_Timer;
+
+ [Constructible]
+ public FountainOfLife(int charges = 10)
+ : base(0x2AC0)
+ {
+ m_Charges = charges;
+
+ m_Timer = Timer.DelayCall(RechargeTime, RechargeTime, Recharge);
+ }
+
+ public FountainOfLife(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override BaseAddonContainerDeed Deed => new FountainOfLifeDeed(m_Charges);
+
+ public virtual TimeSpan RechargeTime => TimeSpan.FromDays(1);
+
+ public override int LabelNumber => 1075197; // Fountain of Life
+ public override int DefaultGumpID => 0x484;
+ public override int DefaultDropSound => 66;
+ public override int DefaultMaxItems => 125;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Charges
+ {
+ get => m_Charges;
+ set
+ {
+ m_Charges = Math.Min(value, 10);
+ InvalidateProperties();
+ }
+ }
+
+ public override bool OnDragLift(Mobile from) => false;
+
+ public override bool OnDragDrop(Mobile from, Item dropped)
+ {
+ if (dropped is Bandage)
+ {
+ bool allow = base.OnDragDrop(from, dropped);
+
+ if (allow)
+ Enhance(from);
+
+ return allow;
+ }
+
+ from.SendLocalizedMessage(1075209); // Only bandages may be dropped into the fountain.
+ return false;
+ }
+
+ public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
+ {
+ if (item is Bandage)
+ {
+ bool allow = base.OnDragDropInto(from, item, p);
+
+ if (allow)
+ Enhance(from);
+
+ return allow;
+ }
+
+ from.SendLocalizedMessage(1075209); // Only bandages may be dropped into the fountain.
+ return false;
+ }
+
+ public override void AddNameProperties(ObjectPropertyList list)
+ {
+ base.AddNameProperties(list);
+
+ list.Add(1075217, m_Charges.ToString()); // ~1_val~ charges remaining
+ }
+
+ public override void OnDelete()
+ {
+ m_Timer?.Stop();
+
+ base.OnDelete();
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.Write(m_Charges);
+ writer.Write(m_Timer.Next);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ m_Charges = reader.ReadInt();
+
+ DateTime next = reader.ReadDateTime();
+
+ var now = DateTime.UtcNow;
+
+ if (next < now)
+ m_Timer = Timer.DelayCall(RechargeTime, Recharge);
+ else
+ m_Timer = Timer.DelayCall(next - now, RechargeTime, Recharge);
+ }
+
+ public void Recharge()
+ {
+ m_Charges = 10;
+
+ Enhance(null);
+ }
+
+ public void Enhance(Mobile from)
+ {
+ for (int i = Items.Count - 1; i >= 0 && m_Charges > 0; --i)
+ {
+ if (Items[i] is EnhancedBandage)
+ continue;
+
+ if (Items[i] is Bandage bandage)
+ {
+ Item enhanced;
+
+ if (bandage.Amount > m_Charges)
+ {
+ bandage.Amount -= m_Charges;
+ enhanced = new EnhancedBandage(m_Charges);
+ m_Charges = 0;
+ }
+ else
+ {
+ enhanced = new EnhancedBandage(bandage.Amount);
+ m_Charges -= bandage.Amount;
+ bandage.Delete();
+ }
+
+ if (from == null || !TryDropItem(from, enhanced, false)) // try stacking first
+ DropItem(enhanced);
+ }
+ }
+
+ InvalidateProperties();
+ }
+ }
+
+ public class FountainOfLifeDeed : BaseAddonContainerDeed
+ {
+ private int m_Charges;
+
+ [Constructible]
+ public FountainOfLifeDeed(int charges = 10)
+ {
+ LootType = LootType.Blessed;
+ m_Charges = charges;
+ }
+
+ public FountainOfLifeDeed(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1075197; // Fountain of Life
+ public override BaseAddonContainer Addon => new FountainOfLife(m_Charges);
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Charges
+ {
+ get => m_Charges;
+ set
+ {
+ m_Charges = Math.Min(value, 10);
+ InvalidateProperties();
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.Write(m_Charges);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ m_Charges = reader.ReadInt();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/OssianGrimoire.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/OssianGrimoire.cs
index 1f12f8163..94269b1bf 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/OssianGrimoire.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/OssianGrimoire.cs
@@ -1,39 +1,39 @@
-namespace Server.Items
-{
- public class OssianGrimoire : NecromancerSpellbook, ITokunoDyable
- {
- [Constructible]
- public OssianGrimoire()
- {
- LootType = LootType.Blessed;
-
- SkillBonuses.SetValues(0, SkillName.Necromancy, 10.0);
- Attributes.RegenMana = 1;
- Attributes.CastSpeed = 1;
- Attributes.IncreasedKarmaLoss = 5;
- }
-
- public OssianGrimoire(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1078148; // Ossian Grimoire
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(1); // version
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- if (version == 0)
- Attributes.IncreasedKarmaLoss = 5;
- }
- }
+namespace Server.Items
+{
+ public class OssianGrimoire : NecromancerSpellbook, ITokunoDyable
+ {
+ [Constructible]
+ public OssianGrimoire()
+ {
+ LootType = LootType.Blessed;
+
+ SkillBonuses.SetValues(0, SkillName.Necromancy, 10.0);
+ Attributes.RegenMana = 1;
+ Attributes.CastSpeed = 1;
+ Attributes.IncreasedKarmaLoss = 5;
+ }
+
+ public OssianGrimoire(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1078148; // Ossian Grimoire
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(1); // version
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ if (version == 0)
+ Attributes.IncreasedKarmaLoss = 5;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/QuiverOfInfinity.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/QuiverOfInfinity.cs
index 07e8189c9..7d54a3cb5 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/QuiverOfInfinity.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/QuiverOfInfinity.cs
@@ -1,43 +1,43 @@
-namespace Server.Items
-{
- public class QuiverOfInfinity : BaseQuiver, ITokunoDyable
- {
- [Constructible]
- public QuiverOfInfinity() : base(0x2B02)
- {
- LootType = LootType.Blessed;
- Weight = 8.0;
-
- WeightReduction = 30;
- LowerAmmoCost = 20;
-
- Attributes.DefendChance = 5;
- }
-
- public QuiverOfInfinity(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1075201; // Quiver of Infinity
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(2); // version
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- if (version < 1 && DamageIncrease == 0)
- DamageIncrease = 10;
-
- if (version < 2 && Attributes.WeaponDamage == 10)
- Attributes.WeaponDamage = 0;
- }
- }
+namespace Server.Items
+{
+ public class QuiverOfInfinity : BaseQuiver, ITokunoDyable
+ {
+ [Constructible]
+ public QuiverOfInfinity() : base(0x2B02)
+ {
+ LootType = LootType.Blessed;
+ Weight = 8.0;
+
+ WeightReduction = 30;
+ LowerAmmoCost = 20;
+
+ Attributes.DefendChance = 5;
+ }
+
+ public QuiverOfInfinity(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1075201; // Quiver of Infinity
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(2); // version
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ if (version < 1 && DamageIncrease == 0)
+ DamageIncrease = 10;
+
+ if (version < 2 && Attributes.WeaponDamage == 10)
+ Attributes.WeaponDamage = 0;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/Talismans.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/Talismans.cs
index f43c85e52..86c25a90e 100644
--- a/Projects/UOContent/Items/Special/8th Anniversary Items/Talismans.cs
+++ b/Projects/UOContent/Items/Special/8th Anniversary Items/Talismans.cs
@@ -1,182 +1,182 @@
-using System;
-using Server.Mobiles;
-using Server.Spells.Ninjitsu;
-
-namespace Server.Items
-{
- public enum TalismanForm
- {
- Ferret = 1031672,
- Squirrel = 1031671,
- CuSidhe = 1031670,
- Reptalon = 1075202
- }
-
- public class BaseFormTalisman : Item, ITokunoDyable
- {
- public BaseFormTalisman() : base(0x2F59)
- {
- LootType = LootType.Blessed;
- Layer = Layer.Talisman;
- Weight = 1.0;
- }
-
- public BaseFormTalisman(Serial serial) : base(serial)
- {
- }
-
- public virtual TalismanForm Form => TalismanForm.Squirrel;
-
- public override void AddNameProperty(ObjectPropertyList list)
- {
- list.Add(1075200, $"#{(int)Form}");
- }
-
- 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();
- }
-
- public override void OnRemoved(IEntity parent)
- {
- base.OnRemoved(parent);
-
- if (parent is Mobile m) AnimalForm.RemoveContext(m, true);
- }
-
- public static bool EntryEnabled(Mobile m, Type type)
- {
- if (type == typeof(Squirrel))
- return m.Talisman is SquirrelFormTalisman;
- if (type == typeof(Ferret))
- return m.Talisman is FerretFormTalisman;
- if (type == typeof(CuSidhe))
- return m.Talisman is CuSidheFormTalisman;
- if (type == typeof(Reptalon))
- return m.Talisman is ReptalonFormTalisman;
-
- return true;
- }
- }
-
- public class FerretFormTalisman : BaseFormTalisman
- {
- [Constructible]
- public FerretFormTalisman()
- {
- }
-
- public FerretFormTalisman(Serial serial) : base(serial)
- {
- }
-
- public override TalismanForm Form => TalismanForm.Ferret;
-
- 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();
- }
- }
-
- public class SquirrelFormTalisman : BaseFormTalisman
- {
- [Constructible]
- public SquirrelFormTalisman()
- {
- }
-
- public SquirrelFormTalisman(Serial serial) : base(serial)
- {
- }
-
- public override TalismanForm Form => TalismanForm.Squirrel;
-
- 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();
- }
- }
-
- public class CuSidheFormTalisman : BaseFormTalisman
- {
- [Constructible]
- public CuSidheFormTalisman()
- {
- }
-
- public CuSidheFormTalisman(Serial serial) : base(serial)
- {
- }
-
- public override TalismanForm Form => TalismanForm.CuSidhe;
-
- 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();
- }
- }
-
- public class ReptalonFormTalisman : BaseFormTalisman
- {
- [Constructible]
- public ReptalonFormTalisman()
- {
- }
-
- public ReptalonFormTalisman(Serial serial) : base(serial)
- {
- }
-
- public override TalismanForm Form => TalismanForm.Reptalon;
-
- 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();
- }
- }
+using System;
+using Server.Mobiles;
+using Server.Spells.Ninjitsu;
+
+namespace Server.Items
+{
+ public enum TalismanForm
+ {
+ Ferret = 1031672,
+ Squirrel = 1031671,
+ CuSidhe = 1031670,
+ Reptalon = 1075202
+ }
+
+ public class BaseFormTalisman : Item, ITokunoDyable
+ {
+ public BaseFormTalisman() : base(0x2F59)
+ {
+ LootType = LootType.Blessed;
+ Layer = Layer.Talisman;
+ Weight = 1.0;
+ }
+
+ public BaseFormTalisman(Serial serial) : base(serial)
+ {
+ }
+
+ public virtual TalismanForm Form => TalismanForm.Squirrel;
+
+ public override void AddNameProperty(ObjectPropertyList list)
+ {
+ list.Add(1075200, $"#{(int)Form}");
+ }
+
+ 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();
+ }
+
+ public override void OnRemoved(IEntity parent)
+ {
+ base.OnRemoved(parent);
+
+ if (parent is Mobile m) AnimalForm.RemoveContext(m, true);
+ }
+
+ public static bool EntryEnabled(Mobile m, Type type)
+ {
+ if (type == typeof(Squirrel))
+ return m.Talisman is SquirrelFormTalisman;
+ if (type == typeof(Ferret))
+ return m.Talisman is FerretFormTalisman;
+ if (type == typeof(CuSidhe))
+ return m.Talisman is CuSidheFormTalisman;
+ if (type == typeof(Reptalon))
+ return m.Talisman is ReptalonFormTalisman;
+
+ return true;
+ }
+ }
+
+ public class FerretFormTalisman : BaseFormTalisman
+ {
+ [Constructible]
+ public FerretFormTalisman()
+ {
+ }
+
+ public FerretFormTalisman(Serial serial) : base(serial)
+ {
+ }
+
+ public override TalismanForm Form => TalismanForm.Ferret;
+
+ 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();
+ }
+ }
+
+ public class SquirrelFormTalisman : BaseFormTalisman
+ {
+ [Constructible]
+ public SquirrelFormTalisman()
+ {
+ }
+
+ public SquirrelFormTalisman(Serial serial) : base(serial)
+ {
+ }
+
+ public override TalismanForm Form => TalismanForm.Squirrel;
+
+ 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();
+ }
+ }
+
+ public class CuSidheFormTalisman : BaseFormTalisman
+ {
+ [Constructible]
+ public CuSidheFormTalisman()
+ {
+ }
+
+ public CuSidheFormTalisman(Serial serial) : base(serial)
+ {
+ }
+
+ public override TalismanForm Form => TalismanForm.CuSidhe;
+
+ 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();
+ }
+ }
+
+ public class ReptalonFormTalisman : BaseFormTalisman
+ {
+ [Constructible]
+ public ReptalonFormTalisman()
+ {
+ }
+
+ public ReptalonFormTalisman(Serial serial) : base(serial)
+ {
+ }
+
+ public override TalismanForm Form => TalismanForm.Reptalon;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/AoS Promotional/HoodedShroudOfShadows.cs b/Projects/UOContent/Items/Special/AoS Promotional/HoodedShroudOfShadows.cs
index 8b36a86a1..5dd1fae5f 100644
--- a/Projects/UOContent/Items/Special/AoS Promotional/HoodedShroudOfShadows.cs
+++ b/Projects/UOContent/Items/Special/AoS Promotional/HoodedShroudOfShadows.cs
@@ -1,37 +1,37 @@
-namespace Server.Items
-{
- [Flippable(0x2684, 0x2683)]
- public class HoodedShroudOfShadows : BaseOuterTorso
- {
- [Constructible]
- public HoodedShroudOfShadows(int hue = 0x455) : base(0x2684, hue)
- {
- LootType = LootType.Blessed;
- Weight = 3.0;
- }
-
- public HoodedShroudOfShadows(Serial serial) : base(serial)
- {
- }
-
- public override bool Dye(Mobile from, DyeTub sender)
- {
- from.SendLocalizedMessage(sender.FailMessage);
- return false;
- }
-
- 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
+{
+ [Flippable(0x2684, 0x2683)]
+ public class HoodedShroudOfShadows : BaseOuterTorso
+ {
+ [Constructible]
+ public HoodedShroudOfShadows(int hue = 0x455) : base(0x2684, hue)
+ {
+ LootType = LootType.Blessed;
+ Weight = 3.0;
+ }
+
+ public HoodedShroudOfShadows(Serial serial) : base(serial)
+ {
+ }
+
+ public override bool Dye(Mobile from, DyeTub sender)
+ {
+ from.SendLocalizedMessage(sender.FailMessage);
+ return false;
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/AoS Promotional/LuckyNecklace.cs b/Projects/UOContent/Items/Special/AoS Promotional/LuckyNecklace.cs
index 71b4086d6..253bfe1c6 100644
--- a/Projects/UOContent/Items/Special/AoS Promotional/LuckyNecklace.cs
+++ b/Projects/UOContent/Items/Special/AoS Promotional/LuckyNecklace.cs
@@ -1,34 +1,34 @@
-namespace Server.Items
-{
- public class LuckyNecklace : BaseJewel
- {
- [Constructible]
- public LuckyNecklace()
- : base(0x1088, Layer.Neck)
- {
- Attributes.Luck = 200;
- LootType = LootType.Blessed;
- }
-
- public LuckyNecklace(Serial serial) : base(serial)
- {
- }
-
- public override int Hue => 1150;
- public override int LabelNumber => 1075239; // Lucky Necklace 1075239
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- reader.ReadInt(); /* int version = reader.ReadInt(); Why? Just to have an unused var? */
- }
- }
+namespace Server.Items
+{
+ public class LuckyNecklace : BaseJewel
+ {
+ [Constructible]
+ public LuckyNecklace()
+ : base(0x1088, Layer.Neck)
+ {
+ Attributes.Luck = 200;
+ LootType = LootType.Blessed;
+ }
+
+ public LuckyNecklace(Serial serial) : base(serial)
+ {
+ }
+
+ public override int Hue => 1150;
+ public override int LabelNumber => 1075239; // Lucky Necklace 1075239
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ reader.ReadInt(); /* int version = reader.ReadInt(); Why? Just to have an unused var? */
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenArmoire.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenArmoire.cs
index b7ebc1af0..0bff7fe56 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenArmoire.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenArmoire.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0xC12, 0xC13)]
- public class BrokenArmoireComponent : AddonComponent
- {
- public BrokenArmoireComponent() : base(0xC12)
- {
- }
-
- public BrokenArmoireComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076262; // Broken Armoire
-
- 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();
- }
- }
-
- public class BrokenArmoireAddon : BaseAddon
- {
- [Constructible]
- public BrokenArmoireAddon()
- {
- AddComponent(new BrokenArmoireComponent(), 0, 0, 0);
- }
-
- public BrokenArmoireAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenArmoireDeed();
-
- 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();
- }
- }
-
- public class BrokenArmoireDeed : BaseAddonDeed
- {
- [Constructible]
- public BrokenArmoireDeed() => LootType = LootType.Blessed;
-
- public BrokenArmoireDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenArmoireAddon();
- public override int LabelNumber => 1076262; // Broken Armoire
-
- 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(0xC12, 0xC13)]
+ public class BrokenArmoireComponent : AddonComponent
+ {
+ public BrokenArmoireComponent() : base(0xC12)
+ {
+ }
+
+ public BrokenArmoireComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076262; // Broken Armoire
+
+ 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();
+ }
+ }
+
+ public class BrokenArmoireAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenArmoireAddon()
+ {
+ AddComponent(new BrokenArmoireComponent(), 0, 0, 0);
+ }
+
+ public BrokenArmoireAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenArmoireDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenArmoireDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BrokenArmoireDeed() => LootType = LootType.Blessed;
+
+ public BrokenArmoireDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenArmoireAddon();
+ public override int LabelNumber => 1076262; // Broken Armoire
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBed.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBed.cs
index 59b7049dd..7742776be 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBed.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBed.cs
@@ -1,131 +1,131 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class BrokenBedAddon : BaseAddon
- {
- [Constructible]
- public BrokenBedAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new LocalizedAddonComponent(0x1895, 1076263), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x1894, 1076263), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0x1897, 1076263), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x1896, 1076263), 1, 1, 0);
- }
- else // south
- {
- AddComponent(new LocalizedAddonComponent(0x1899, 1076263), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x1898, 1076263), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x189B, 1076263), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0x189A, 1076263), 1, 1, 0);
- }
- }
-
- public BrokenBedAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenBedDeed();
-
- 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();
- }
- }
-
- public class BrokenBedDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public BrokenBedDeed() => LootType = LootType.Blessed;
-
- public BrokenBedDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenBedAddon(m_East);
- public override int LabelNumber => 1076263; // Broken Bed
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly BrokenBedDeed m_Deed;
-
- public InternalGump(BrokenBedDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076749, 0x7FFF); // Please select your broken bed position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class BrokenBedAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenBedAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new LocalizedAddonComponent(0x1895, 1076263), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x1894, 1076263), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0x1897, 1076263), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x1896, 1076263), 1, 1, 0);
+ }
+ else // south
+ {
+ AddComponent(new LocalizedAddonComponent(0x1899, 1076263), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x1898, 1076263), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x189B, 1076263), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0x189A, 1076263), 1, 1, 0);
+ }
+ }
+
+ public BrokenBedAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenBedDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenBedDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public BrokenBedDeed() => LootType = LootType.Blessed;
+
+ public BrokenBedDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenBedAddon(m_East);
+ public override int LabelNumber => 1076263; // Broken Bed
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly BrokenBedDeed m_Deed;
+
+ public InternalGump(BrokenBedDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076749, 0x7FFF); // Please select your broken bed position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBookcase.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBookcase.cs
index b60d8c4f5..34d970a1a 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBookcase.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenBookcase.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0xC14, 0xC15)]
- public class BrokenBookcaseComponent : AddonComponent
- {
- public BrokenBookcaseComponent() : base(0xC14)
- {
- }
-
- public BrokenBookcaseComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076258; // Broken Bookcase
-
- 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();
- }
- }
-
- public class BrokenBookcaseAddon : BaseAddon
- {
- [Constructible]
- public BrokenBookcaseAddon()
- {
- AddComponent(new BrokenBookcaseComponent(), 0, 0, 0);
- }
-
- public BrokenBookcaseAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenBookcaseDeed();
-
- 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();
- }
- }
-
- public class BrokenBookcaseDeed : BaseAddonDeed
- {
- [Constructible]
- public BrokenBookcaseDeed() => LootType = LootType.Blessed;
-
- public BrokenBookcaseDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenBookcaseAddon();
- public override int LabelNumber => 1076258; // Broken Bookcase
-
- 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(0xC14, 0xC15)]
+ public class BrokenBookcaseComponent : AddonComponent
+ {
+ public BrokenBookcaseComponent() : base(0xC14)
+ {
+ }
+
+ public BrokenBookcaseComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076258; // Broken Bookcase
+
+ 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();
+ }
+ }
+
+ public class BrokenBookcaseAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenBookcaseAddon()
+ {
+ AddComponent(new BrokenBookcaseComponent(), 0, 0, 0);
+ }
+
+ public BrokenBookcaseAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenBookcaseDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenBookcaseDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BrokenBookcaseDeed() => LootType = LootType.Blessed;
+
+ public BrokenBookcaseDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenBookcaseAddon();
+ public override int LabelNumber => 1076258; // Broken Bookcase
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenChestOfDrawers.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenChestOfDrawers.cs
index 92230a293..51a08b47b 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenChestOfDrawers.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenChestOfDrawers.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0xC24, 0xC25)]
- public class BrokenChestOfDrawersComponent : AddonComponent
- {
- public BrokenChestOfDrawersComponent() : base(0xC24)
- {
- }
-
- public BrokenChestOfDrawersComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076261; // Broken Chest of Drawers
-
- 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();
- }
- }
-
- public class BrokenChestOfDrawersAddon : BaseAddon
- {
- [Constructible]
- public BrokenChestOfDrawersAddon()
- {
- AddComponent(new BrokenChestOfDrawersComponent(), 0, 0, 0);
- }
-
- public BrokenChestOfDrawersAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenChestOfDrawersDeed();
-
- 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();
- }
- }
-
- public class BrokenChestOfDrawersDeed : BaseAddonDeed
- {
- [Constructible]
- public BrokenChestOfDrawersDeed() => LootType = LootType.Blessed;
-
- public BrokenChestOfDrawersDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenChestOfDrawersAddon();
- public override int LabelNumber => 1076261; // Broken Chest of Drawers
-
- 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(0xC24, 0xC25)]
+ public class BrokenChestOfDrawersComponent : AddonComponent
+ {
+ public BrokenChestOfDrawersComponent() : base(0xC24)
+ {
+ }
+
+ public BrokenChestOfDrawersComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076261; // Broken Chest of Drawers
+
+ 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();
+ }
+ }
+
+ public class BrokenChestOfDrawersAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenChestOfDrawersAddon()
+ {
+ AddComponent(new BrokenChestOfDrawersComponent(), 0, 0, 0);
+ }
+
+ public BrokenChestOfDrawersAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenChestOfDrawersDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenChestOfDrawersDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BrokenChestOfDrawersDeed() => LootType = LootType.Blessed;
+
+ public BrokenChestOfDrawersDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenChestOfDrawersAddon();
+ public override int LabelNumber => 1076261; // Broken Chest of Drawers
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenCoveredChair.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenCoveredChair.cs
index 9ff1ce5dd..67466d6d6 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenCoveredChair.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenCoveredChair.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0xC17, 0xC18)]
- public class BrokenCoveredChairComponent : AddonComponent
- {
- public BrokenCoveredChairComponent() : base(0xC17)
- {
- }
-
- public BrokenCoveredChairComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076257; // Broken Covered Chair
-
- 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();
- }
- }
-
- public class BrokenCoveredChairAddon : BaseAddon
- {
- [Constructible]
- public BrokenCoveredChairAddon()
- {
- AddComponent(new BrokenCoveredChairComponent(), 0, 0, 0);
- }
-
- public BrokenCoveredChairAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenCoveredChairDeed();
-
- 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();
- }
- }
-
- public class BrokenCoveredChairDeed : BaseAddonDeed
- {
- [Constructible]
- public BrokenCoveredChairDeed() => LootType = LootType.Blessed;
-
- public BrokenCoveredChairDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenCoveredChairAddon();
- public override int LabelNumber => 1076257; // Broken Covered Chair
-
- 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(0xC17, 0xC18)]
+ public class BrokenCoveredChairComponent : AddonComponent
+ {
+ public BrokenCoveredChairComponent() : base(0xC17)
+ {
+ }
+
+ public BrokenCoveredChairComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076257; // Broken Covered Chair
+
+ 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();
+ }
+ }
+
+ public class BrokenCoveredChairAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenCoveredChairAddon()
+ {
+ AddComponent(new BrokenCoveredChairComponent(), 0, 0, 0);
+ }
+
+ public BrokenCoveredChairAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenCoveredChairDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenCoveredChairDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BrokenCoveredChairDeed() => LootType = LootType.Blessed;
+
+ public BrokenCoveredChairDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenCoveredChairAddon();
+ public override int LabelNumber => 1076257; // Broken Covered Chair
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenFallenChair.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenFallenChair.cs
index d7c67e758..33fcaa0c2 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenFallenChair.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenFallenChair.cs
@@ -1,89 +1,89 @@
-namespace Server.Items
-{
- [Flippable(0xC19, 0xC1A)]
- public class BrokenFallenChairComponent : AddonComponent
- {
- public BrokenFallenChairComponent() : base(0xC19)
- {
- }
-
- public BrokenFallenChairComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076264; // Broken Fallen Chair
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(1); // version
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- if (version < 1 && ItemID == 0xC17)
- ItemID = 0xC19;
- }
- }
-
- public class BrokenFallenChairAddon : BaseAddon
- {
- [Constructible]
- public BrokenFallenChairAddon()
- {
- AddComponent(new BrokenFallenChairComponent(), 0, 0, 0);
- }
-
- public BrokenFallenChairAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenFallenChairDeed();
-
- 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();
- }
- }
-
- public class BrokenFallenChairDeed : BaseAddonDeed
- {
- [Constructible]
- public BrokenFallenChairDeed() => LootType = LootType.Blessed;
-
- public BrokenFallenChairDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenFallenChairAddon();
- public override int LabelNumber => 1076264; // Broken Fallen Chair
-
- 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(0xC19, 0xC1A)]
+ public class BrokenFallenChairComponent : AddonComponent
+ {
+ public BrokenFallenChairComponent() : base(0xC19)
+ {
+ }
+
+ public BrokenFallenChairComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076264; // Broken Fallen Chair
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(1); // version
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ if (version < 1 && ItemID == 0xC17)
+ ItemID = 0xC19;
+ }
+ }
+
+ public class BrokenFallenChairAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenFallenChairAddon()
+ {
+ AddComponent(new BrokenFallenChairComponent(), 0, 0, 0);
+ }
+
+ public BrokenFallenChairAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenFallenChairDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenFallenChairDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BrokenFallenChairDeed() => LootType = LootType.Blessed;
+
+ public BrokenFallenChairDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenFallenChairAddon();
+ public override int LabelNumber => 1076264; // Broken Fallen Chair
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenVanity.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenVanity.cs
index 4a165d653..f90c3de05 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenVanity.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/BrokenVanity.cs
@@ -1,127 +1,127 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class BrokenVanityAddon : BaseAddon
- {
- [Constructible]
- public BrokenVanityAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new LocalizedAddonComponent(0xC20, 1076260), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xC21, 1076260), 0, -1, 0);
- }
- else // south
- {
- AddComponent(new LocalizedAddonComponent(0xC22, 1076260), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xC23, 1076260), -1, 0, 0);
- }
- }
-
- public BrokenVanityAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BrokenVanityDeed();
-
- 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();
- }
- }
-
- public class BrokenVanityDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public BrokenVanityDeed() => LootType = LootType.Blessed;
-
- public BrokenVanityDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BrokenVanityAddon(m_East);
- public override int LabelNumber => 1076260; // Broken Vanity
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly BrokenVanityDeed m_Deed;
-
- public InternalGump(BrokenVanityDeed deed) : base(60, 63)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076747, 0x7FFF); // Please select your broken vanity position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class BrokenVanityAddon : BaseAddon
+ {
+ [Constructible]
+ public BrokenVanityAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new LocalizedAddonComponent(0xC20, 1076260), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xC21, 1076260), 0, -1, 0);
+ }
+ else // south
+ {
+ AddComponent(new LocalizedAddonComponent(0xC22, 1076260), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xC23, 1076260), -1, 0, 0);
+ }
+ }
+
+ public BrokenVanityAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BrokenVanityDeed();
+
+ 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();
+ }
+ }
+
+ public class BrokenVanityDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public BrokenVanityDeed() => LootType = LootType.Blessed;
+
+ public BrokenVanityDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BrokenVanityAddon(m_East);
+ public override int LabelNumber => 1076260; // Broken Vanity
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly BrokenVanityDeed m_Deed;
+
+ public InternalGump(BrokenVanityDeed deed) : base(60, 63)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076747, 0x7FFF); // Please select your broken vanity position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Broken Furniture Collection/StandingBrokenChair.cs b/Projects/UOContent/Items/Special/Broken Furniture Collection/StandingBrokenChair.cs
index fc11bb5ac..ffb257716 100644
--- a/Projects/UOContent/Items/Special/Broken Furniture Collection/StandingBrokenChair.cs
+++ b/Projects/UOContent/Items/Special/Broken Furniture Collection/StandingBrokenChair.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0xC1B, 0xC1C, 0xC1E, 0xC1D)]
- public class StandingBrokenChairComponent : AddonComponent
- {
- public StandingBrokenChairComponent() : base(0xC1B)
- {
- }
-
- public StandingBrokenChairComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076259; // Standing Broken Chair
-
- 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();
- }
- }
-
- public class StandingBrokenChairAddon : BaseAddon
- {
- [Constructible]
- public StandingBrokenChairAddon()
- {
- AddComponent(new StandingBrokenChairComponent(), 0, 0, 0);
- }
-
- public StandingBrokenChairAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new StandingBrokenChairDeed();
-
- 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();
- }
- }
-
- public class StandingBrokenChairDeed : BaseAddonDeed
- {
- [Constructible]
- public StandingBrokenChairDeed() => LootType = LootType.Blessed;
-
- public StandingBrokenChairDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new StandingBrokenChairAddon();
- public override int LabelNumber => 1076259; // Standing Broken Chair
-
- 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(0xC1B, 0xC1C, 0xC1E, 0xC1D)]
+ public class StandingBrokenChairComponent : AddonComponent
+ {
+ public StandingBrokenChairComponent() : base(0xC1B)
+ {
+ }
+
+ public StandingBrokenChairComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076259; // Standing Broken Chair
+
+ 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();
+ }
+ }
+
+ public class StandingBrokenChairAddon : BaseAddon
+ {
+ [Constructible]
+ public StandingBrokenChairAddon()
+ {
+ AddComponent(new StandingBrokenChairComponent(), 0, 0, 0);
+ }
+
+ public StandingBrokenChairAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new StandingBrokenChairDeed();
+
+ 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();
+ }
+ }
+
+ public class StandingBrokenChairDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public StandingBrokenChairDeed() => LootType = LootType.Blessed;
+
+ public StandingBrokenChairDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new StandingBrokenChairAddon();
+ public override int LabelNumber => 1076259; // Standing Broken Chair
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs
index 920db89c4..e573706eb 100644
--- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs
+++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs
@@ -1,120 +1,120 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Flippable(0x13E4, 0x13E3)]
- public class AncientSmithyHammer : BaseTool
- {
- private int m_Bonus;
- private SkillMod m_SkillMod;
-
- [Constructible]
- public AncientSmithyHammer(int bonus, int uses = 600) : base(uses, 0x13E4)
- {
- m_Bonus = bonus;
- Weight = 8.0;
- Layer = Layer.OneHanded;
- Hue = 0x482;
- }
-
- public AncientSmithyHammer(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Bonus
- {
- get => m_Bonus;
- set
- {
- m_Bonus = value;
- InvalidateProperties();
-
- if (m_Bonus == 0)
- {
- m_SkillMod?.Remove();
-
- m_SkillMod = null;
- }
- else if (m_SkillMod == null && Parent is Mobile mobile)
- {
- m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
- mobile.AddSkillMod(m_SkillMod);
- }
- else if (m_SkillMod != null)
- {
- m_SkillMod.Value = m_Bonus;
- }
- }
- }
-
- public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
- public override int LabelNumber => 1045127; // ancient smithy hammer
-
- public override void OnAdded(IEntity parent)
- {
- base.OnAdded(parent);
-
- if (m_Bonus != 0 && parent is Mobile mobile)
- {
- m_SkillMod?.Remove();
-
- m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
- mobile.AddSkillMod(m_SkillMod);
- }
- }
-
- public override void OnRemoved(IEntity parent)
- {
- base.OnRemoved(parent);
-
- m_SkillMod?.Remove();
-
- m_SkillMod = null;
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_Bonus != 0)
- list.Add(1060451, "#1042354\t{0}", m_Bonus.ToString()); // ~1_skillname~ +~2_val~
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_Bonus);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Bonus = reader.ReadInt();
- break;
- }
- }
-
- if (m_Bonus != 0 && Parent is Mobile mobile)
- {
- m_SkillMod?.Remove();
-
- m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
- mobile.AddSkillMod(m_SkillMod);
- }
-
- if (Hue == 0)
- Hue = 0x482;
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Flippable(0x13E4, 0x13E3)]
+ public class AncientSmithyHammer : BaseTool
+ {
+ private int m_Bonus;
+ private SkillMod m_SkillMod;
+
+ [Constructible]
+ public AncientSmithyHammer(int bonus, int uses = 600) : base(uses, 0x13E4)
+ {
+ m_Bonus = bonus;
+ Weight = 8.0;
+ Layer = Layer.OneHanded;
+ Hue = 0x482;
+ }
+
+ public AncientSmithyHammer(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Bonus
+ {
+ get => m_Bonus;
+ set
+ {
+ m_Bonus = value;
+ InvalidateProperties();
+
+ if (m_Bonus == 0)
+ {
+ m_SkillMod?.Remove();
+
+ m_SkillMod = null;
+ }
+ else if (m_SkillMod == null && Parent is Mobile mobile)
+ {
+ m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
+ mobile.AddSkillMod(m_SkillMod);
+ }
+ else if (m_SkillMod != null)
+ {
+ m_SkillMod.Value = m_Bonus;
+ }
+ }
+ }
+
+ public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
+ public override int LabelNumber => 1045127; // ancient smithy hammer
+
+ public override void OnAdded(IEntity parent)
+ {
+ base.OnAdded(parent);
+
+ if (m_Bonus != 0 && parent is Mobile mobile)
+ {
+ m_SkillMod?.Remove();
+
+ m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
+ mobile.AddSkillMod(m_SkillMod);
+ }
+ }
+
+ public override void OnRemoved(IEntity parent)
+ {
+ base.OnRemoved(parent);
+
+ m_SkillMod?.Remove();
+
+ m_SkillMod = null;
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_Bonus != 0)
+ list.Add(1060451, "#1042354\t{0}", m_Bonus.ToString()); // ~1_skillname~ +~2_val~
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_Bonus);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Bonus = reader.ReadInt();
+ break;
+ }
+ }
+
+ if (m_Bonus != 0 && Parent is Mobile mobile)
+ {
+ m_SkillMod?.Remove();
+
+ m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
+ mobile.AddSkillMod(m_SkillMod);
+ }
+
+ if (Hue == 0)
+ Hue = 0x482;
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs
index 7a80b26d9..4ba405cf9 100644
--- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs
+++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs
@@ -1,38 +1,38 @@
-using Server.Engines.Craft;
-
-namespace Server.Items
-{
- [Anvil]
- [Flippable(0xFAF, 0xFB0)]
- public class ColoredAnvil : Item
- {
- [Constructible]
- public ColoredAnvil() : this(CraftResources.GetHue(
- (CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite)))
- {
- }
-
- [Constructible]
- public ColoredAnvil(int hue) : base(0xFAF)
- {
- Hue = hue;
- Weight = 20;
- }
-
- public ColoredAnvil(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();
- }
- }
+using Server.Engines.Craft;
+
+namespace Server.Items
+{
+ [Anvil]
+ [Flippable(0xFAF, 0xFB0)]
+ public class ColoredAnvil : Item
+ {
+ [Constructible]
+ public ColoredAnvil() : this(CraftResources.GetHue(
+ (CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite)))
+ {
+ }
+
+ [Constructible]
+ public ColoredAnvil(int hue) : base(0xFAF)
+ {
+ Hue = hue;
+ Weight = 20;
+ }
+
+ public ColoredAnvil(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs
index 279c55e87..81d52455b 100644
--- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs
+++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs
@@ -1,239 +1,239 @@
-namespace Server.Items
-{
- [Flippable(0x13c6, 0x13ce)]
- public class LeatherGlovesOfMining : BaseGlovesOfMining
- {
- [Constructible]
- public LeatherGlovesOfMining(int bonus) : base(bonus, 0x13C6) => Weight = 1;
-
- public LeatherGlovesOfMining(Serial serial) : base(serial)
- {
- }
-
- public override int BasePhysicalResistance => 2;
- public override int BaseFireResistance => 4;
- public override int BaseColdResistance => 3;
- public override int BasePoisonResistance => 3;
- public override int BaseEnergyResistance => 3;
-
- public override int InitMinHits => 30;
- public override int InitMaxHits => 40;
-
- public override int AosStrReq => 20;
- public override int OldStrReq => 10;
-
- public override int ArmorBase => 13;
-
- public override ArmorMaterialType MaterialType => ArmorMaterialType.Leather;
- public override CraftResource DefaultResource => CraftResource.RegularLeather;
-
- public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
-
- public override int LabelNumber => 1045122; // leather blacksmith gloves of mining
-
- 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();
- }
- }
-
- [Flippable(0x13d5, 0x13dd)]
- public class StuddedGlovesOfMining : BaseGlovesOfMining
- {
- [Constructible]
- public StuddedGlovesOfMining(int bonus) : base(bonus, 0x13D5) => Weight = 2;
-
- public StuddedGlovesOfMining(Serial serial) : base(serial)
- {
- }
-
- public override int BasePhysicalResistance => 2;
- public override int BaseFireResistance => 4;
- public override int BaseColdResistance => 3;
- public override int BasePoisonResistance => 3;
- public override int BaseEnergyResistance => 4;
-
- public override int InitMinHits => 35;
- public override int InitMaxHits => 45;
-
- public override int AosStrReq => 25;
- public override int OldStrReq => 25;
-
- public override int ArmorBase => 16;
-
- public override ArmorMaterialType MaterialType => ArmorMaterialType.Studded;
- public override CraftResource DefaultResource => CraftResource.RegularLeather;
-
- public override int LabelNumber => 1045123; // studded leather blacksmith gloves of mining
-
- 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();
- }
- }
-
- [Flippable(0x13eb, 0x13f2)]
- public class RingmailGlovesOfMining : BaseGlovesOfMining
- {
- [Constructible]
- public RingmailGlovesOfMining(int bonus) : base(bonus, 0x13EB) => Weight = 1;
-
- public RingmailGlovesOfMining(Serial serial) : base(serial)
- {
- }
-
- public override int BasePhysicalResistance => 3;
- public override int BaseFireResistance => 3;
- public override int BaseColdResistance => 1;
- public override int BasePoisonResistance => 5;
- public override int BaseEnergyResistance => 3;
-
- public override int InitMinHits => 40;
- public override int InitMaxHits => 50;
-
- public override int AosStrReq => 40;
- public override int OldStrReq => 20;
-
- public override int OldDexBonus => -1;
-
- public override int ArmorBase => 22;
-
- public override ArmorMaterialType MaterialType => ArmorMaterialType.Ringmail;
-
- public override int LabelNumber => 1045124; // ringmail blacksmith gloves of mining
-
- 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 abstract class BaseGlovesOfMining : BaseArmor
- {
- private int m_Bonus;
- private SkillMod m_SkillMod;
-
- public BaseGlovesOfMining(int bonus, int itemID) : base(itemID)
- {
- m_Bonus = bonus;
-
- Hue = CraftResources.GetHue(
- (CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite));
- }
-
- public BaseGlovesOfMining(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Bonus
- {
- get => m_Bonus;
- set
- {
- m_Bonus = value;
- InvalidateProperties();
-
- if (m_Bonus == 0)
- {
- m_SkillMod?.Remove();
-
- m_SkillMod = null;
- }
- else if (m_SkillMod == null && Parent is Mobile mobile)
- {
- m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
- mobile.AddSkillMod(m_SkillMod);
- }
- else if (m_SkillMod != null)
- {
- m_SkillMod.Value = m_Bonus;
- }
- }
- }
-
- public override void OnAdded(IEntity parent)
- {
- base.OnAdded(parent);
-
- if (m_Bonus != 0 && parent is Mobile mobile)
- {
- m_SkillMod?.Remove();
-
- m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
- mobile.AddSkillMod(m_SkillMod);
- }
- }
-
- public override void OnRemoved(IEntity parent)
- {
- base.OnRemoved(parent);
-
- m_SkillMod?.Remove();
-
- m_SkillMod = null;
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- if (m_Bonus != 0)
- list.Add(1062005, m_Bonus.ToString()); // mining bonus +~1_val~
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_Bonus);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Bonus = reader.ReadInt();
- break;
- }
- }
-
- if (m_Bonus != 0 && Parent is Mobile mobile)
- {
- m_SkillMod?.Remove();
-
- m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
- mobile.AddSkillMod(m_SkillMod);
- }
- }
- }
+namespace Server.Items
+{
+ [Flippable(0x13c6, 0x13ce)]
+ public class LeatherGlovesOfMining : BaseGlovesOfMining
+ {
+ [Constructible]
+ public LeatherGlovesOfMining(int bonus) : base(bonus, 0x13C6) => Weight = 1;
+
+ public LeatherGlovesOfMining(Serial serial) : base(serial)
+ {
+ }
+
+ public override int BasePhysicalResistance => 2;
+ public override int BaseFireResistance => 4;
+ public override int BaseColdResistance => 3;
+ public override int BasePoisonResistance => 3;
+ public override int BaseEnergyResistance => 3;
+
+ public override int InitMinHits => 30;
+ public override int InitMaxHits => 40;
+
+ public override int AosStrReq => 20;
+ public override int OldStrReq => 10;
+
+ public override int ArmorBase => 13;
+
+ public override ArmorMaterialType MaterialType => ArmorMaterialType.Leather;
+ public override CraftResource DefaultResource => CraftResource.RegularLeather;
+
+ public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
+
+ public override int LabelNumber => 1045122; // leather blacksmith gloves of mining
+
+ 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();
+ }
+ }
+
+ [Flippable(0x13d5, 0x13dd)]
+ public class StuddedGlovesOfMining : BaseGlovesOfMining
+ {
+ [Constructible]
+ public StuddedGlovesOfMining(int bonus) : base(bonus, 0x13D5) => Weight = 2;
+
+ public StuddedGlovesOfMining(Serial serial) : base(serial)
+ {
+ }
+
+ public override int BasePhysicalResistance => 2;
+ public override int BaseFireResistance => 4;
+ public override int BaseColdResistance => 3;
+ public override int BasePoisonResistance => 3;
+ public override int BaseEnergyResistance => 4;
+
+ public override int InitMinHits => 35;
+ public override int InitMaxHits => 45;
+
+ public override int AosStrReq => 25;
+ public override int OldStrReq => 25;
+
+ public override int ArmorBase => 16;
+
+ public override ArmorMaterialType MaterialType => ArmorMaterialType.Studded;
+ public override CraftResource DefaultResource => CraftResource.RegularLeather;
+
+ public override int LabelNumber => 1045123; // studded leather blacksmith gloves of mining
+
+ 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();
+ }
+ }
+
+ [Flippable(0x13eb, 0x13f2)]
+ public class RingmailGlovesOfMining : BaseGlovesOfMining
+ {
+ [Constructible]
+ public RingmailGlovesOfMining(int bonus) : base(bonus, 0x13EB) => Weight = 1;
+
+ public RingmailGlovesOfMining(Serial serial) : base(serial)
+ {
+ }
+
+ public override int BasePhysicalResistance => 3;
+ public override int BaseFireResistance => 3;
+ public override int BaseColdResistance => 1;
+ public override int BasePoisonResistance => 5;
+ public override int BaseEnergyResistance => 3;
+
+ public override int InitMinHits => 40;
+ public override int InitMaxHits => 50;
+
+ public override int AosStrReq => 40;
+ public override int OldStrReq => 20;
+
+ public override int OldDexBonus => -1;
+
+ public override int ArmorBase => 22;
+
+ public override ArmorMaterialType MaterialType => ArmorMaterialType.Ringmail;
+
+ public override int LabelNumber => 1045124; // ringmail blacksmith gloves of mining
+
+ 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 abstract class BaseGlovesOfMining : BaseArmor
+ {
+ private int m_Bonus;
+ private SkillMod m_SkillMod;
+
+ public BaseGlovesOfMining(int bonus, int itemID) : base(itemID)
+ {
+ m_Bonus = bonus;
+
+ Hue = CraftResources.GetHue(
+ (CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite));
+ }
+
+ public BaseGlovesOfMining(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Bonus
+ {
+ get => m_Bonus;
+ set
+ {
+ m_Bonus = value;
+ InvalidateProperties();
+
+ if (m_Bonus == 0)
+ {
+ m_SkillMod?.Remove();
+
+ m_SkillMod = null;
+ }
+ else if (m_SkillMod == null && Parent is Mobile mobile)
+ {
+ m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
+ mobile.AddSkillMod(m_SkillMod);
+ }
+ else if (m_SkillMod != null)
+ {
+ m_SkillMod.Value = m_Bonus;
+ }
+ }
+ }
+
+ public override void OnAdded(IEntity parent)
+ {
+ base.OnAdded(parent);
+
+ if (m_Bonus != 0 && parent is Mobile mobile)
+ {
+ m_SkillMod?.Remove();
+
+ m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
+ mobile.AddSkillMod(m_SkillMod);
+ }
+ }
+
+ public override void OnRemoved(IEntity parent)
+ {
+ base.OnRemoved(parent);
+
+ m_SkillMod?.Remove();
+
+ m_SkillMod = null;
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ if (m_Bonus != 0)
+ list.Add(1062005, m_Bonus.ToString()); // mining bonus +~1_val~
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_Bonus);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Bonus = reader.ReadInt();
+ break;
+ }
+ }
+
+ if (m_Bonus != 0 && Parent is Mobile mobile)
+ {
+ m_SkillMod?.Remove();
+
+ m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
+ mobile.AddSkillMod(m_SkillMod);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs
index df90d976f..c84833380 100644
--- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs
+++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs
@@ -1,184 +1,184 @@
-using Server.Network;
-using Server.Targeting;
-
-namespace Server.Items
-{
- public class PowderOfTemperament : Item, IUsesRemaining
- {
- private int m_UsesRemaining;
-
- [Constructible]
- public PowderOfTemperament(int charges = 10) : base(4102)
- {
- Weight = 1.0;
- Hue = 2419;
- UsesRemaining = charges;
- }
-
- public PowderOfTemperament(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1049082; // powder of fortifying
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int UsesRemaining
- {
- get => m_UsesRemaining;
- set
- {
- m_UsesRemaining = value;
- InvalidateProperties();
- }
- }
-
- bool IUsesRemaining.ShowUsesRemaining
- {
- get => true;
- set { }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0);
- writer.Write(m_UsesRemaining);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_UsesRemaining = reader.ReadInt();
- break;
- }
- }
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
- }
-
- public virtual void DisplayDurabilityTo(Mobile m)
- {
- LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability
- }
-
- public override void OnSingleClick(Mobile from)
- {
- DisplayDurabilityTo(from);
-
- base.OnSingleClick(from);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- from.Target = new InternalTarget(this);
- else
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
-
- private class InternalTarget : Target
- {
- private readonly PowderOfTemperament m_Powder;
-
- public InternalTarget(PowderOfTemperament powder) : base(2, false, TargetFlags.None) => m_Powder = powder;
-
- protected override void OnTarget(Mobile from, object targeted)
- {
- if (m_Powder?.Deleted != false || m_Powder.UsesRemaining <= 0)
- {
- from.SendLocalizedMessage(1049086); // You have used up your powder of temperament.
- return;
- }
-
- if (targeted is Item item && item is IDurability wearable)
- {
- if (!wearable.CanFortify)
- {
- from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
- return;
- }
-
- if ((item.IsChildOf(from.Backpack) || (Core.ML && item.Parent == from)) &&
- m_Powder.IsChildOf(from.Backpack))
- {
- int origMaxHP = wearable.MaxHitPoints;
- int origCurHP = wearable.HitPoints;
-
- if (origMaxHP > 0)
- {
- int initMaxHP = Core.AOS ? 255 : wearable.InitMaxHits;
-
- wearable.UnscaleDurability();
-
- if (wearable.MaxHitPoints < initMaxHP)
- {
- int bonus = initMaxHP - wearable.MaxHitPoints;
-
- if (bonus > 10)
- bonus = 10;
-
- wearable.MaxHitPoints += bonus;
- wearable.HitPoints += bonus;
-
- wearable.ScaleDurability();
-
- if (wearable.MaxHitPoints > 255) wearable.MaxHitPoints = 255;
- if (wearable.HitPoints > 255) wearable.HitPoints = 255;
-
- if (wearable.MaxHitPoints > origMaxHP)
- {
- from.SendLocalizedMessage(1049084); // You successfully use the powder on the item.
- from.PlaySound(0x247);
-
- --m_Powder.UsesRemaining;
-
- if (m_Powder.UsesRemaining <= 0)
- {
- from.SendLocalizedMessage(1049086); // You have used up your powder of fortifying.
- m_Powder.Delete();
- }
- }
- else
- {
- wearable.MaxHitPoints = origMaxHP;
- wearable.HitPoints = origCurHP;
- from.SendLocalizedMessage(1049085); // The item cannot be improved any further.
- }
- }
- else
- {
- from.SendLocalizedMessage(1049085); // The item cannot be improved any further.
- wearable.ScaleDurability();
- }
- }
- else
- {
- from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
- }
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
- else
- {
- from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
- }
- }
- }
- }
-}
+using Server.Network;
+using Server.Targeting;
+
+namespace Server.Items
+{
+ public class PowderOfTemperament : Item, IUsesRemaining
+ {
+ private int m_UsesRemaining;
+
+ [Constructible]
+ public PowderOfTemperament(int charges = 10) : base(4102)
+ {
+ Weight = 1.0;
+ Hue = 2419;
+ UsesRemaining = charges;
+ }
+
+ public PowderOfTemperament(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1049082; // powder of fortifying
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int UsesRemaining
+ {
+ get => m_UsesRemaining;
+ set
+ {
+ m_UsesRemaining = value;
+ InvalidateProperties();
+ }
+ }
+
+ bool IUsesRemaining.ShowUsesRemaining
+ {
+ get => true;
+ set { }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0);
+ writer.Write(m_UsesRemaining);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_UsesRemaining = reader.ReadInt();
+ break;
+ }
+ }
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
+ }
+
+ public virtual void DisplayDurabilityTo(Mobile m)
+ {
+ LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability
+ }
+
+ public override void OnSingleClick(Mobile from)
+ {
+ DisplayDurabilityTo(from);
+
+ base.OnSingleClick(from);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ from.Target = new InternalTarget(this);
+ else
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+
+ private class InternalTarget : Target
+ {
+ private readonly PowderOfTemperament m_Powder;
+
+ public InternalTarget(PowderOfTemperament powder) : base(2, false, TargetFlags.None) => m_Powder = powder;
+
+ protected override void OnTarget(Mobile from, object targeted)
+ {
+ if (m_Powder?.Deleted != false || m_Powder.UsesRemaining <= 0)
+ {
+ from.SendLocalizedMessage(1049086); // You have used up your powder of temperament.
+ return;
+ }
+
+ if (targeted is Item item && item is IDurability wearable)
+ {
+ if (!wearable.CanFortify)
+ {
+ from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
+ return;
+ }
+
+ if ((item.IsChildOf(from.Backpack) || (Core.ML && item.Parent == from)) &&
+ m_Powder.IsChildOf(from.Backpack))
+ {
+ int origMaxHP = wearable.MaxHitPoints;
+ int origCurHP = wearable.HitPoints;
+
+ if (origMaxHP > 0)
+ {
+ int initMaxHP = Core.AOS ? 255 : wearable.InitMaxHits;
+
+ wearable.UnscaleDurability();
+
+ if (wearable.MaxHitPoints < initMaxHP)
+ {
+ int bonus = initMaxHP - wearable.MaxHitPoints;
+
+ if (bonus > 10)
+ bonus = 10;
+
+ wearable.MaxHitPoints += bonus;
+ wearable.HitPoints += bonus;
+
+ wearable.ScaleDurability();
+
+ if (wearable.MaxHitPoints > 255) wearable.MaxHitPoints = 255;
+ if (wearable.HitPoints > 255) wearable.HitPoints = 255;
+
+ if (wearable.MaxHitPoints > origMaxHP)
+ {
+ from.SendLocalizedMessage(1049084); // You successfully use the powder on the item.
+ from.PlaySound(0x247);
+
+ --m_Powder.UsesRemaining;
+
+ if (m_Powder.UsesRemaining <= 0)
+ {
+ from.SendLocalizedMessage(1049086); // You have used up your powder of fortifying.
+ m_Powder.Delete();
+ }
+ }
+ else
+ {
+ wearable.MaxHitPoints = origMaxHP;
+ wearable.HitPoints = origCurHP;
+ from.SendLocalizedMessage(1049085); // The item cannot be improved any further.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(1049085); // The item cannot be improved any further.
+ wearable.ScaleDurability();
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs b/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs
index b96cb743d..47337766f 100644
--- a/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs
+++ b/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs
@@ -1,46 +1,46 @@
-namespace Server.Items
-{
- public class JesterHatofChuckles : BaseHat, ITokunoDyable
- {
- [Constructible]
- public JesterHatofChuckles() : this(Utility.RandomList(0x13e, 0x03, 0x172, 0x3f))
- {
- }
-
- [Constructible]
- public JesterHatofChuckles(int hue) : base(0x171C, hue)
- {
- Attributes.Luck = 150;
- Weight = 1.0;
- }
-
- public JesterHatofChuckles(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1073256; // Jester Hat of Chuckles - Museum of Vesper Replica 1073256
-
- public override int BasePhysicalResistance => 12;
- public override int BaseFireResistance => 12;
- public override int BaseColdResistance => 12;
- public override int BasePoisonResistance => 12;
- public override int BaseEnergyResistance => 12;
-
- public override int InitMinHits => 100;
- public override int InitMaxHits => 100;
-
- 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 JesterHatofChuckles : BaseHat, ITokunoDyable
+ {
+ [Constructible]
+ public JesterHatofChuckles() : this(Utility.RandomList(0x13e, 0x03, 0x172, 0x3f))
+ {
+ }
+
+ [Constructible]
+ public JesterHatofChuckles(int hue) : base(0x171C, hue)
+ {
+ Attributes.Luck = 150;
+ Weight = 1.0;
+ }
+
+ public JesterHatofChuckles(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1073256; // Jester Hat of Chuckles - Museum of Vesper Replica 1073256
+
+ public override int BasePhysicalResistance => 12;
+ public override int BaseFireResistance => 12;
+ public override int BaseColdResistance => 12;
+ public override int BasePoisonResistance => 12;
+ public override int BaseEnergyResistance => 12;
+
+ public override int InitMinHits => 100;
+ public override int InitMaxHits => 100;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs
index 310e5b786..8f1e5b3dc 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs
@@ -1,181 +1,181 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A5D, 0x2A61)]
- public class AwesomeDisturbingPortraitComponent : AddonComponent
- {
- private InternalTimer m_Timer;
-
- public AwesomeDisturbingPortraitComponent() : base(0x2A5D)
- {
- m_Timer = new InternalTimer(this, TimeSpan.FromSeconds(1));
- m_Timer.Start();
- }
-
- public AwesomeDisturbingPortraitComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074479; // Disturbing portrait
- public bool FacingSouth => ItemID < 0x2A61;
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- {
- Clock.GetTime(Map, X, Y, out int hours, out int _);
-
- if (hours < 4 || hours > 20)
- Effects.PlaySound(Location, Map, 0x569);
-
- UpdateImage();
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- public override void OnAfterDelete()
- {
- base.OnAfterDelete();
-
- if (m_Timer?.Running == true)
- m_Timer.Stop();
- }
-
- 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();
-
- m_Timer = new InternalTimer(this, TimeSpan.Zero);
- m_Timer.Start();
- }
-
- private void UpdateImage()
- {
- Clock.GetTime(Map, X, Y, out int hours, out int _);
-
- if (FacingSouth)
- {
- if (hours < 4)
- ItemID = 0x2A60;
- else if (hours < 6)
- ItemID = 0x2A5F;
- else if (hours < 8)
- ItemID = 0x2A5E;
- else if (hours < 16)
- ItemID = 0x2A5D;
- else if (hours < 18)
- ItemID = 0x2A5E;
- else if (hours < 20)
- ItemID = 0x2A5F;
- else
- ItemID = 0x2A60;
- }
- else
- {
- if (hours < 4)
- ItemID = 0x2A64;
- else if (hours < 6)
- ItemID = 0x2A63;
- else if (hours < 8)
- ItemID = 0x2A62;
- else if (hours < 16)
- ItemID = 0x2A61;
- else if (hours < 18)
- ItemID = 0x2A62;
- else if (hours < 20)
- ItemID = 0x2A63;
- else
- ItemID = 0x2A64;
- }
- }
-
- private class InternalTimer : Timer
- {
- private readonly AwesomeDisturbingPortraitComponent m_Component;
-
- public InternalTimer(AwesomeDisturbingPortraitComponent c, TimeSpan delay) : base(delay,
- TimeSpan.FromMinutes(10))
- {
- m_Component = c;
-
- Priority = TimerPriority.OneMinute;
- }
-
- protected override void OnTick()
- {
- if (m_Component?.Deleted == false)
- m_Component.UpdateImage();
- }
- }
- }
-
- public class AwesomeDisturbingPortraitAddon : BaseAddon
- {
- [Constructible]
- public AwesomeDisturbingPortraitAddon()
- {
- AddComponent(new AwesomeDisturbingPortraitComponent(), 0, 0, 0);
- }
-
- public AwesomeDisturbingPortraitAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new AwesomeDisturbingPortraitDeed();
-
- 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();
- }
- }
-
- public class AwesomeDisturbingPortraitDeed : BaseAddonDeed
- {
- [Constructible]
- public AwesomeDisturbingPortraitDeed() => LootType = LootType.Blessed;
-
- public AwesomeDisturbingPortraitDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new AwesomeDisturbingPortraitAddon();
- public override int LabelNumber => 1074479; // Disturbing portrait
-
- 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();
- }
- }
-}
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A5D, 0x2A61)]
+ public class AwesomeDisturbingPortraitComponent : AddonComponent
+ {
+ private InternalTimer m_Timer;
+
+ public AwesomeDisturbingPortraitComponent() : base(0x2A5D)
+ {
+ m_Timer = new InternalTimer(this, TimeSpan.FromSeconds(1));
+ m_Timer.Start();
+ }
+
+ public AwesomeDisturbingPortraitComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074479; // Disturbing portrait
+ public bool FacingSouth => ItemID < 0x2A61;
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ {
+ Clock.GetTime(Map, X, Y, out int hours, out int _);
+
+ if (hours < 4 || hours > 20)
+ Effects.PlaySound(Location, Map, 0x569);
+
+ UpdateImage();
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ public override void OnAfterDelete()
+ {
+ base.OnAfterDelete();
+
+ if (m_Timer?.Running == true)
+ m_Timer.Stop();
+ }
+
+ 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();
+
+ m_Timer = new InternalTimer(this, TimeSpan.Zero);
+ m_Timer.Start();
+ }
+
+ private void UpdateImage()
+ {
+ Clock.GetTime(Map, X, Y, out int hours, out int _);
+
+ if (FacingSouth)
+ {
+ if (hours < 4)
+ ItemID = 0x2A60;
+ else if (hours < 6)
+ ItemID = 0x2A5F;
+ else if (hours < 8)
+ ItemID = 0x2A5E;
+ else if (hours < 16)
+ ItemID = 0x2A5D;
+ else if (hours < 18)
+ ItemID = 0x2A5E;
+ else if (hours < 20)
+ ItemID = 0x2A5F;
+ else
+ ItemID = 0x2A60;
+ }
+ else
+ {
+ if (hours < 4)
+ ItemID = 0x2A64;
+ else if (hours < 6)
+ ItemID = 0x2A63;
+ else if (hours < 8)
+ ItemID = 0x2A62;
+ else if (hours < 16)
+ ItemID = 0x2A61;
+ else if (hours < 18)
+ ItemID = 0x2A62;
+ else if (hours < 20)
+ ItemID = 0x2A63;
+ else
+ ItemID = 0x2A64;
+ }
+ }
+
+ private class InternalTimer : Timer
+ {
+ private readonly AwesomeDisturbingPortraitComponent m_Component;
+
+ public InternalTimer(AwesomeDisturbingPortraitComponent c, TimeSpan delay) : base(delay,
+ TimeSpan.FromMinutes(10))
+ {
+ m_Component = c;
+
+ Priority = TimerPriority.OneMinute;
+ }
+
+ protected override void OnTick()
+ {
+ if (m_Component?.Deleted == false)
+ m_Component.UpdateImage();
+ }
+ }
+ }
+
+ public class AwesomeDisturbingPortraitAddon : BaseAddon
+ {
+ [Constructible]
+ public AwesomeDisturbingPortraitAddon()
+ {
+ AddComponent(new AwesomeDisturbingPortraitComponent(), 0, 0, 0);
+ }
+
+ public AwesomeDisturbingPortraitAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new AwesomeDisturbingPortraitDeed();
+
+ 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();
+ }
+ }
+
+ public class AwesomeDisturbingPortraitDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public AwesomeDisturbingPortraitDeed() => LootType = LootType.Blessed;
+
+ public AwesomeDisturbingPortraitDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new AwesomeDisturbingPortraitAddon();
+ public override int LabelNumber => 1074479; // Disturbing portrait
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BedOfNails.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BedOfNails.cs
index 75222e397..c7213ebd9 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BedOfNails.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BedOfNails.cs
@@ -1,186 +1,186 @@
-using System;
-
-namespace Server.Items
-{
- public class BedOfNailsComponent : AddonComponent
- {
- public BedOfNailsComponent(int itemID)
- : base(itemID)
- {
- }
-
- public BedOfNailsComponent(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1074801; // Bed of Nails
-
- public override bool OnMoveOver(Mobile m)
- {
- bool allow = base.OnMoveOver(m);
-
- if (allow && Addon is BedOfNailsAddon addon)
- addon.OnMoveOver(m);
-
- return allow;
- }
-
- 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();
- }
- }
-
- [FlippableAddon(Direction.South, Direction.East)]
- public class BedOfNailsAddon : BaseAddon
- {
- private InternalTimer m_Timer;
-
- [Constructible]
- public BedOfNailsAddon()
- {
- Direction = Direction.South;
-
- AddComponent(new BedOfNailsComponent(0x2A81), 0, 0, 0);
- AddComponent(new BedOfNailsComponent(0x2A82), 0, -1, 0);
- }
-
- public BedOfNailsAddon(Serial serial)
- : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BedOfNailsDeed();
-
- public override bool OnMoveOver(Mobile m)
- {
- if (m.Alive && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
- {
- if (m.Player)
- {
- if (m.Female)
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x53B, 0x53D));
- else
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x53E, 0x540));
- }
-
- if (m_Timer?.Running != true)
- (m_Timer = new InternalTimer(m)).Start();
- }
-
- return true;
- }
-
- 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();
- }
-
- public virtual void Flip(Mobile from, Direction direction)
- {
- switch (direction)
- {
- case Direction.East:
- AddComponent(new BedOfNailsComponent(0x2A89), 0, 0, 0);
- AddComponent(new BedOfNailsComponent(0x2A8A), -1, 0, 0);
- break;
- case Direction.South:
- AddComponent(new BedOfNailsComponent(0x2A81), 0, 0, 0);
- AddComponent(new BedOfNailsComponent(0x2A82), 0, -1, 0);
- break;
- }
- }
-
- private class InternalTimer : Timer
- {
- private Point3D m_Location;
- private readonly Mobile m_Mobile;
-
- public InternalTimer(Mobile m)
- : base(TimeSpan.Zero, TimeSpan.FromSeconds(1), 5)
- {
- m_Mobile = m;
- m_Location = Point3D.Zero;
- }
-
- protected override void OnTick()
- {
- if (m_Mobile?.Map == null || m_Mobile.Deleted || !m_Mobile.Alive || m_Mobile.Map == Map.Internal)
- {
- Stop();
- }
- else if (m_Location != m_Mobile.Location)
- {
- int amount = Utility.RandomMinMax(0, 7);
-
- for (int i = 0; i < amount; i++)
- {
- int x = m_Mobile.X + Utility.RandomMinMax(-1, 1);
- int y = m_Mobile.Y + Utility.RandomMinMax(-1, 1);
- int z = m_Mobile.Z;
-
- if (!m_Mobile.Map.CanFit(x, y, z, 1, false, false))
- {
- z = m_Mobile.Map.GetAverageZ(x, y);
-
- if (!m_Mobile.Map.CanFit(x, y, z, 1, false, false))
- continue;
- }
-
- Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
- blood.MoveToWorld(new Point3D(x, y, z), m_Mobile.Map);
- }
-
- m_Location = m_Mobile.Location;
- }
- }
- }
- }
-
- public class BedOfNailsDeed : BaseAddonDeed
- {
- [Constructible]
- public BedOfNailsDeed() => LootType = LootType.Blessed;
-
- public BedOfNailsDeed(Serial serial)
- : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BedOfNailsAddon();
- public override int LabelNumber => 1074801; // Bed of Nails
-
- 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();
- }
- }
-}
+using System;
+
+namespace Server.Items
+{
+ public class BedOfNailsComponent : AddonComponent
+ {
+ public BedOfNailsComponent(int itemID)
+ : base(itemID)
+ {
+ }
+
+ public BedOfNailsComponent(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074801; // Bed of Nails
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ bool allow = base.OnMoveOver(m);
+
+ if (allow && Addon is BedOfNailsAddon addon)
+ addon.OnMoveOver(m);
+
+ return allow;
+ }
+
+ 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();
+ }
+ }
+
+ [FlippableAddon(Direction.South, Direction.East)]
+ public class BedOfNailsAddon : BaseAddon
+ {
+ private InternalTimer m_Timer;
+
+ [Constructible]
+ public BedOfNailsAddon()
+ {
+ Direction = Direction.South;
+
+ AddComponent(new BedOfNailsComponent(0x2A81), 0, 0, 0);
+ AddComponent(new BedOfNailsComponent(0x2A82), 0, -1, 0);
+ }
+
+ public BedOfNailsAddon(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BedOfNailsDeed();
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ if (m.Alive && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
+ {
+ if (m.Player)
+ {
+ if (m.Female)
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x53B, 0x53D));
+ else
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x53E, 0x540));
+ }
+
+ if (m_Timer?.Running != true)
+ (m_Timer = new InternalTimer(m)).Start();
+ }
+
+ return true;
+ }
+
+ 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();
+ }
+
+ public virtual void Flip(Mobile from, Direction direction)
+ {
+ switch (direction)
+ {
+ case Direction.East:
+ AddComponent(new BedOfNailsComponent(0x2A89), 0, 0, 0);
+ AddComponent(new BedOfNailsComponent(0x2A8A), -1, 0, 0);
+ break;
+ case Direction.South:
+ AddComponent(new BedOfNailsComponent(0x2A81), 0, 0, 0);
+ AddComponent(new BedOfNailsComponent(0x2A82), 0, -1, 0);
+ break;
+ }
+ }
+
+ private class InternalTimer : Timer
+ {
+ private Point3D m_Location;
+ private readonly Mobile m_Mobile;
+
+ public InternalTimer(Mobile m)
+ : base(TimeSpan.Zero, TimeSpan.FromSeconds(1), 5)
+ {
+ m_Mobile = m;
+ m_Location = Point3D.Zero;
+ }
+
+ protected override void OnTick()
+ {
+ if (m_Mobile?.Map == null || m_Mobile.Deleted || !m_Mobile.Alive || m_Mobile.Map == Map.Internal)
+ {
+ Stop();
+ }
+ else if (m_Location != m_Mobile.Location)
+ {
+ int amount = Utility.RandomMinMax(0, 7);
+
+ for (int i = 0; i < amount; i++)
+ {
+ int x = m_Mobile.X + Utility.RandomMinMax(-1, 1);
+ int y = m_Mobile.Y + Utility.RandomMinMax(-1, 1);
+ int z = m_Mobile.Z;
+
+ if (!m_Mobile.Map.CanFit(x, y, z, 1, false, false))
+ {
+ z = m_Mobile.Map.GetAverageZ(x, y);
+
+ if (!m_Mobile.Map.CanFit(x, y, z, 1, false, false))
+ continue;
+ }
+
+ Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
+ blood.MoveToWorld(new Point3D(x, y, z), m_Mobile.Map);
+ }
+
+ m_Location = m_Mobile.Location;
+ }
+ }
+ }
+ }
+
+ public class BedOfNailsDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BedOfNailsDeed() => LootType = LootType.Blessed;
+
+ public BedOfNailsDeed(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BedOfNailsAddon();
+ public override int LabelNumber => 1074801; // Bed of Nails
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneCouch.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneCouch.cs
index 9aa5ad59c..ecb9da8cc 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneCouch.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneCouch.cs
@@ -1,114 +1,114 @@
-namespace Server.Items
-{
- public class BoneCouchComponent : AddonComponent
- {
- public BoneCouchComponent(int itemID) : base(itemID)
- {
- }
-
- public BoneCouchComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074477; // Bone couch
-
- public override bool OnMoveOver(Mobile m)
- {
- bool allow = base.OnMoveOver(m);
-
- if (allow && m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x547, 0x54A));
-
- return allow;
- }
-
- 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();
- }
- }
-
- [FlippableAddon(Direction.South, Direction.East)]
- public class BoneCouchAddon : BaseAddon
- {
- [Constructible]
- public BoneCouchAddon()
- {
- Direction = Direction.South;
-
- AddComponent(new BoneCouchComponent(0x2A5A), 0, 0, 0);
- AddComponent(new BoneCouchComponent(0x2A5B), -1, 0, 0);
- }
-
- public BoneCouchAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BoneCouchDeed();
-
- 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();
- }
-
- public virtual void Flip(Mobile from, Direction direction)
- {
- switch (direction)
- {
- case Direction.East:
- AddComponent(new BoneCouchComponent(0x2A80), 0, 0, 0);
- AddComponent(new BoneCouchComponent(0x2A7F), 0, 1, 0);
- break;
- case Direction.South:
- AddComponent(new BoneCouchComponent(0x2A5A), 0, 0, 0);
- AddComponent(new BoneCouchComponent(0x2A5B), -1, 0, 0);
- break;
- }
- }
- }
-
- public class BoneCouchDeed : BaseAddonDeed
- {
- [Constructible]
- public BoneCouchDeed() => LootType = LootType.Blessed;
-
- public BoneCouchDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BoneCouchAddon();
- public override int LabelNumber => 1074477; // Bone couch
-
- 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 BoneCouchComponent : AddonComponent
+ {
+ public BoneCouchComponent(int itemID) : base(itemID)
+ {
+ }
+
+ public BoneCouchComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074477; // Bone couch
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ bool allow = base.OnMoveOver(m);
+
+ if (allow && m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x547, 0x54A));
+
+ return allow;
+ }
+
+ 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();
+ }
+ }
+
+ [FlippableAddon(Direction.South, Direction.East)]
+ public class BoneCouchAddon : BaseAddon
+ {
+ [Constructible]
+ public BoneCouchAddon()
+ {
+ Direction = Direction.South;
+
+ AddComponent(new BoneCouchComponent(0x2A5A), 0, 0, 0);
+ AddComponent(new BoneCouchComponent(0x2A5B), -1, 0, 0);
+ }
+
+ public BoneCouchAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BoneCouchDeed();
+
+ 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();
+ }
+
+ public virtual void Flip(Mobile from, Direction direction)
+ {
+ switch (direction)
+ {
+ case Direction.East:
+ AddComponent(new BoneCouchComponent(0x2A80), 0, 0, 0);
+ AddComponent(new BoneCouchComponent(0x2A7F), 0, 1, 0);
+ break;
+ case Direction.South:
+ AddComponent(new BoneCouchComponent(0x2A5A), 0, 0, 0);
+ AddComponent(new BoneCouchComponent(0x2A5B), -1, 0, 0);
+ break;
+ }
+ }
+ }
+
+ public class BoneCouchDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BoneCouchDeed() => LootType = LootType.Blessed;
+
+ public BoneCouchDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BoneCouchAddon();
+ public override int LabelNumber => 1074477; // Bone couch
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneTable.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneTable.cs
index c6679fcea..0ada9869e 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneTable.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneTable.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class BoneTableAddon : BaseAddon
- {
- [Constructible]
- public BoneTableAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x2A5C, 1074478), 0, 0, 0);
- }
-
- public BoneTableAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BoneTableDeed();
-
- 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();
- }
- }
-
- public class BoneTableDeed : BaseAddonDeed
- {
- [Constructible]
- public BoneTableDeed() => LootType = LootType.Blessed;
-
- public BoneTableDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BoneTableAddon();
- public override int LabelNumber => 1074478; // Bone table
-
- 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 BoneTableAddon : BaseAddon
+ {
+ [Constructible]
+ public BoneTableAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x2A5C, 1074478), 0, 0, 0);
+ }
+
+ public BoneTableAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BoneTableDeed();
+
+ 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();
+ }
+ }
+
+ public class BoneTableDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BoneTableDeed() => LootType = LootType.Blessed;
+
+ public BoneTableDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BoneTableAddon();
+ public override int LabelNumber => 1074478; // Bone table
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneThrone.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneThrone.cs
index 649698ec6..39497c6c3 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneThrone.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/BoneThrone.cs
@@ -1,96 +1,96 @@
-namespace Server.Items
-{
- [Flippable(0x2A58, 0x2A59)]
- public class BoneThroneComponent : AddonComponent
- {
- public BoneThroneComponent() : base(0x2A58)
- {
- }
-
- public BoneThroneComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074476; // Bone throne
-
- public override bool OnMoveOver(Mobile m)
- {
- bool allow = base.OnMoveOver(m);
-
- if (allow && m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x54B, 0x54D));
-
- return allow;
- }
-
- 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();
- }
- }
-
- public class BoneThroneAddon : BaseAddon
- {
- [Constructible]
- public BoneThroneAddon()
- {
- AddComponent(new BoneThroneComponent(), 0, 0, 0);
- }
-
- public BoneThroneAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BoneThroneDeed();
-
- 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();
- }
- }
-
- public class BoneThroneDeed : BaseAddonDeed
- {
- [Constructible]
- public BoneThroneDeed() => LootType = LootType.Blessed;
-
- public BoneThroneDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BoneThroneAddon();
- public override int LabelNumber => 1074476; // Bone throne
-
- 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(0x2A58, 0x2A59)]
+ public class BoneThroneComponent : AddonComponent
+ {
+ public BoneThroneComponent() : base(0x2A58)
+ {
+ }
+
+ public BoneThroneComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074476; // Bone throne
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ bool allow = base.OnMoveOver(m);
+
+ if (allow && m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x54B, 0x54D));
+
+ return allow;
+ }
+
+ 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();
+ }
+ }
+
+ public class BoneThroneAddon : BaseAddon
+ {
+ [Constructible]
+ public BoneThroneAddon()
+ {
+ AddComponent(new BoneThroneComponent(), 0, 0, 0);
+ }
+
+ public BoneThroneAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BoneThroneDeed();
+
+ 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();
+ }
+ }
+
+ public class BoneThroneDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BoneThroneDeed() => LootType = LootType.Blessed;
+
+ public BoneThroneDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BoneThroneAddon();
+ public override int LabelNumber => 1074476; // Bone throne
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs
index 6c11b9f2a..b906c26ee 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs
@@ -1,134 +1,134 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A69, 0x2A6D)]
- public class CreepyPortraitComponent : AddonComponent
- {
- public CreepyPortraitComponent() : base(0x2A69)
- {
- }
-
- public CreepyPortraitComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074481; // Creepy portrait
- public override bool HandlesOnMovement => true;
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x565, 0x566));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- public override void OnMovement(Mobile m, Point3D old)
- {
- if (m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
- {
- if (!Utility.InRange(old, Location, 2) && Utility.InRange(m.Location, Location, 2))
- {
- if (ItemID == 0x2A69 || ItemID == 0x2A6D)
- {
- Up();
- Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Up);
- }
- }
- else if (Utility.InRange(old, Location, 2) && !Utility.InRange(m.Location, Location, 2))
- {
- if (ItemID == 0x2A6C || ItemID == 0x2A70)
- {
- Down();
- Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Down);
- }
- }
- }
- }
-
- private void Up()
- {
- ItemID += 1;
- }
-
- private void Down()
- {
- ItemID -= 1;
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(1); // version
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- if (version == 0 && ItemID != 0x2A69 && ItemID != 0x2A6D)
- ItemID = 0x2A69;
- }
- }
-
- public class CreepyPortraitAddon : BaseAddon
- {
- [Constructible]
- public CreepyPortraitAddon()
- {
- AddComponent(new CreepyPortraitComponent(), 0, 0, 0);
- }
-
- public CreepyPortraitAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new CreepyPortraitDeed();
-
- 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();
- }
- }
-
- public class CreepyPortraitDeed : BaseAddonDeed
- {
- [Constructible]
- public CreepyPortraitDeed() => LootType = LootType.Blessed;
-
- public CreepyPortraitDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new CreepyPortraitAddon();
- public override int LabelNumber => 1074481; // Creepy portrait
-
- 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();
- }
- }
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A69, 0x2A6D)]
+ public class CreepyPortraitComponent : AddonComponent
+ {
+ public CreepyPortraitComponent() : base(0x2A69)
+ {
+ }
+
+ public CreepyPortraitComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074481; // Creepy portrait
+ public override bool HandlesOnMovement => true;
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x565, 0x566));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ public override void OnMovement(Mobile m, Point3D old)
+ {
+ if (m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
+ {
+ if (!Utility.InRange(old, Location, 2) && Utility.InRange(m.Location, Location, 2))
+ {
+ if (ItemID == 0x2A69 || ItemID == 0x2A6D)
+ {
+ Up();
+ Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Up);
+ }
+ }
+ else if (Utility.InRange(old, Location, 2) && !Utility.InRange(m.Location, Location, 2))
+ {
+ if (ItemID == 0x2A6C || ItemID == 0x2A70)
+ {
+ Down();
+ Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Down);
+ }
+ }
+ }
+ }
+
+ private void Up()
+ {
+ ItemID += 1;
+ }
+
+ private void Down()
+ {
+ ItemID -= 1;
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(1); // version
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ if (version == 0 && ItemID != 0x2A69 && ItemID != 0x2A6D)
+ ItemID = 0x2A69;
+ }
+ }
+
+ public class CreepyPortraitAddon : BaseAddon
+ {
+ [Constructible]
+ public CreepyPortraitAddon()
+ {
+ AddComponent(new CreepyPortraitComponent(), 0, 0, 0);
+ }
+
+ public CreepyPortraitAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new CreepyPortraitDeed();
+
+ 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();
+ }
+ }
+
+ public class CreepyPortraitDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public CreepyPortraitDeed() => LootType = LootType.Blessed;
+
+ public CreepyPortraitDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new CreepyPortraitAddon();
+ public override int LabelNumber => 1074481; // Creepy portrait
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs
index 9e338ca2c..7847926a1 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs
@@ -1,115 +1,115 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A5D, 0x2A61)]
- public class DisturbingPortraitComponent : AddonComponent
- {
- private Timer m_Timer;
-
- public DisturbingPortraitComponent() : base(0x2A5D) => m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), Change);
-
- public DisturbingPortraitComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074479; // Disturbing portrait
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x567, 0x568));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- public override void OnAfterDelete()
- {
- base.OnAfterDelete();
-
- if (m_Timer?.Running == true)
- m_Timer.Stop();
- }
-
- 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();
-
- m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), Change);
- }
-
- private void Change()
- {
- if (ItemID < 0x2A61)
- ItemID = Utility.RandomMinMax(0x2A5D, 0x2A60);
- else
- ItemID = Utility.RandomMinMax(0x2A61, 0x2A64);
- }
- }
-
- public class DisturbingPortraitAddon : BaseAddon
- {
- [Constructible]
- public DisturbingPortraitAddon()
- {
- AddComponent(new DisturbingPortraitComponent(), 0, 0, 0);
- }
-
- public DisturbingPortraitAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new DisturbingPortraitDeed();
-
- 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();
- }
- }
-
- public class DisturbingPortraitDeed : BaseAddonDeed
- {
- [Constructible]
- public DisturbingPortraitDeed() => LootType = LootType.Blessed;
-
- public DisturbingPortraitDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new DisturbingPortraitAddon();
- public override int LabelNumber => 1074479; // Disturbing portrait
-
- 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();
- }
- }
-}
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A5D, 0x2A61)]
+ public class DisturbingPortraitComponent : AddonComponent
+ {
+ private Timer m_Timer;
+
+ public DisturbingPortraitComponent() : base(0x2A5D) => m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), Change);
+
+ public DisturbingPortraitComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074479; // Disturbing portrait
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x567, 0x568));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ public override void OnAfterDelete()
+ {
+ base.OnAfterDelete();
+
+ if (m_Timer?.Running == true)
+ m_Timer.Stop();
+ }
+
+ 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();
+
+ m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), Change);
+ }
+
+ private void Change()
+ {
+ if (ItemID < 0x2A61)
+ ItemID = Utility.RandomMinMax(0x2A5D, 0x2A60);
+ else
+ ItemID = Utility.RandomMinMax(0x2A61, 0x2A64);
+ }
+ }
+
+ public class DisturbingPortraitAddon : BaseAddon
+ {
+ [Constructible]
+ public DisturbingPortraitAddon()
+ {
+ AddComponent(new DisturbingPortraitComponent(), 0, 0, 0);
+ }
+
+ public DisturbingPortraitAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new DisturbingPortraitDeed();
+
+ 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();
+ }
+ }
+
+ public class DisturbingPortraitDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public DisturbingPortraitDeed() => LootType = LootType.Blessed;
+
+ public DisturbingPortraitDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new DisturbingPortraitAddon();
+ public override int LabelNumber => 1074479; // Disturbing portrait
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/HauntedMirror.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/HauntedMirror.cs
index ad72ce1b0..ad02b866d 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/HauntedMirror.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/HauntedMirror.cs
@@ -1,109 +1,109 @@
-namespace Server.Items
-{
- [Flippable(0x2A7B, 0x2A7D)]
- public class HaunterMirrorComponent : AddonComponent
- {
- public HaunterMirrorComponent() : base(0x2A7B)
- {
- }
-
- public HaunterMirrorComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074800; // Haunted Mirror
- public override bool HandlesOnMovement => true;
-
- public override void OnMovement(Mobile m, Point3D old)
- {
- base.OnMovement(m, old);
-
- if (m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
- {
- if (!Utility.InRange(old, Location, 2) && Utility.InRange(m.Location, Location, 2))
- {
- if (ItemID == 0x2A7B || ItemID == 0x2A7D)
- {
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x551, 0x553));
- ItemID += 1;
- }
- }
- else if (Utility.InRange(old, Location, 2) && !Utility.InRange(m.Location, Location, 2))
- {
- if (ItemID == 0x2A7C || ItemID == 0x2A7E)
- ItemID -= 1;
- }
- }
- }
-
- 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();
- }
- }
-
- public class HaunterMirrorAddon : BaseAddon
- {
- [Constructible]
- public HaunterMirrorAddon()
- {
- AddComponent(new HaunterMirrorComponent(), 0, 0, 0);
- }
-
- public HaunterMirrorAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new HaunterMirrorDeed();
-
- 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();
- }
- }
-
- public class HaunterMirrorDeed : BaseAddonDeed
- {
- [Constructible]
- public HaunterMirrorDeed() => LootType = LootType.Blessed;
-
- public HaunterMirrorDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new HaunterMirrorAddon();
- public override int LabelNumber => 1074800; // Haunted Mirror
-
- 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(0x2A7B, 0x2A7D)]
+ public class HaunterMirrorComponent : AddonComponent
+ {
+ public HaunterMirrorComponent() : base(0x2A7B)
+ {
+ }
+
+ public HaunterMirrorComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074800; // Haunted Mirror
+ public override bool HandlesOnMovement => true;
+
+ public override void OnMovement(Mobile m, Point3D old)
+ {
+ base.OnMovement(m, old);
+
+ if (m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
+ {
+ if (!Utility.InRange(old, Location, 2) && Utility.InRange(m.Location, Location, 2))
+ {
+ if (ItemID == 0x2A7B || ItemID == 0x2A7D)
+ {
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x551, 0x553));
+ ItemID += 1;
+ }
+ }
+ else if (Utility.InRange(old, Location, 2) && !Utility.InRange(m.Location, Location, 2))
+ {
+ if (ItemID == 0x2A7C || ItemID == 0x2A7E)
+ ItemID -= 1;
+ }
+ }
+ }
+
+ 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();
+ }
+ }
+
+ public class HaunterMirrorAddon : BaseAddon
+ {
+ [Constructible]
+ public HaunterMirrorAddon()
+ {
+ AddComponent(new HaunterMirrorComponent(), 0, 0, 0);
+ }
+
+ public HaunterMirrorAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new HaunterMirrorDeed();
+
+ 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();
+ }
+ }
+
+ public class HaunterMirrorDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public HaunterMirrorDeed() => LootType = LootType.Blessed;
+
+ public HaunterMirrorDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new HaunterMirrorAddon();
+ public override int LabelNumber => 1074800; // Haunted Mirror
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs
index a9d39f8b9..afc0ea5d1 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs
@@ -1,95 +1,95 @@
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A75, 0x2A76)]
- public class MountedPixieBlueComponent : AddonComponent
- {
- public MountedPixieBlueComponent() : base(0x2A75)
- {
- }
-
- public MountedPixieBlueComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074482; // Mounted pixie
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x55C, 0x55E));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- 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();
- }
- }
-
- public class MountedPixieBlueAddon : BaseAddon
- {
- public MountedPixieBlueAddon()
- {
- AddComponent(new MountedPixieBlueComponent(), 0, 0, 0);
- }
-
- public MountedPixieBlueAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new MountedPixieBlueDeed();
-
- 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();
- }
- }
-
- public class MountedPixieBlueDeed : BaseAddonDeed
- {
- [Constructible]
- public MountedPixieBlueDeed() => LootType = LootType.Blessed;
-
- public MountedPixieBlueDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new MountedPixieBlueAddon();
- public override int LabelNumber => 1074482; // Mounted pixie
-
- 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();
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A75, 0x2A76)]
+ public class MountedPixieBlueComponent : AddonComponent
+ {
+ public MountedPixieBlueComponent() : base(0x2A75)
+ {
+ }
+
+ public MountedPixieBlueComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x55C, 0x55E));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ 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();
+ }
+ }
+
+ public class MountedPixieBlueAddon : BaseAddon
+ {
+ public MountedPixieBlueAddon()
+ {
+ AddComponent(new MountedPixieBlueComponent(), 0, 0, 0);
+ }
+
+ public MountedPixieBlueAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new MountedPixieBlueDeed();
+
+ 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();
+ }
+ }
+
+ public class MountedPixieBlueDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public MountedPixieBlueDeed() => LootType = LootType.Blessed;
+
+ public MountedPixieBlueDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new MountedPixieBlueAddon();
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs
index d02952cc1..277106854 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs
@@ -1,95 +1,95 @@
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A71, 0x2A72)]
- public class MountedPixieGreenComponent : AddonComponent
- {
- public MountedPixieGreenComponent() : base(0x2A71)
- {
- }
-
- public MountedPixieGreenComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074482; // Mounted pixie
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x554, 0x557));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- 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();
- }
- }
-
- public class MountedPixieGreenAddon : BaseAddon
- {
- public MountedPixieGreenAddon()
- {
- AddComponent(new MountedPixieGreenComponent(), 0, 0, 0);
- }
-
- public MountedPixieGreenAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new MountedPixieGreenDeed();
-
- 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();
- }
- }
-
- public class MountedPixieGreenDeed : BaseAddonDeed
- {
- [Constructible]
- public MountedPixieGreenDeed() => LootType = LootType.Blessed;
-
- public MountedPixieGreenDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new MountedPixieGreenAddon();
- public override int LabelNumber => 1074482; // Mounted pixie
-
- 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();
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A71, 0x2A72)]
+ public class MountedPixieGreenComponent : AddonComponent
+ {
+ public MountedPixieGreenComponent() : base(0x2A71)
+ {
+ }
+
+ public MountedPixieGreenComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x554, 0x557));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ 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();
+ }
+ }
+
+ public class MountedPixieGreenAddon : BaseAddon
+ {
+ public MountedPixieGreenAddon()
+ {
+ AddComponent(new MountedPixieGreenComponent(), 0, 0, 0);
+ }
+
+ public MountedPixieGreenAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new MountedPixieGreenDeed();
+
+ 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();
+ }
+ }
+
+ public class MountedPixieGreenDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public MountedPixieGreenDeed() => LootType = LootType.Blessed;
+
+ public MountedPixieGreenDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new MountedPixieGreenAddon();
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs
index fed39d9d5..5b99ccbfe 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs
@@ -1,95 +1,95 @@
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A77, 0x2A78)]
- public class MountedPixieLimeComponent : AddonComponent
- {
- public MountedPixieLimeComponent() : base(0x2A77)
- {
- }
-
- public MountedPixieLimeComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074482; // Mounted pixie
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x55F, 0x561));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- 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();
- }
- }
-
- public class MountedPixieLimeAddon : BaseAddon
- {
- public MountedPixieLimeAddon()
- {
- AddComponent(new MountedPixieLimeComponent(), 0, 0, 0);
- }
-
- public MountedPixieLimeAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new MountedPixieLimeDeed();
-
- 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();
- }
- }
-
- public class MountedPixieLimeDeed : BaseAddonDeed
- {
- [Constructible]
- public MountedPixieLimeDeed() => LootType = LootType.Blessed;
-
- public MountedPixieLimeDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new MountedPixieLimeAddon();
- public override int LabelNumber => 1074482; // Mounted pixie
-
- 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();
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A77, 0x2A78)]
+ public class MountedPixieLimeComponent : AddonComponent
+ {
+ public MountedPixieLimeComponent() : base(0x2A77)
+ {
+ }
+
+ public MountedPixieLimeComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x55F, 0x561));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ 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();
+ }
+ }
+
+ public class MountedPixieLimeAddon : BaseAddon
+ {
+ public MountedPixieLimeAddon()
+ {
+ AddComponent(new MountedPixieLimeComponent(), 0, 0, 0);
+ }
+
+ public MountedPixieLimeAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new MountedPixieLimeDeed();
+
+ 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();
+ }
+ }
+
+ public class MountedPixieLimeDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public MountedPixieLimeDeed() => LootType = LootType.Blessed;
+
+ public MountedPixieLimeDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new MountedPixieLimeAddon();
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs
index f8099b80a..0f63ad74a 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs
@@ -1,95 +1,95 @@
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A73, 0x2A74)]
- public class MountedPixieOrangeComponent : AddonComponent
- {
- public MountedPixieOrangeComponent() : base(0x2A73)
- {
- }
-
- public MountedPixieOrangeComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074482; // Mounted pixie
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x558, 0x55B));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- 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();
- }
- }
-
- public class MountedPixieOrangeAddon : BaseAddon
- {
- public MountedPixieOrangeAddon()
- {
- AddComponent(new MountedPixieOrangeComponent(), 0, 0, 0);
- }
-
- public MountedPixieOrangeAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new MountedPixieOrangeDeed();
-
- 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();
- }
- }
-
- public class MountedPixieOrangeDeed : BaseAddonDeed
- {
- [Constructible]
- public MountedPixieOrangeDeed() => LootType = LootType.Blessed;
-
- public MountedPixieOrangeDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new MountedPixieOrangeAddon();
- public override int LabelNumber => 1074482; // Mounted pixie
-
- 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();
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A73, 0x2A74)]
+ public class MountedPixieOrangeComponent : AddonComponent
+ {
+ public MountedPixieOrangeComponent() : base(0x2A73)
+ {
+ }
+
+ public MountedPixieOrangeComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x558, 0x55B));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ 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();
+ }
+ }
+
+ public class MountedPixieOrangeAddon : BaseAddon
+ {
+ public MountedPixieOrangeAddon()
+ {
+ AddComponent(new MountedPixieOrangeComponent(), 0, 0, 0);
+ }
+
+ public MountedPixieOrangeAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new MountedPixieOrangeDeed();
+
+ 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();
+ }
+ }
+
+ public class MountedPixieOrangeDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public MountedPixieOrangeDeed() => LootType = LootType.Blessed;
+
+ public MountedPixieOrangeDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new MountedPixieOrangeAddon();
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs
index 94971deb7..7b2809d96 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs
@@ -1,95 +1,95 @@
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A79, 0x2A7A)]
- public class MountedPixieWhiteComponent : AddonComponent
- {
- public MountedPixieWhiteComponent() : base(0x2A79)
- {
- }
-
- public MountedPixieWhiteComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074482; // Mounted pixie
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x562, 0x564));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- 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();
- }
- }
-
- public class MountedPixieWhiteAddon : BaseAddon
- {
- public MountedPixieWhiteAddon()
- {
- AddComponent(new MountedPixieWhiteComponent(), 0, 0, 0);
- }
-
- public MountedPixieWhiteAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new MountedPixieWhiteDeed();
-
- 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();
- }
- }
-
- public class MountedPixieWhiteDeed : BaseAddonDeed
- {
- [Constructible]
- public MountedPixieWhiteDeed() => LootType = LootType.Blessed;
-
- public MountedPixieWhiteDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new MountedPixieWhiteAddon();
- public override int LabelNumber => 1074482; // Mounted pixie
-
- 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();
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A79, 0x2A7A)]
+ public class MountedPixieWhiteComponent : AddonComponent
+ {
+ public MountedPixieWhiteComponent() : base(0x2A79)
+ {
+ }
+
+ public MountedPixieWhiteComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x562, 0x564));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ 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();
+ }
+ }
+
+ public class MountedPixieWhiteAddon : BaseAddon
+ {
+ public MountedPixieWhiteAddon()
+ {
+ AddComponent(new MountedPixieWhiteComponent(), 0, 0, 0);
+ }
+
+ public MountedPixieWhiteAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new MountedPixieWhiteDeed();
+
+ 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();
+ }
+ }
+
+ public class MountedPixieWhiteDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public MountedPixieWhiteDeed() => LootType = LootType.Blessed;
+
+ public MountedPixieWhiteDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new MountedPixieWhiteAddon();
+ public override int LabelNumber => 1074482; // Mounted pixie
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs
index 0ad855c04..3f4dae829 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs
@@ -1,156 +1,156 @@
-using System;
-
-namespace Server.Items
-{
- [FlippableAddon(Direction.South, Direction.East)]
- public class SacrificialAltarAddon : BaseAddonContainer
- {
- private Timer m_Timer;
-
- [Constructible]
- public SacrificialAltarAddon() : base(0x2A9B)
- {
- Direction = Direction.South;
-
- AddComponent(new LocalizedContainerComponent(0x2A9A, 1074818), 1, 0, 0);
- }
-
- public SacrificialAltarAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonContainerDeed Deed => new SacrificialAltarDeed();
- public override int LabelNumber => 1074818; // Sacrificial Altar
- public override int DefaultMaxWeight => 0;
- public override int DefaultGumpID => 0x107;
- public override int DefaultDropSound => 0x42;
-
- public override bool OnDragDrop(Mobile from, Item dropped)
- {
- if (!base.OnDragDrop(from, dropped))
- return false;
-
- if (TotalItems >= 50)
- {
- SendLocalizedMessageTo(from, 501478); // The trash is full! Emptying!
- Empty();
- }
- else
- {
- SendLocalizedMessageTo(from, 1010442); // The item will be deleted in three minutes
-
- m_Timer?.Stop();
-
- m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
- }
-
- return true;
- }
-
- public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
- {
- if (!base.OnDragDropInto(from, item, p))
- return false;
-
- if (TotalItems >= 50)
- {
- SendLocalizedMessageTo(from, 501478); // The trash is full! Emptying!
- Empty();
- }
- else
- {
- SendLocalizedMessageTo(from, 1010442); // The item will be deleted in three minutes
-
- m_Timer?.Stop();
-
- m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
- }
-
- return true;
- }
-
- 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();
-
- if (Items.Count > 0)
- m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
- }
-
- public virtual void Flip(Mobile from, Direction direction)
- {
- switch (direction)
- {
- case Direction.East:
- ItemID = 0x2A9C;
- AddComponent(new LocalizedContainerComponent(0x2A9D, 1074818), 0, -1, 0);
- break;
- case Direction.South:
- ItemID = 0x2A9B;
- AddComponent(new LocalizedContainerComponent(0x2A9A, 1074818), 1, 0, 0);
- break;
- }
- }
-
- public virtual void Empty()
- {
- if (Items.Count > 0)
- {
- Point3D location = Location;
- location.Z += 10;
-
- Effects.SendLocationEffect(location, Map, 0x3709, 10, 10, 0x356, 0);
- Effects.PlaySound(location, Map, 0x32E);
-
- if (Items.Count > 0)
- for (int i = Items.Count - 1; i >= 0; --i)
- {
- if (i >= Items.Count)
- continue;
-
- Items[i].Delete();
- }
- }
-
- m_Timer?.Stop();
-
- m_Timer = null;
- }
- }
-
- public class SacrificialAltarDeed : BaseAddonContainerDeed
- {
- [Constructible]
- public SacrificialAltarDeed() => LootType = LootType.Blessed;
-
- public SacrificialAltarDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonContainer Addon => new SacrificialAltarAddon();
- public override int LabelNumber => 1074818; // Sacrificial Altar
-
- 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();
- }
- }
+using System;
+
+namespace Server.Items
+{
+ [FlippableAddon(Direction.South, Direction.East)]
+ public class SacrificialAltarAddon : BaseAddonContainer
+ {
+ private Timer m_Timer;
+
+ [Constructible]
+ public SacrificialAltarAddon() : base(0x2A9B)
+ {
+ Direction = Direction.South;
+
+ AddComponent(new LocalizedContainerComponent(0x2A9A, 1074818), 1, 0, 0);
+ }
+
+ public SacrificialAltarAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonContainerDeed Deed => new SacrificialAltarDeed();
+ public override int LabelNumber => 1074818; // Sacrificial Altar
+ public override int DefaultMaxWeight => 0;
+ public override int DefaultGumpID => 0x107;
+ public override int DefaultDropSound => 0x42;
+
+ public override bool OnDragDrop(Mobile from, Item dropped)
+ {
+ if (!base.OnDragDrop(from, dropped))
+ return false;
+
+ if (TotalItems >= 50)
+ {
+ SendLocalizedMessageTo(from, 501478); // The trash is full! Emptying!
+ Empty();
+ }
+ else
+ {
+ SendLocalizedMessageTo(from, 1010442); // The item will be deleted in three minutes
+
+ m_Timer?.Stop();
+
+ m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
+ }
+
+ return true;
+ }
+
+ public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
+ {
+ if (!base.OnDragDropInto(from, item, p))
+ return false;
+
+ if (TotalItems >= 50)
+ {
+ SendLocalizedMessageTo(from, 501478); // The trash is full! Emptying!
+ Empty();
+ }
+ else
+ {
+ SendLocalizedMessageTo(from, 1010442); // The item will be deleted in three minutes
+
+ m_Timer?.Stop();
+
+ m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
+ }
+
+ return true;
+ }
+
+ 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();
+
+ if (Items.Count > 0)
+ m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
+ }
+
+ public virtual void Flip(Mobile from, Direction direction)
+ {
+ switch (direction)
+ {
+ case Direction.East:
+ ItemID = 0x2A9C;
+ AddComponent(new LocalizedContainerComponent(0x2A9D, 1074818), 0, -1, 0);
+ break;
+ case Direction.South:
+ ItemID = 0x2A9B;
+ AddComponent(new LocalizedContainerComponent(0x2A9A, 1074818), 1, 0, 0);
+ break;
+ }
+ }
+
+ public virtual void Empty()
+ {
+ if (Items.Count > 0)
+ {
+ Point3D location = Location;
+ location.Z += 10;
+
+ Effects.SendLocationEffect(location, Map, 0x3709, 10, 10, 0x356, 0);
+ Effects.PlaySound(location, Map, 0x32E);
+
+ if (Items.Count > 0)
+ for (int i = Items.Count - 1; i >= 0; --i)
+ {
+ if (i >= Items.Count)
+ continue;
+
+ Items[i].Delete();
+ }
+ }
+
+ m_Timer?.Stop();
+
+ m_Timer = null;
+ }
+ }
+
+ public class SacrificialAltarDeed : BaseAddonContainerDeed
+ {
+ [Constructible]
+ public SacrificialAltarDeed() => LootType = LootType.Blessed;
+
+ public SacrificialAltarDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonContainer Addon => new SacrificialAltarAddon();
+ public override int LabelNumber => 1074818; // Sacrificial Altar
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs b/Projects/UOContent/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs
index 5299a1d88..9b231b16d 100644
--- a/Projects/UOContent/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs
+++ b/Projects/UOContent/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs
@@ -1,118 +1,118 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x2A65, 0x2A67)]
- public class UnsettlingPortraitComponent : AddonComponent
- {
- private Timer m_Timer;
-
- public UnsettlingPortraitComponent() : base(0x2A65) => m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), ChangeDirection);
-
- public UnsettlingPortraitComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1074480; // Unsettling portrait
-
- public override void OnDoubleClick(Mobile from)
- {
- if (Utility.InRange(Location, from.Location, 2))
- Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x567, 0x568));
- else
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
-
- public override void OnAfterDelete()
- {
- base.OnAfterDelete();
-
- m_Timer?.Stop();
- }
-
- 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();
-
- m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), ChangeDirection);
- }
-
- private void ChangeDirection()
- {
- if (ItemID == 0x2A65)
- ItemID += 1;
- else if (ItemID == 0x2A66)
- ItemID -= 1;
- else if (ItemID == 0x2A67)
- ItemID += 1;
- else if (ItemID == 0x2A68)
- ItemID -= 1;
- }
- }
-
- public class UnsettlingPortraitAddon : BaseAddon
- {
- [Constructible]
- public UnsettlingPortraitAddon()
- {
- AddComponent(new UnsettlingPortraitComponent(), 0, 0, 0);
- }
-
- public UnsettlingPortraitAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new UnsettlingPortraitDeed();
-
- 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();
- }
- }
-
- public class UnsettlingPortraitDeed : BaseAddonDeed
- {
- [Constructible]
- public UnsettlingPortraitDeed() => LootType = LootType.Blessed;
-
- public UnsettlingPortraitDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new UnsettlingPortraitAddon();
- public override int LabelNumber => 1074480; // Unsettling portrait
-
- 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();
- }
- }
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x2A65, 0x2A67)]
+ public class UnsettlingPortraitComponent : AddonComponent
+ {
+ private Timer m_Timer;
+
+ public UnsettlingPortraitComponent() : base(0x2A65) => m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), ChangeDirection);
+
+ public UnsettlingPortraitComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1074480; // Unsettling portrait
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (Utility.InRange(Location, from.Location, 2))
+ Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x567, 0x568));
+ else
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+
+ public override void OnAfterDelete()
+ {
+ base.OnAfterDelete();
+
+ m_Timer?.Stop();
+ }
+
+ 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();
+
+ m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), ChangeDirection);
+ }
+
+ private void ChangeDirection()
+ {
+ if (ItemID == 0x2A65)
+ ItemID += 1;
+ else if (ItemID == 0x2A66)
+ ItemID -= 1;
+ else if (ItemID == 0x2A67)
+ ItemID += 1;
+ else if (ItemID == 0x2A68)
+ ItemID -= 1;
+ }
+ }
+
+ public class UnsettlingPortraitAddon : BaseAddon
+ {
+ [Constructible]
+ public UnsettlingPortraitAddon()
+ {
+ AddComponent(new UnsettlingPortraitComponent(), 0, 0, 0);
+ }
+
+ public UnsettlingPortraitAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new UnsettlingPortraitDeed();
+
+ 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();
+ }
+ }
+
+ public class UnsettlingPortraitDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public UnsettlingPortraitDeed() => LootType = LootType.Blessed;
+
+ public UnsettlingPortraitDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new UnsettlingPortraitAddon();
+ public override int LabelNumber => 1074480; // Unsettling portrait
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Gifts/HearthOfHomeFire.cs b/Projects/UOContent/Items/Special/Gifts/HearthOfHomeFire.cs
index e05c89c9d..41cc1bd8b 100644
--- a/Projects/UOContent/Items/Special/Gifts/HearthOfHomeFire.cs
+++ b/Projects/UOContent/Items/Special/Gifts/HearthOfHomeFire.cs
@@ -1,127 +1,127 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class HearthOfHomeFire : BaseAddon
- {
- [Constructible]
- public HearthOfHomeFire(bool east)
- {
- if (east)
- {
- AddLightComponent(new AddonComponent(0x2352), 0, 0, 0);
- AddLightComponent(new AddonComponent(0x2358), 0, -1, 0);
- }
- else
- {
- AddLightComponent(new AddonComponent(0x2360), 0, 0, 0);
- AddLightComponent(new AddonComponent(0x2366), -1, 0, 0);
- }
- }
-
- public HearthOfHomeFire(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new HearthOfHomeFireDeed();
-
- private void AddLightComponent(AddonComponent component, int x, int y, int z)
- {
- component.Light = LightType.Circle150;
-
- AddComponent(component, x, y, z);
- }
-
- 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();
- }
- }
-
- public class HearthOfHomeFireDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public HearthOfHomeFireDeed() => LootType = LootType.Blessed;
-
- public HearthOfHomeFireDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new HearthOfHomeFire(m_East);
-
- public override int LabelNumber => 1062919; // Hearth of the Home Fire
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly HearthOfHomeFireDeed m_Deed;
-
- public InternalGump(HearthOfHomeFireDeed deed) : base(150, 50)
- {
- m_Deed = deed;
-
- AddBackground(0, 0, 350, 250, 0xA28);
-
- AddItem(90, 52, 0x2367);
- AddItem(112, 35, 0x2360);
- AddButton(70, 35, 0x868, 0x869, 1); // South
-
- AddItem(220, 35, 0x2352);
- AddItem(242, 52, 0x2358);
- AddButton(185, 35, 0x868, 0x869, 2); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed.Deleted || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class HearthOfHomeFire : BaseAddon
+ {
+ [Constructible]
+ public HearthOfHomeFire(bool east)
+ {
+ if (east)
+ {
+ AddLightComponent(new AddonComponent(0x2352), 0, 0, 0);
+ AddLightComponent(new AddonComponent(0x2358), 0, -1, 0);
+ }
+ else
+ {
+ AddLightComponent(new AddonComponent(0x2360), 0, 0, 0);
+ AddLightComponent(new AddonComponent(0x2366), -1, 0, 0);
+ }
+ }
+
+ public HearthOfHomeFire(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new HearthOfHomeFireDeed();
+
+ private void AddLightComponent(AddonComponent component, int x, int y, int z)
+ {
+ component.Light = LightType.Circle150;
+
+ AddComponent(component, x, y, z);
+ }
+
+ 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();
+ }
+ }
+
+ public class HearthOfHomeFireDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public HearthOfHomeFireDeed() => LootType = LootType.Blessed;
+
+ public HearthOfHomeFireDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new HearthOfHomeFire(m_East);
+
+ public override int LabelNumber => 1062919; // Hearth of the Home Fire
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly HearthOfHomeFireDeed m_Deed;
+
+ public InternalGump(HearthOfHomeFireDeed deed) : base(150, 50)
+ {
+ m_Deed = deed;
+
+ AddBackground(0, 0, 350, 250, 0xA28);
+
+ AddItem(90, 52, 0x2367);
+ AddItem(112, 35, 0x2360);
+ AddButton(70, 35, 0x868, 0x869, 1); // South
+
+ AddItem(220, 35, 0x2352);
+ AddItem(242, 52, 0x2358);
+ AddButton(185, 35, 0x868, 0x869, 2); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed.Deleted || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Gifts/HolySword.cs b/Projects/UOContent/Items/Special/Gifts/HolySword.cs
index 328214845..aff9d2ac2 100644
--- a/Projects/UOContent/Items/Special/Gifts/HolySword.cs
+++ b/Projects/UOContent/Items/Special/Gifts/HolySword.cs
@@ -1,42 +1,42 @@
-namespace Server.Items
-{
- public class HolySword : Longsword
- {
- [Constructible]
- public HolySword()
- {
- Hue = 0x482;
- LootType = LootType.Blessed;
-
- Slayer = SlayerName.Silver;
-
- Attributes.WeaponDamage = 40;
- WeaponAttributes.SelfRepair = 10;
- WeaponAttributes.LowerStatReq = 100;
- WeaponAttributes.UseBestSkill = 1;
- }
-
- public HolySword(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062921; // The Holy Sword
-
- public override int InitMinHits => 255;
- public override int InitMaxHits => 255;
-
- 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 HolySword : Longsword
+ {
+ [Constructible]
+ public HolySword()
+ {
+ Hue = 0x482;
+ LootType = LootType.Blessed;
+
+ Slayer = SlayerName.Silver;
+
+ Attributes.WeaponDamage = 40;
+ WeaponAttributes.SelfRepair = 10;
+ WeaponAttributes.LowerStatReq = 100;
+ WeaponAttributes.UseBestSkill = 1;
+ }
+
+ public HolySword(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062921; // The Holy Sword
+
+ public override int InitMinHits => 255;
+ public override int InitMaxHits => 255;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Gifts/LeggingsOfEmbers.cs b/Projects/UOContent/Items/Special/Gifts/LeggingsOfEmbers.cs
index 97fe9e23c..0bb8efe2b 100644
--- a/Projects/UOContent/Items/Special/Gifts/LeggingsOfEmbers.cs
+++ b/Projects/UOContent/Items/Special/Gifts/LeggingsOfEmbers.cs
@@ -1,45 +1,45 @@
-namespace Server.Items
-{
- public class LeggingsOfEmbers : PlateLegs
- {
- [Constructible]
- public LeggingsOfEmbers()
- {
- Hue = 0x2C;
- LootType = LootType.Blessed;
-
- ArmorAttributes.SelfRepair = 10;
- ArmorAttributes.MageArmor = 1;
- ArmorAttributes.LowerStatReq = 100;
- }
-
- public LeggingsOfEmbers(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062911; // Royal Leggings of Embers
-
- public override int BasePhysicalResistance => 15;
- public override int BaseFireResistance => 25;
- public override int BaseColdResistance => 0;
- public override int BasePoisonResistance => 15;
- public override int BaseEnergyResistance => 15;
-
- public override int InitMinHits => 255;
- public override int InitMaxHits => 255;
-
- 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 LeggingsOfEmbers : PlateLegs
+ {
+ [Constructible]
+ public LeggingsOfEmbers()
+ {
+ Hue = 0x2C;
+ LootType = LootType.Blessed;
+
+ ArmorAttributes.SelfRepair = 10;
+ ArmorAttributes.MageArmor = 1;
+ ArmorAttributes.LowerStatReq = 100;
+ }
+
+ public LeggingsOfEmbers(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062911; // Royal Leggings of Embers
+
+ public override int BasePhysicalResistance => 15;
+ public override int BaseFireResistance => 25;
+ public override int BaseColdResistance => 0;
+ public override int BasePoisonResistance => 15;
+ public override int BaseEnergyResistance => 15;
+
+ public override int InitMinHits => 255;
+ public override int InitMaxHits => 255;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Gifts/RoseOfTrinsic.cs b/Projects/UOContent/Items/Special/Gifts/RoseOfTrinsic.cs
index 2c402febc..40762dcfd 100644
--- a/Projects/UOContent/Items/Special/Gifts/RoseOfTrinsic.cs
+++ b/Projects/UOContent/Items/Special/Gifts/RoseOfTrinsic.cs
@@ -1,209 +1,209 @@
-using System;
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Gumps;
-using Server.Multis;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x234C, 0x234D)]
- public class RoseOfTrinsic : Item, ISecurable
- {
- private static readonly TimeSpan m_SpawnTime = TimeSpan.FromHours(4.0);
- private DateTime m_NextSpawnTime;
-
- private int m_Petals;
- private SpawnTimer m_SpawnTimer;
-
- [Constructible]
- public RoseOfTrinsic() : base(0x234D)
- {
- Weight = 1.0;
- LootType = LootType.Blessed;
-
- m_Petals = 0;
- StartSpawnTimer(TimeSpan.FromMinutes(1.0));
- }
-
- public RoseOfTrinsic(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062913; // Rose of Trinsic
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Petals
- {
- get => m_Petals;
- set
- {
- if (value >= 10)
- {
- m_Petals = 10;
-
- StopSpawnTimer();
- }
- else
- {
- if (value <= 0)
- m_Petals = 0;
- else
- m_Petals = value;
-
- StartSpawnTimer(m_SpawnTime);
- }
-
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SecureLevel Level { get; set; }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1062925, Petals.ToString()); // Petals: ~1_COUNT~
- }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- SetSecureLevelEntry.AddTo(from, this, list);
- }
-
- private void StartSpawnTimer(TimeSpan delay)
- {
- StopSpawnTimer();
-
- m_SpawnTimer = new SpawnTimer(this, delay);
- m_SpawnTimer.Start();
-
- m_NextSpawnTime = DateTime.UtcNow + delay;
- }
-
- private void StopSpawnTimer()
- {
- if (m_SpawnTimer != null)
- {
- m_SpawnTimer.Stop();
- m_SpawnTimer = null;
- }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!from.InRange(GetWorldLocation(), 2))
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- else if (Petals > 0)
- {
- from.AddToBackpack(new RoseOfTrinsicPetal(Petals));
- Petals = 0;
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.WriteEncodedInt(m_Petals);
- writer.WriteDeltaTime(m_NextSpawnTime);
- writer.WriteEncodedInt((int)Level);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- m_Petals = reader.ReadEncodedInt();
- m_NextSpawnTime = reader.ReadDeltaTime();
- Level = (SecureLevel)reader.ReadEncodedInt();
-
- if (m_Petals < 10)
- StartSpawnTimer(m_NextSpawnTime - DateTime.UtcNow);
- }
-
- private class SpawnTimer : Timer
- {
- private readonly RoseOfTrinsic m_Rose;
-
- public SpawnTimer(RoseOfTrinsic rose, TimeSpan delay) : base(delay)
- {
- m_Rose = rose;
-
- Priority = TimerPriority.OneMinute;
- }
-
- protected override void OnTick()
- {
- if (m_Rose.Deleted)
- return;
-
- m_Rose.m_SpawnTimer = null;
- m_Rose.Petals++;
- }
- }
- }
-
- public class RoseOfTrinsicPetal : Item
- {
- [Constructible]
- public RoseOfTrinsicPetal(int amount = 1) : base(0x1021)
- {
- Stackable = true;
- Amount = amount;
-
- Weight = 1.0;
- Hue = 0xE;
- }
-
- public RoseOfTrinsicPetal(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062926; // Petal of the Rose of Trinsic
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
- }
- else if (from.GetStatMod("RoseOfTrinsicPetal") != null)
- {
- from.SendLocalizedMessage(
- 1062927); // You have eaten one of these recently and eating another would provide no benefit.
- }
- else
- {
- from.PlaySound(0x1EE);
- from.AddStatMod(new StatMod(StatType.Str, "RoseOfTrinsicPetal", 5, TimeSpan.FromMinutes(5.0)));
-
- Consume();
- }
- }
-
- 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();
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Gumps;
+using Server.Multis;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x234C, 0x234D)]
+ public class RoseOfTrinsic : Item, ISecurable
+ {
+ private static readonly TimeSpan m_SpawnTime = TimeSpan.FromHours(4.0);
+ private DateTime m_NextSpawnTime;
+
+ private int m_Petals;
+ private SpawnTimer m_SpawnTimer;
+
+ [Constructible]
+ public RoseOfTrinsic() : base(0x234D)
+ {
+ Weight = 1.0;
+ LootType = LootType.Blessed;
+
+ m_Petals = 0;
+ StartSpawnTimer(TimeSpan.FromMinutes(1.0));
+ }
+
+ public RoseOfTrinsic(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062913; // Rose of Trinsic
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Petals
+ {
+ get => m_Petals;
+ set
+ {
+ if (value >= 10)
+ {
+ m_Petals = 10;
+
+ StopSpawnTimer();
+ }
+ else
+ {
+ if (value <= 0)
+ m_Petals = 0;
+ else
+ m_Petals = value;
+
+ StartSpawnTimer(m_SpawnTime);
+ }
+
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SecureLevel Level { get; set; }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1062925, Petals.ToString()); // Petals: ~1_COUNT~
+ }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ SetSecureLevelEntry.AddTo(from, this, list);
+ }
+
+ private void StartSpawnTimer(TimeSpan delay)
+ {
+ StopSpawnTimer();
+
+ m_SpawnTimer = new SpawnTimer(this, delay);
+ m_SpawnTimer.Start();
+
+ m_NextSpawnTime = DateTime.UtcNow + delay;
+ }
+
+ private void StopSpawnTimer()
+ {
+ if (m_SpawnTimer != null)
+ {
+ m_SpawnTimer.Stop();
+ m_SpawnTimer = null;
+ }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!from.InRange(GetWorldLocation(), 2))
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ else if (Petals > 0)
+ {
+ from.AddToBackpack(new RoseOfTrinsicPetal(Petals));
+ Petals = 0;
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.WriteEncodedInt(m_Petals);
+ writer.WriteDeltaTime(m_NextSpawnTime);
+ writer.WriteEncodedInt((int)Level);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ m_Petals = reader.ReadEncodedInt();
+ m_NextSpawnTime = reader.ReadDeltaTime();
+ Level = (SecureLevel)reader.ReadEncodedInt();
+
+ if (m_Petals < 10)
+ StartSpawnTimer(m_NextSpawnTime - DateTime.UtcNow);
+ }
+
+ private class SpawnTimer : Timer
+ {
+ private readonly RoseOfTrinsic m_Rose;
+
+ public SpawnTimer(RoseOfTrinsic rose, TimeSpan delay) : base(delay)
+ {
+ m_Rose = rose;
+
+ Priority = TimerPriority.OneMinute;
+ }
+
+ protected override void OnTick()
+ {
+ if (m_Rose.Deleted)
+ return;
+
+ m_Rose.m_SpawnTimer = null;
+ m_Rose.Petals++;
+ }
+ }
+ }
+
+ public class RoseOfTrinsicPetal : Item
+ {
+ [Constructible]
+ public RoseOfTrinsicPetal(int amount = 1) : base(0x1021)
+ {
+ Stackable = true;
+ Amount = amount;
+
+ Weight = 1.0;
+ Hue = 0xE;
+ }
+
+ public RoseOfTrinsicPetal(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062926; // Petal of the Rose of Trinsic
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
+ }
+ else if (from.GetStatMod("RoseOfTrinsicPetal") != null)
+ {
+ from.SendLocalizedMessage(
+ 1062927); // You have eaten one of these recently and eating another would provide no benefit.
+ }
+ else
+ {
+ from.PlaySound(0x1EE);
+ from.AddStatMod(new StatMod(StatType.Str, "RoseOfTrinsicPetal", 5, TimeSpan.FromMinutes(5.0)));
+
+ Consume();
+ }
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Gifts/SamuraiHelm.cs b/Projects/UOContent/Items/Special/Gifts/SamuraiHelm.cs
index 7de38888b..f9478b7a1 100644
--- a/Projects/UOContent/Items/Special/Gifts/SamuraiHelm.cs
+++ b/Projects/UOContent/Items/Special/Gifts/SamuraiHelm.cs
@@ -1,49 +1,49 @@
-namespace Server.Items
-{
- [Flippable(0x236C, 0x236D)]
- public class SamuraiHelm : BaseArmor
- {
- [Constructible]
- public SamuraiHelm() : base(0x236C)
- {
- Weight = 5.0;
- LootType = LootType.Blessed;
-
- Attributes.DefendChance = 15;
- ArmorAttributes.SelfRepair = 10;
- ArmorAttributes.LowerStatReq = 100;
- ArmorAttributes.MageArmor = 1;
- }
-
- public SamuraiHelm(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062923; // Ancient Samurai Helm
-
- public override int BasePhysicalResistance => 15;
- public override int BaseFireResistance => 10;
- public override int BaseColdResistance => 10;
- public override int BasePoisonResistance => 15;
- public override int BaseEnergyResistance => 10;
-
- public override int InitMinHits => 255;
- public override int InitMaxHits => 255;
-
- public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
-
- 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(0x236C, 0x236D)]
+ public class SamuraiHelm : BaseArmor
+ {
+ [Constructible]
+ public SamuraiHelm() : base(0x236C)
+ {
+ Weight = 5.0;
+ LootType = LootType.Blessed;
+
+ Attributes.DefendChance = 15;
+ ArmorAttributes.SelfRepair = 10;
+ ArmorAttributes.LowerStatReq = 100;
+ ArmorAttributes.MageArmor = 1;
+ }
+
+ public SamuraiHelm(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062923; // Ancient Samurai Helm
+
+ public override int BasePhysicalResistance => 15;
+ public override int BaseFireResistance => 10;
+ public override int BaseColdResistance => 10;
+ public override int BasePoisonResistance => 15;
+ public override int BaseEnergyResistance => 10;
+
+ public override int InitMinHits => 255;
+ public override int InitMaxHits => 255;
+
+ public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Gifts/ShaminoCrossbow.cs b/Projects/UOContent/Items/Special/Gifts/ShaminoCrossbow.cs
index e6a0128d3..30a458a18 100644
--- a/Projects/UOContent/Items/Special/Gifts/ShaminoCrossbow.cs
+++ b/Projects/UOContent/Items/Special/Gifts/ShaminoCrossbow.cs
@@ -1,40 +1,40 @@
-namespace Server.Items
-{
- public class ShaminoCrossbow : RepeatingCrossbow
- {
- [Constructible]
- public ShaminoCrossbow()
- {
- Hue = 0x504;
- LootType = LootType.Blessed;
-
- Attributes.AttackChance = 15;
- Attributes.WeaponDamage = 40;
- WeaponAttributes.SelfRepair = 10;
- WeaponAttributes.LowerStatReq = 100;
- }
-
- public ShaminoCrossbow(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062915; // Shamino�s Best Crossbow
-
- public override int InitMinHits => 255;
- public override int InitMaxHits => 255;
-
- 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 ShaminoCrossbow : RepeatingCrossbow
+ {
+ [Constructible]
+ public ShaminoCrossbow()
+ {
+ Hue = 0x504;
+ LootType = LootType.Blessed;
+
+ Attributes.AttackChance = 15;
+ Attributes.WeaponDamage = 40;
+ WeaponAttributes.SelfRepair = 10;
+ WeaponAttributes.LowerStatReq = 100;
+ }
+
+ public ShaminoCrossbow(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062915; // Shamino�s Best Crossbow
+
+ public override int InitMinHits => 255;
+ public override int InitMaxHits => 255;
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Gifts/TapestryOfSosaria.cs b/Projects/UOContent/Items/Special/Gifts/TapestryOfSosaria.cs
index b840fd19c..34e78a500 100644
--- a/Projects/UOContent/Items/Special/Gifts/TapestryOfSosaria.cs
+++ b/Projects/UOContent/Items/Special/Gifts/TapestryOfSosaria.cs
@@ -1,74 +1,74 @@
-using System.Collections.Generic;
-using Server.ContextMenus;
-using Server.Gumps;
-using Server.Multis;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x234E, 0x234F)]
- public class TapestryOfSosaria : Item, ISecurable
- {
- [Constructible]
- public TapestryOfSosaria() : base(0x234E)
- {
- Weight = 1.0;
- LootType = LootType.Blessed;
- }
-
- public TapestryOfSosaria(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1062917; // The Tapestry of Sosaria
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SecureLevel Level { get; set; }
-
- public override void GetContextMenuEntries(Mobile from, List list)
- {
- base.GetContextMenuEntries(from, list);
-
- SetSecureLevelEntry.AddTo(from, this, list);
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (from.InRange(GetWorldLocation(), 2))
- {
- from.CloseGump();
- from.SendGump(new InternalGump());
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.WriteEncodedInt((int)Level);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- Level = (SecureLevel)reader.ReadEncodedInt();
- }
-
- private class InternalGump : Gump
- {
- public InternalGump() : base(50, 50)
- {
- AddImage(0, 0, 0x2C95);
- }
- }
- }
+using System.Collections.Generic;
+using Server.ContextMenus;
+using Server.Gumps;
+using Server.Multis;
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x234E, 0x234F)]
+ public class TapestryOfSosaria : Item, ISecurable
+ {
+ [Constructible]
+ public TapestryOfSosaria() : base(0x234E)
+ {
+ Weight = 1.0;
+ LootType = LootType.Blessed;
+ }
+
+ public TapestryOfSosaria(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1062917; // The Tapestry of Sosaria
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SecureLevel Level { get; set; }
+
+ public override void GetContextMenuEntries(Mobile from, List list)
+ {
+ base.GetContextMenuEntries(from, list);
+
+ SetSecureLevelEntry.AddTo(from, this, list);
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (from.InRange(GetWorldLocation(), 2))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump());
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.WriteEncodedInt((int)Level);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ Level = (SecureLevel)reader.ReadEncodedInt();
+ }
+
+ private class InternalGump : Gump
+ {
+ public InternalGump() : base(50, 50)
+ {
+ AddImage(0, 0, 0x2C95);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/AppleTrunk.cs b/Projects/UOContent/Items/Special/Heritage Items/AppleTrunk.cs
index a3e531e42..3a67b67ee 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/AppleTrunk.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/AppleTrunk.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class AppleTrunkAddon : BaseAddon
- {
- [Constructible]
- public AppleTrunkAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xD98, 1076785), 0, 0, 0);
- }
-
- public AppleTrunkAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new AppleTrunkDeed();
-
- 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();
- }
- }
-
- public class AppleTrunkDeed : BaseAddonDeed
- {
- [Constructible]
- public AppleTrunkDeed() => LootType = LootType.Blessed;
-
- public AppleTrunkDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new AppleTrunkAddon();
- public override int LabelNumber => 1076785; // Apple Trunk
-
- 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 AppleTrunkAddon : BaseAddon
+ {
+ [Constructible]
+ public AppleTrunkAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xD98, 1076785), 0, 0, 0);
+ }
+
+ public AppleTrunkAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new AppleTrunkDeed();
+
+ 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();
+ }
+ }
+
+ public class AppleTrunkDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public AppleTrunkDeed() => LootType = LootType.Blessed;
+
+ public AppleTrunkDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new AppleTrunkAddon();
+ public override int LabelNumber => 1076785; // Apple Trunk
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/BlueDecorativeRug.cs b/Projects/UOContent/Items/Special/Heritage Items/BlueDecorativeRug.cs
index fb973dfb4..83fdb0ab8 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/BlueDecorativeRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/BlueDecorativeRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class BlueDecorativeRugAddon : BaseAddon
- {
- [Constructible]
- public BlueDecorativeRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xAD2, 1076589), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAD3, 1076589), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAD4, 1076589), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAD5, 1076589), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAD6, 1076589), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAD7, 1076589), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAD8, 1076589), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAD9, 1076589), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAD1, 1076589), 0, 0, 0);
- }
-
- public BlueDecorativeRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BlueDecorativeRugDeed();
-
- 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();
- }
- }
-
- public class BlueDecorativeRugDeed : BaseAddonDeed
- {
- [Constructible]
- public BlueDecorativeRugDeed() => LootType = LootType.Blessed;
-
- public BlueDecorativeRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BlueDecorativeRugAddon();
- public override int LabelNumber => 1076589; // Blue decorative rug
-
- 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 BlueDecorativeRugAddon : BaseAddon
+ {
+ [Constructible]
+ public BlueDecorativeRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xAD2, 1076589), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD3, 1076589), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD4, 1076589), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD5, 1076589), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD6, 1076589), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD7, 1076589), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD8, 1076589), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD9, 1076589), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD1, 1076589), 0, 0, 0);
+ }
+
+ public BlueDecorativeRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BlueDecorativeRugDeed();
+
+ 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();
+ }
+ }
+
+ public class BlueDecorativeRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BlueDecorativeRugDeed() => LootType = LootType.Blessed;
+
+ public BlueDecorativeRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BlueDecorativeRugAddon();
+ public override int LabelNumber => 1076589; // Blue decorative rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/BlueFancyRug.cs b/Projects/UOContent/Items/Special/Heritage Items/BlueFancyRug.cs
index 620c06b19..dd86d261a 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/BlueFancyRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/BlueFancyRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class BlueFancyRugAddon : BaseAddon
- {
- [Constructible]
- public BlueFancyRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xAC2, 1076273), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC3, 1076273), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC4, 1076273), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC5, 1076273), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF6, 1076273), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAF7, 1076273), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF8, 1076273), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAF9, 1076273), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAFA, 1076273), 0, 0, 0);
- }
-
- public BlueFancyRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BlueFancyRugDeed();
-
- 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();
- }
- }
-
- public class BlueFancyRugDeed : BaseAddonDeed
- {
- [Constructible]
- public BlueFancyRugDeed() => LootType = LootType.Blessed;
-
- public BlueFancyRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BlueFancyRugAddon();
- public override int LabelNumber => 1076273; // Blue fancy rug
-
- 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 BlueFancyRugAddon : BaseAddon
+ {
+ [Constructible]
+ public BlueFancyRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xAC2, 1076273), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC3, 1076273), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC4, 1076273), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC5, 1076273), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF6, 1076273), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF7, 1076273), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF8, 1076273), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF9, 1076273), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAFA, 1076273), 0, 0, 0);
+ }
+
+ public BlueFancyRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BlueFancyRugDeed();
+
+ 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();
+ }
+ }
+
+ public class BlueFancyRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BlueFancyRugDeed() => LootType = LootType.Blessed;
+
+ public BlueFancyRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BlueFancyRugAddon();
+ public override int LabelNumber => 1076273; // Blue fancy rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/BluePlainRug.cs b/Projects/UOContent/Items/Special/Heritage Items/BluePlainRug.cs
index b955a35ba..671077f8b 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/BluePlainRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/BluePlainRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class BluePlainRugAddon : BaseAddon
- {
- [Constructible]
- public BluePlainRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xAC2, 1076585), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC3, 1076585), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC4, 1076585), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC5, 1076585), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF6, 1076585), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAF7, 1076585), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF8, 1076585), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAF9, 1076585), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC0, 1076585), 0, 0, 0);
- }
-
- public BluePlainRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new BluePlainRugDeed();
-
- 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();
- }
- }
-
- public class BluePlainRugDeed : BaseAddonDeed
- {
- [Constructible]
- public BluePlainRugDeed() => LootType = LootType.Blessed;
-
- public BluePlainRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new BluePlainRugAddon();
- public override int LabelNumber => 1076585; // Blue plain rug
-
- 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 BluePlainRugAddon : BaseAddon
+ {
+ [Constructible]
+ public BluePlainRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xAC2, 1076585), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC3, 1076585), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC4, 1076585), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC5, 1076585), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF6, 1076585), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF7, 1076585), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF8, 1076585), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF9, 1076585), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC0, 1076585), 0, 0, 0);
+ }
+
+ public BluePlainRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new BluePlainRugDeed();
+
+ 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();
+ }
+ }
+
+ public class BluePlainRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public BluePlainRugDeed() => LootType = LootType.Blessed;
+
+ public BluePlainRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new BluePlainRugAddon();
+ public override int LabelNumber => 1076585; // Blue plain rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/BoilingCauldron.cs b/Projects/UOContent/Items/Special/Heritage Items/BoilingCauldron.cs
index 62dfacb5a..cf825584a 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/BoilingCauldron.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/BoilingCauldron.cs
@@ -1,63 +1,63 @@
-namespace Server.Items
-{
- [Flippable(0x2068, 0x207A)]
- public class BoilingCauldronAddon : BaseAddonContainer
- {
- [Constructible]
- public BoilingCauldronAddon() : base(0x2068)
- {
- AddComponent(new LocalizedContainerComponent(0xFAC, 1076267), 0, 0, 0);
- AddComponent(new LocalizedContainerComponent(0x970, 1076267), 0, 0, 8);
- }
-
- public BoilingCauldronAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonContainerDeed Deed => new BoilingCauldronDeed();
- public override int LabelNumber => 1076267; // Boiling Cauldron
- public override int DefaultGumpID => 0x9;
- public override int DefaultDropSound => 0x42;
-
- 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();
- }
- }
-
- public class BoilingCauldronDeed : BaseAddonContainerDeed
- {
- [Constructible]
- public BoilingCauldronDeed() => LootType = LootType.Blessed;
-
- public BoilingCauldronDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonContainer Addon => new BoilingCauldronAddon();
- public override int LabelNumber => 1076267; // Boiling Cauldron
-
- 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(0x2068, 0x207A)]
+ public class BoilingCauldronAddon : BaseAddonContainer
+ {
+ [Constructible]
+ public BoilingCauldronAddon() : base(0x2068)
+ {
+ AddComponent(new LocalizedContainerComponent(0xFAC, 1076267), 0, 0, 0);
+ AddComponent(new LocalizedContainerComponent(0x970, 1076267), 0, 0, 8);
+ }
+
+ public BoilingCauldronAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonContainerDeed Deed => new BoilingCauldronDeed();
+ public override int LabelNumber => 1076267; // Boiling Cauldron
+ public override int DefaultGumpID => 0x9;
+ public override int DefaultDropSound => 0x42;
+
+ 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();
+ }
+ }
+
+ public class BoilingCauldronDeed : BaseAddonContainerDeed
+ {
+ [Constructible]
+ public BoilingCauldronDeed() => LootType = LootType.Blessed;
+
+ public BoilingCauldronDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonContainer Addon => new BoilingCauldronAddon();
+ public override int LabelNumber => 1076267; // Boiling Cauldron
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTree.cs b/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTree.cs
index c554ccb0c..16c5c9a93 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTree.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTree.cs
@@ -1,59 +1,59 @@
-namespace Server.Items
-{
- public class CherryBlossomTreeAddon : BaseAddon
- {
- [Constructible]
- public CherryBlossomTreeAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x26EE, 1076268), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3122, 1076268), 0, 0, 0);
- }
-
- public CherryBlossomTreeAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new CherryBlossomTreeDeed();
-
- 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();
- }
- }
-
- public class CherryBlossomTreeDeed : BaseAddonDeed
- {
- [Constructible]
- public CherryBlossomTreeDeed() => LootType = LootType.Blessed;
-
- public CherryBlossomTreeDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new CherryBlossomTreeAddon();
- public override int LabelNumber => 1076268; // Cherry Blossom Tree
-
- 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 CherryBlossomTreeAddon : BaseAddon
+ {
+ [Constructible]
+ public CherryBlossomTreeAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x26EE, 1076268), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3122, 1076268), 0, 0, 0);
+ }
+
+ public CherryBlossomTreeAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new CherryBlossomTreeDeed();
+
+ 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();
+ }
+ }
+
+ public class CherryBlossomTreeDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public CherryBlossomTreeDeed() => LootType = LootType.Blessed;
+
+ public CherryBlossomTreeDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new CherryBlossomTreeAddon();
+ public override int LabelNumber => 1076268; // Cherry Blossom Tree
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTrunk.cs b/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTrunk.cs
index 5f3cb82d5..2c737ae71 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTrunk.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/CherryBlossomTrunk.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class CherryBlossomTrunkAddon : BaseAddon
- {
- [Constructible]
- public CherryBlossomTrunkAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x26EE, 1076784), 0, 0, 0);
- }
-
- public CherryBlossomTrunkAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new CherryBlossomTrunkDeed();
-
- 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();
- }
- }
-
- public class CherryBlossomTrunkDeed : BaseAddonDeed
- {
- [Constructible]
- public CherryBlossomTrunkDeed() => LootType = LootType.Blessed;
-
- public CherryBlossomTrunkDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new CherryBlossomTrunkAddon();
- public override int LabelNumber => 1076784; // Cherry Blossom Trunk
-
- 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 CherryBlossomTrunkAddon : BaseAddon
+ {
+ [Constructible]
+ public CherryBlossomTrunkAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x26EE, 1076784), 0, 0, 0);
+ }
+
+ public CherryBlossomTrunkAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new CherryBlossomTrunkDeed();
+
+ 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();
+ }
+ }
+
+ public class CherryBlossomTrunkDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public CherryBlossomTrunkDeed() => LootType = LootType.Blessed;
+
+ public CherryBlossomTrunkDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new CherryBlossomTrunkAddon();
+ public override int LabelNumber => 1076784; // Cherry Blossom Trunk
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/CinnamonFancyRug.cs b/Projects/UOContent/Items/Special/Heritage Items/CinnamonFancyRug.cs
index 97b83c47a..e5f1b3eb8 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/CinnamonFancyRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/CinnamonFancyRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class CinnamonFancyRugAddon : BaseAddon
- {
- [Constructible]
- public CinnamonFancyRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xAE3, 1076587), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAE4, 1076587), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAE5, 1076587), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAE6, 1076587), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAE7, 1076587), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAE8, 1076587), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAE9, 1076587), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAEA, 1076587), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAEB, 1076587), 0, 0, 0);
- }
-
- public CinnamonFancyRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new CinnamonFancyRugDeed();
-
- 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();
- }
- }
-
- public class CinnamonFancyRugDeed : BaseAddonDeed
- {
- [Constructible]
- public CinnamonFancyRugDeed() => LootType = LootType.Blessed;
-
- public CinnamonFancyRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new CinnamonFancyRugAddon();
- public override int LabelNumber => 1076587; // Cinnamon fancy rug
-
- 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 CinnamonFancyRugAddon : BaseAddon
+ {
+ [Constructible]
+ public CinnamonFancyRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xAE3, 1076587), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE4, 1076587), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE5, 1076587), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE6, 1076587), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE7, 1076587), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE8, 1076587), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE9, 1076587), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAEA, 1076587), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAEB, 1076587), 0, 0, 0);
+ }
+
+ public CinnamonFancyRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new CinnamonFancyRugDeed();
+
+ 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();
+ }
+ }
+
+ public class CinnamonFancyRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public CinnamonFancyRugDeed() => LootType = LootType.Blessed;
+
+ public CinnamonFancyRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new CinnamonFancyRugAddon();
+ public override int LabelNumber => 1076587; // Cinnamon fancy rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/Curtains.cs b/Projects/UOContent/Items/Special/Heritage Items/Curtains.cs
index 009f3c237..e5b2263ae 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/Curtains.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/Curtains.cs
@@ -1,193 +1,193 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class CurtainsComponent : AddonComponent, IDyable
- {
- public CurtainsComponent(int itemID, int closedID) : base(itemID) => ClosedID = closedID;
-
- public CurtainsComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076280; // Curtains
- public override bool DisplayWeight => false;
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int ClosedID { get; set; }
-
- public virtual bool Dye(Mobile from, DyeTub sender)
- {
- if (Deleted)
- return false;
-
- Hue = sender.DyedHue;
- return true;
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- base.OnDoubleClick(from);
-
- if (Addon != null)
- if (from.InRange(Location, 1))
- foreach (AddonComponent c in Addon.Components)
- if (c is CurtainsComponent curtain)
- {
- int temp = curtain.ItemID;
- curtain.ItemID = curtain.ClosedID;
- curtain.ClosedID = temp;
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.Write(ClosedID);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- ClosedID = reader.ReadInt();
- }
- }
-
- public class CurtainsAddon : BaseAddon
- {
- [Constructible]
- public CurtainsAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new CurtainsComponent(0x3D9E, 0x3DA8), 0, -1, 0);
- AddComponent(new CurtainsComponent(0x3DAC, 0x3DAE), 0, 0, 0);
- AddComponent(new CurtainsComponent(0x3DA0, 0x3DA6), 0, 2, 0);
- AddComponent(new CurtainsComponent(0x3D9F, 0x3DA7), 0, 1, 0);
- }
- else // south
- {
- AddComponent(new CurtainsComponent(0x3D9C, 0x3DAD), 0, 0, 0);
- AddComponent(new CurtainsComponent(0x3D9D, 0x3DA3), -1, 0, 0);
- AddComponent(new CurtainsComponent(0x3DA1, 0x3DA5), 2, 0, 0);
- AddComponent(new CurtainsComponent(0x3DAB, 0x3DA4), 1, 0, 0);
- }
- }
-
- public CurtainsAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new CurtainsDeed();
- public override bool RetainDeedHue => true;
-
- 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();
- }
- }
-
- public class CurtainsDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public CurtainsDeed() => LootType = LootType.Blessed;
-
- public CurtainsDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new CurtainsAddon(m_East);
- public override int LabelNumber => 1076280; // Curtains
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly CurtainsDeed m_Deed;
-
- public InternalGump(CurtainsDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076581, 0x7FFF); // Please select your curtain position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class CurtainsComponent : AddonComponent, IDyable
+ {
+ public CurtainsComponent(int itemID, int closedID) : base(itemID) => ClosedID = closedID;
+
+ public CurtainsComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076280; // Curtains
+ public override bool DisplayWeight => false;
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int ClosedID { get; set; }
+
+ public virtual bool Dye(Mobile from, DyeTub sender)
+ {
+ if (Deleted)
+ return false;
+
+ Hue = sender.DyedHue;
+ return true;
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ base.OnDoubleClick(from);
+
+ if (Addon != null)
+ if (from.InRange(Location, 1))
+ foreach (AddonComponent c in Addon.Components)
+ if (c is CurtainsComponent curtain)
+ {
+ int temp = curtain.ItemID;
+ curtain.ItemID = curtain.ClosedID;
+ curtain.ClosedID = temp;
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.Write(ClosedID);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ ClosedID = reader.ReadInt();
+ }
+ }
+
+ public class CurtainsAddon : BaseAddon
+ {
+ [Constructible]
+ public CurtainsAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new CurtainsComponent(0x3D9E, 0x3DA8), 0, -1, 0);
+ AddComponent(new CurtainsComponent(0x3DAC, 0x3DAE), 0, 0, 0);
+ AddComponent(new CurtainsComponent(0x3DA0, 0x3DA6), 0, 2, 0);
+ AddComponent(new CurtainsComponent(0x3D9F, 0x3DA7), 0, 1, 0);
+ }
+ else // south
+ {
+ AddComponent(new CurtainsComponent(0x3D9C, 0x3DAD), 0, 0, 0);
+ AddComponent(new CurtainsComponent(0x3D9D, 0x3DA3), -1, 0, 0);
+ AddComponent(new CurtainsComponent(0x3DA1, 0x3DA5), 2, 0, 0);
+ AddComponent(new CurtainsComponent(0x3DAB, 0x3DA4), 1, 0, 0);
+ }
+ }
+
+ public CurtainsAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new CurtainsDeed();
+ public override bool RetainDeedHue => true;
+
+ 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();
+ }
+ }
+
+ public class CurtainsDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public CurtainsDeed() => LootType = LootType.Blessed;
+
+ public CurtainsDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new CurtainsAddon(m_East);
+ public override int LabelNumber => 1076280; // Curtains
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly CurtainsDeed m_Deed;
+
+ public InternalGump(CurtainsDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076581, 0x7FFF); // Please select your curtain position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/Fountain.cs b/Projects/UOContent/Items/Special/Heritage Items/Fountain.cs
index 0fb0eb43e..b90bd499b 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/Fountain.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/Fountain.cs
@@ -1,57 +1,57 @@
-namespace Server.Items
-{
- public class FountainAddon : StoneFountainAddon
- {
- [Constructible]
- public FountainAddon()
- {
- }
-
- public FountainAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new FountainDeed();
-
- 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();
- }
- }
-
- public class FountainDeed : BaseAddonDeed
- {
- [Constructible]
- public FountainDeed() => LootType = LootType.Blessed;
-
- public FountainDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new FountainAddon();
- public override int LabelNumber => 1076283; // Fountain
-
- 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 FountainAddon : StoneFountainAddon
+ {
+ [Constructible]
+ public FountainAddon()
+ {
+ }
+
+ public FountainAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new FountainDeed();
+
+ 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();
+ }
+ }
+
+ public class FountainDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public FountainDeed() => LootType = LootType.Blessed;
+
+ public FountainDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new FountainAddon();
+ public override int LabelNumber => 1076283; // Fountain
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/FruitTrees.cs b/Projects/UOContent/Items/Special/Heritage Items/FruitTrees.cs
index feea1373b..447084354 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/FruitTrees.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/FruitTrees.cs
@@ -1,206 +1,206 @@
-using System;
-using Server.Network;
-
-namespace Server.Items
-{
- public abstract class BaseFruitTreeAddon : BaseAddon
- {
- private int m_Fruits;
-
- public BaseFruitTreeAddon()
- {
- Timer.DelayCall(TimeSpan.FromMinutes(5), Respawn);
- }
-
- public BaseFruitTreeAddon(Serial serial) : base(serial)
- {
- }
-
- public abstract override BaseAddonDeed Deed { get; }
- public abstract Item Fruit { get; }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int Fruits
- {
- get => m_Fruits;
- set => m_Fruits = Math.Max(value, 0);
- }
-
- public override void OnComponentUsed(AddonComponent c, Mobile from)
- {
- if (from.InRange(c.Location, 2))
- {
- if (m_Fruits > 0)
- {
- Item fruit = Fruit;
-
- if (fruit == null)
- return;
-
- if (!from.PlaceInBackpack(fruit))
- {
- fruit.Delete();
- from.SendLocalizedMessage(501015); // There is no room in your backpack for the fruit.
- }
- else
- {
- if (--m_Fruits == 0)
- Timer.DelayCall(TimeSpan.FromMinutes(30), Respawn);
-
- from.SendLocalizedMessage(501016); // You pick some fruit and put it in your backpack.
- }
- }
- else
- {
- from.SendLocalizedMessage(501017); // There is no more fruit on this tree
- }
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- private void Respawn()
- {
- m_Fruits = Utility.RandomMinMax(1, 4);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.WriteEncodedInt(0); // version
-
- writer.Write(m_Fruits);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadEncodedInt();
-
- m_Fruits = reader.ReadInt();
-
- if (m_Fruits == 0)
- Respawn();
- }
- }
-
- public class AppleTreeAddon : BaseFruitTreeAddon
- {
- [Constructible]
- public AppleTreeAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xD98, 1076269), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3124, 1076269), 0, 0, 0);
- }
-
- public AppleTreeAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new AppleTreeDeed();
- public override Item Fruit => new Apple();
-
- 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();
- }
- }
-
- public class AppleTreeDeed : BaseAddonDeed
- {
- [Constructible]
- public AppleTreeDeed() => LootType = LootType.Blessed;
-
- public AppleTreeDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new AppleTreeAddon();
- public override int LabelNumber => 1076269; // Apple Tree
-
- 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();
- }
- }
-
- public class PeachTreeAddon : BaseFruitTreeAddon
- {
- [Constructible]
- public PeachTreeAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xD9C, 1076270), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3123, 1076270), 0, 0, 0);
- }
-
- public PeachTreeAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new PeachTreeDeed();
- public override Item Fruit => new Peach();
-
- 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();
- }
- }
-
- public class PeachTreeDeed : BaseAddonDeed
- {
- [Constructible]
- public PeachTreeDeed() => LootType = LootType.Blessed;
-
- public PeachTreeDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new PeachTreeAddon();
- public override int LabelNumber => 1076270; // Peach Tree
-
- 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();
- }
- }
-}
+using System;
+using Server.Network;
+
+namespace Server.Items
+{
+ public abstract class BaseFruitTreeAddon : BaseAddon
+ {
+ private int m_Fruits;
+
+ public BaseFruitTreeAddon()
+ {
+ Timer.DelayCall(TimeSpan.FromMinutes(5), Respawn);
+ }
+
+ public BaseFruitTreeAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public abstract override BaseAddonDeed Deed { get; }
+ public abstract Item Fruit { get; }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int Fruits
+ {
+ get => m_Fruits;
+ set => m_Fruits = Math.Max(value, 0);
+ }
+
+ public override void OnComponentUsed(AddonComponent c, Mobile from)
+ {
+ if (from.InRange(c.Location, 2))
+ {
+ if (m_Fruits > 0)
+ {
+ Item fruit = Fruit;
+
+ if (fruit == null)
+ return;
+
+ if (!from.PlaceInBackpack(fruit))
+ {
+ fruit.Delete();
+ from.SendLocalizedMessage(501015); // There is no room in your backpack for the fruit.
+ }
+ else
+ {
+ if (--m_Fruits == 0)
+ Timer.DelayCall(TimeSpan.FromMinutes(30), Respawn);
+
+ from.SendLocalizedMessage(501016); // You pick some fruit and put it in your backpack.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(501017); // There is no more fruit on this tree
+ }
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ private void Respawn()
+ {
+ m_Fruits = Utility.RandomMinMax(1, 4);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.WriteEncodedInt(0); // version
+
+ writer.Write(m_Fruits);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadEncodedInt();
+
+ m_Fruits = reader.ReadInt();
+
+ if (m_Fruits == 0)
+ Respawn();
+ }
+ }
+
+ public class AppleTreeAddon : BaseFruitTreeAddon
+ {
+ [Constructible]
+ public AppleTreeAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xD98, 1076269), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3124, 1076269), 0, 0, 0);
+ }
+
+ public AppleTreeAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new AppleTreeDeed();
+ public override Item Fruit => new Apple();
+
+ 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();
+ }
+ }
+
+ public class AppleTreeDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public AppleTreeDeed() => LootType = LootType.Blessed;
+
+ public AppleTreeDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new AppleTreeAddon();
+ public override int LabelNumber => 1076269; // Apple Tree
+
+ 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();
+ }
+ }
+
+ public class PeachTreeAddon : BaseFruitTreeAddon
+ {
+ [Constructible]
+ public PeachTreeAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xD9C, 1076270), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3123, 1076270), 0, 0, 0);
+ }
+
+ public PeachTreeAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new PeachTreeDeed();
+ public override Item Fruit => new Peach();
+
+ 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();
+ }
+ }
+
+ public class PeachTreeDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public PeachTreeDeed() => LootType = LootType.Blessed;
+
+ public PeachTreeDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new PeachTreeAddon();
+ public override int LabelNumber => 1076270; // Peach Tree
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/GoldenDecorativeRug.cs b/Projects/UOContent/Items/Special/Heritage Items/GoldenDecorativeRug.cs
index 24811da13..fdeb571ec 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/GoldenDecorativeRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/GoldenDecorativeRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class GoldenDecorativeRugAddon : BaseAddon
- {
- [Constructible]
- public GoldenDecorativeRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xADB, 1076586), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xADC, 1076586), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xADD, 1076586), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xADE, 1076586), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xADF, 1076586), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAE0, 1076586), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAE1, 1076586), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAE2, 1076586), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xADA, 1076586), 0, 0, 0);
- }
-
- public GoldenDecorativeRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new GoldenDecorativeRugDeed();
-
- 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();
- }
- }
-
- public class GoldenDecorativeRugDeed : BaseAddonDeed
- {
- [Constructible]
- public GoldenDecorativeRugDeed() => LootType = LootType.Blessed;
-
- public GoldenDecorativeRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new GoldenDecorativeRugAddon();
- public override int LabelNumber => 1076586; // Golden decorative rug
-
- 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 GoldenDecorativeRugAddon : BaseAddon
+ {
+ [Constructible]
+ public GoldenDecorativeRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xADB, 1076586), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xADC, 1076586), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xADD, 1076586), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xADE, 1076586), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xADF, 1076586), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE0, 1076586), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE1, 1076586), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAE2, 1076586), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xADA, 1076586), 0, 0, 0);
+ }
+
+ public GoldenDecorativeRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new GoldenDecorativeRugDeed();
+
+ 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();
+ }
+ }
+
+ public class GoldenDecorativeRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public GoldenDecorativeRugDeed() => LootType = LootType.Blessed;
+
+ public GoldenDecorativeRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new GoldenDecorativeRugAddon();
+ public override int LabelNumber => 1076586; // Golden decorative rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/Guillotine.cs b/Projects/UOContent/Items/Special/Heritage Items/Guillotine.cs
index 022377caf..1feb0022d 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/Guillotine.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/Guillotine.cs
@@ -1,164 +1,164 @@
-using System;
-using Server.Network;
-using Server.Spells;
-
-namespace Server.Items
-{
- [Flippable(0x125E, 0x1230)]
- public class GuillotineComponent : AddonComponent
- {
- public GuillotineComponent() : base(0x125E)
- {
- }
-
- public GuillotineComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1024656; // Guillotine
-
- 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();
- }
- }
-
- public class GuillotineAddon : BaseAddon
- {
- [Constructible]
- public GuillotineAddon()
- {
- AddComponent(new GuillotineComponent(), 0, 0, 0);
- }
-
- public GuillotineAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new GuillotineDeed();
-
- public override void OnComponentUsed(AddonComponent c, Mobile from)
- {
- if (from.InRange(Location, 2))
- {
- if (Utility.RandomBool())
- {
- from.Location = Location;
-
- Timer.DelayCall(TimeSpan.FromSeconds(0.5), Activate, c, from);
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0,
- 501777); // Hmm... you suspect that if you used this again, it might hurt.
- }
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- 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();
- }
-
- public virtual void Activate(AddonComponent c, Mobile from)
- {
- if (c.ItemID == 0x125E || c.ItemID == 0x1269 || c.ItemID == 0x1260)
- c.ItemID = 0x1269;
- else
- c.ItemID = 0x1247;
-
- // blood
- int amount = Utility.RandomMinMax(3, 7);
-
- for (int i = 0; i < amount; i++)
- {
- int x = c.X + Utility.RandomMinMax(-1, 1);
- int y = c.Y + Utility.RandomMinMax(-1, 1);
- int z = c.Z;
-
- if (!c.Map.CanFit(x, y, z, 1, false, false))
- {
- z = c.Map.GetAverageZ(x, y);
-
- if (!c.Map.CanFit(x, y, z, 1, false, false))
- continue;
- }
-
- Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
- blood.MoveToWorld(new Point3D(x, y, z), c.Map);
- }
-
- if (from.Female)
- from.PlaySound(Utility.RandomMinMax(0x150, 0x153));
- else
- from.PlaySound(Utility.RandomMinMax(0x15A, 0x15D));
-
- from.LocalOverheadMessage(MessageType.Regular, 0,
- 501777); // Hmm... you suspect that if you used this again, it might hurt.
- SpellHelper.Damage(TimeSpan.Zero, from, Utility.Dice(2, 10, 5));
-
- Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Deactivate, c);
- }
-
- private void Deactivate(AddonComponent c)
- {
- if (c.ItemID == 0x1269)
- c.ItemID = 0x1260;
- else if (c.ItemID == 0x1260)
- c.ItemID = 0x125E;
- else if (c.ItemID == 0x1247)
- c.ItemID = 0x1246;
- else if (c.ItemID == 0x1246)
- c.ItemID = 0x1230;
- }
- }
-
- public class GuillotineDeed : BaseAddonDeed
- {
- [Constructible]
- public GuillotineDeed() => LootType = LootType.Blessed;
-
- public GuillotineDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new GuillotineAddon();
- public override int LabelNumber => 1024656; // Guillotine
-
- 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();
- }
- }
-}
+using System;
+using Server.Network;
+using Server.Spells;
+
+namespace Server.Items
+{
+ [Flippable(0x125E, 0x1230)]
+ public class GuillotineComponent : AddonComponent
+ {
+ public GuillotineComponent() : base(0x125E)
+ {
+ }
+
+ public GuillotineComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1024656; // Guillotine
+
+ 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();
+ }
+ }
+
+ public class GuillotineAddon : BaseAddon
+ {
+ [Constructible]
+ public GuillotineAddon()
+ {
+ AddComponent(new GuillotineComponent(), 0, 0, 0);
+ }
+
+ public GuillotineAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new GuillotineDeed();
+
+ public override void OnComponentUsed(AddonComponent c, Mobile from)
+ {
+ if (from.InRange(Location, 2))
+ {
+ if (Utility.RandomBool())
+ {
+ from.Location = Location;
+
+ Timer.DelayCall(TimeSpan.FromSeconds(0.5), Activate, c, from);
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0,
+ 501777); // Hmm... you suspect that if you used this again, it might hurt.
+ }
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ 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();
+ }
+
+ public virtual void Activate(AddonComponent c, Mobile from)
+ {
+ if (c.ItemID == 0x125E || c.ItemID == 0x1269 || c.ItemID == 0x1260)
+ c.ItemID = 0x1269;
+ else
+ c.ItemID = 0x1247;
+
+ // blood
+ int amount = Utility.RandomMinMax(3, 7);
+
+ for (int i = 0; i < amount; i++)
+ {
+ int x = c.X + Utility.RandomMinMax(-1, 1);
+ int y = c.Y + Utility.RandomMinMax(-1, 1);
+ int z = c.Z;
+
+ if (!c.Map.CanFit(x, y, z, 1, false, false))
+ {
+ z = c.Map.GetAverageZ(x, y);
+
+ if (!c.Map.CanFit(x, y, z, 1, false, false))
+ continue;
+ }
+
+ Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
+ blood.MoveToWorld(new Point3D(x, y, z), c.Map);
+ }
+
+ if (from.Female)
+ from.PlaySound(Utility.RandomMinMax(0x150, 0x153));
+ else
+ from.PlaySound(Utility.RandomMinMax(0x15A, 0x15D));
+
+ from.LocalOverheadMessage(MessageType.Regular, 0,
+ 501777); // Hmm... you suspect that if you used this again, it might hurt.
+ SpellHelper.Damage(TimeSpan.Zero, from, Utility.Dice(2, 10, 5));
+
+ Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Deactivate, c);
+ }
+
+ private void Deactivate(AddonComponent c)
+ {
+ if (c.ItemID == 0x1269)
+ c.ItemID = 0x1260;
+ else if (c.ItemID == 0x1260)
+ c.ItemID = 0x125E;
+ else if (c.ItemID == 0x1247)
+ c.ItemID = 0x1246;
+ else if (c.ItemID == 0x1246)
+ c.ItemID = 0x1230;
+ }
+ }
+
+ public class GuillotineDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public GuillotineDeed() => LootType = LootType.Blessed;
+
+ public GuillotineDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new GuillotineAddon();
+ public override int LabelNumber => 1024656; // Guillotine
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/HangingAxes.cs b/Projects/UOContent/Items/Special/Heritage Items/HangingAxes.cs
index 7053fcc3e..1c1820b6f 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/HangingAxes.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/HangingAxes.cs
@@ -1,127 +1,127 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class HangingAxesAddon : BaseAddon
- {
- [Constructible]
- public HangingAxesAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new LocalizedAddonComponent(0x156A, 1076271), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x156B, 1076271), 0, -1, 0);
- }
- else // south
- {
- AddComponent(new LocalizedAddonComponent(0x1568, 1076271), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x1569, 1076271), 1, 0, 0);
- }
- }
-
- public HangingAxesAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new HangingAxesDeed();
-
- 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();
- }
- }
-
- public class HangingAxesDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public HangingAxesDeed() => LootType = LootType.Blessed;
-
- public HangingAxesDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new HangingAxesAddon(m_East);
- public override int LabelNumber => 1076271; // Hanging Axes
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly HangingAxesDeed m_Deed;
-
- public InternalGump(HangingAxesDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076745, 0x7FFF); // Please select your hanging axe position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class HangingAxesAddon : BaseAddon
+ {
+ [Constructible]
+ public HangingAxesAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new LocalizedAddonComponent(0x156A, 1076271), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x156B, 1076271), 0, -1, 0);
+ }
+ else // south
+ {
+ AddComponent(new LocalizedAddonComponent(0x1568, 1076271), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x1569, 1076271), 1, 0, 0);
+ }
+ }
+
+ public HangingAxesAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new HangingAxesDeed();
+
+ 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();
+ }
+ }
+
+ public class HangingAxesDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public HangingAxesDeed() => LootType = LootType.Blessed;
+
+ public HangingAxesDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new HangingAxesAddon(m_East);
+ public override int LabelNumber => 1076271; // Hanging Axes
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly HangingAxesDeed m_Deed;
+
+ public InternalGump(HangingAxesDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076745, 0x7FFF); // Please select your hanging axe position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/HangingSwords.cs b/Projects/UOContent/Items/Special/Heritage Items/HangingSwords.cs
index b7849cdc9..26aff5311 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/HangingSwords.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/HangingSwords.cs
@@ -1,127 +1,127 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class HangingSwordsAddon : BaseAddon
- {
- [Constructible]
- public HangingSwordsAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new LocalizedAddonComponent(0x1566, 1076272), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x1567, 1076272), 0, -1, 0);
- }
- else // south
- {
- AddComponent(new LocalizedAddonComponent(0x1564, 1076272), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x1565, 1076272), 1, 0, 0);
- }
- }
-
- public HangingSwordsAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new HangingSwordsDeed();
-
- 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();
- }
- }
-
- public class HangingSwordsDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public HangingSwordsDeed() => LootType = LootType.Blessed;
-
- public HangingSwordsDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new HangingSwordsAddon(m_East);
- public override int LabelNumber => 1076272; // Hanging Swords
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly HangingSwordsDeed m_Deed;
-
- public InternalGump(HangingSwordsDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076746, 0x7FFF); // Please select your hanging sword position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class HangingSwordsAddon : BaseAddon
+ {
+ [Constructible]
+ public HangingSwordsAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new LocalizedAddonComponent(0x1566, 1076272), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x1567, 1076272), 0, -1, 0);
+ }
+ else // south
+ {
+ AddComponent(new LocalizedAddonComponent(0x1564, 1076272), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x1565, 1076272), 1, 0, 0);
+ }
+ }
+
+ public HangingSwordsAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new HangingSwordsDeed();
+
+ 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();
+ }
+ }
+
+ public class HangingSwordsDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public HangingSwordsDeed() => LootType = LootType.Blessed;
+
+ public HangingSwordsDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new HangingSwordsAddon(m_East);
+ public override int LabelNumber => 1076272; // Hanging Swords
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly HangingSwordsDeed m_Deed;
+
+ public InternalGump(HangingSwordsDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076746, 0x7FFF); // Please select your hanging sword position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/HouseLadder.cs b/Projects/UOContent/Items/Special/Heritage Items/HouseLadder.cs
index 4a504c202..b99582e46 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/HouseLadder.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/HouseLadder.cs
@@ -1,164 +1,164 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class HouseLadderAddon : BaseAddon
- {
- [Constructible]
- public HouseLadderAddon(int type)
- {
- switch (type)
- {
- case 0: // castle south
- AddComponent(new LocalizedAddonComponent(0x3DB2, 1076791), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 0, 1, 28);
- AddComponent(new LocalizedAddonComponent(0x3DB4, 1076791), 0, 2, 20);
- break;
- case 1: // castle east
- AddComponent(new LocalizedAddonComponent(0x3DB3, 1076791), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 1, 0, 28);
- AddComponent(new LocalizedAddonComponent(0x3DB5, 1076791), 2, 0, 20);
- break;
- case 2: // castle north
- AddComponent(new LocalizedAddonComponent(0x2FDF, 1076791), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 0, -1, 28);
- AddComponent(new LocalizedAddonComponent(0x3DB6, 1076791), 0, -2, 20);
- break;
- case 3: // castle west
- AddComponent(new LocalizedAddonComponent(0x2FDE, 1076791), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), -1, 0, 28);
- AddComponent(new LocalizedAddonComponent(0x3DB7, 1076791), -2, 0, 20);
- break;
- case 4: // south
- AddComponent(new LocalizedAddonComponent(0x3DB2, 1076287), 0, 0, 0);
- break;
- case 5: // east
- AddComponent(new LocalizedAddonComponent(0x3DB3, 1076287), 0, 0, 0);
- break;
- case 6: // north
- AddComponent(new LocalizedAddonComponent(0x2FDF, 1076287), 0, 0, 0);
- break;
- case 7: // west
- AddComponent(new LocalizedAddonComponent(0x2FDE, 1076287), 0, 0, 0);
- break;
- }
- }
-
- public HouseLadderAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new HouseLadderDeed();
-
- 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();
- }
- }
-
- public class HouseLadderDeed : BaseAddonDeed
- {
- private int m_Type;
-
- [Constructible]
- public HouseLadderDeed() => LootType = LootType.Blessed;
-
- public HouseLadderDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new HouseLadderAddon(m_Type);
- public override int LabelNumber => 1076287; // Ladder
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly HouseLadderDeed m_Deed;
-
- public InternalGump(HouseLadderDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076780, 0x7FFF); // Please select your ladder position. Use the ladders marked (castle) for accessing the tops of keeps and castles.
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1076794, 0x7FFF); // South (Castle)
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1076795, 0x7FFF); // East (Castle)
- AddButton(19, 97, 0x845, 0x846, 3);
- AddHtmlLocalized(44, 95, 213, 20, 1076792, 0x7FFF); // North (Castle)
- AddButton(19, 121, 0x845, 0x846, 4);
- AddHtmlLocalized(44, 119, 213, 20, 1076793, 0x7FFF); // West (Castle)
- AddButton(19, 145, 0x845, 0x846, 5);
- AddHtmlLocalized(44, 143, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 169, 0x845, 0x846, 6);
- AddHtmlLocalized(44, 167, 213, 20, 1075387, 0x7FFF); // East
- AddButton(19, 193, 0x845, 0x846, 7);
- AddHtmlLocalized(44, 191, 213, 20, 1075389, 0x7FFF); // North
- AddButton(19, 217, 0x845, 0x846, 8);
- AddHtmlLocalized(44, 215, 213, 20, 1075390, 0x7FFF); // West
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0 || info.ButtonID < 1 || info.ButtonID > 8)
- return;
-
- m_Deed.m_Type = info.ButtonID - 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class HouseLadderAddon : BaseAddon
+ {
+ [Constructible]
+ public HouseLadderAddon(int type)
+ {
+ switch (type)
+ {
+ case 0: // castle south
+ AddComponent(new LocalizedAddonComponent(0x3DB2, 1076791), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 0, 1, 28);
+ AddComponent(new LocalizedAddonComponent(0x3DB4, 1076791), 0, 2, 20);
+ break;
+ case 1: // castle east
+ AddComponent(new LocalizedAddonComponent(0x3DB3, 1076791), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 1, 0, 28);
+ AddComponent(new LocalizedAddonComponent(0x3DB5, 1076791), 2, 0, 20);
+ break;
+ case 2: // castle north
+ AddComponent(new LocalizedAddonComponent(0x2FDF, 1076791), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 0, -1, 28);
+ AddComponent(new LocalizedAddonComponent(0x3DB6, 1076791), 0, -2, 20);
+ break;
+ case 3: // castle west
+ AddComponent(new LocalizedAddonComponent(0x2FDE, 1076791), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), -1, 0, 28);
+ AddComponent(new LocalizedAddonComponent(0x3DB7, 1076791), -2, 0, 20);
+ break;
+ case 4: // south
+ AddComponent(new LocalizedAddonComponent(0x3DB2, 1076287), 0, 0, 0);
+ break;
+ case 5: // east
+ AddComponent(new LocalizedAddonComponent(0x3DB3, 1076287), 0, 0, 0);
+ break;
+ case 6: // north
+ AddComponent(new LocalizedAddonComponent(0x2FDF, 1076287), 0, 0, 0);
+ break;
+ case 7: // west
+ AddComponent(new LocalizedAddonComponent(0x2FDE, 1076287), 0, 0, 0);
+ break;
+ }
+ }
+
+ public HouseLadderAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new HouseLadderDeed();
+
+ 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();
+ }
+ }
+
+ public class HouseLadderDeed : BaseAddonDeed
+ {
+ private int m_Type;
+
+ [Constructible]
+ public HouseLadderDeed() => LootType = LootType.Blessed;
+
+ public HouseLadderDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new HouseLadderAddon(m_Type);
+ public override int LabelNumber => 1076287; // Ladder
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly HouseLadderDeed m_Deed;
+
+ public InternalGump(HouseLadderDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076780, 0x7FFF); // Please select your ladder position. Use the ladders marked (castle) for accessing the tops of keeps and castles.
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1076794, 0x7FFF); // South (Castle)
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1076795, 0x7FFF); // East (Castle)
+ AddButton(19, 97, 0x845, 0x846, 3);
+ AddHtmlLocalized(44, 95, 213, 20, 1076792, 0x7FFF); // North (Castle)
+ AddButton(19, 121, 0x845, 0x846, 4);
+ AddHtmlLocalized(44, 119, 213, 20, 1076793, 0x7FFF); // West (Castle)
+ AddButton(19, 145, 0x845, 0x846, 5);
+ AddHtmlLocalized(44, 143, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 169, 0x845, 0x846, 6);
+ AddHtmlLocalized(44, 167, 213, 20, 1075387, 0x7FFF); // East
+ AddButton(19, 193, 0x845, 0x846, 7);
+ AddHtmlLocalized(44, 191, 213, 20, 1075389, 0x7FFF); // North
+ AddButton(19, 217, 0x845, 0x846, 8);
+ AddHtmlLocalized(44, 215, 213, 20, 1075390, 0x7FFF); // West
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0 || info.ButtonID < 1 || info.ButtonID > 8)
+ return;
+
+ m_Deed.m_Type = info.ButtonID - 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/IronMaiden.cs b/Projects/UOContent/Items/Special/Heritage Items/IronMaiden.cs
index 73022624c..11d5a619d 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/IronMaiden.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/IronMaiden.cs
@@ -1,126 +1,126 @@
-using System;
-using Server.Network;
-using Server.Spells;
-
-namespace Server.Items
-{
- public class IronMaidenAddon : BaseAddon
- {
- public IronMaidenAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x1249, 1076288), 0, 0, 0);
- }
-
- public IronMaidenAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new IronMaidenDeed();
-
- public override void OnComponentUsed(AddonComponent c, Mobile from)
- {
- if (from.InRange(GetWorldLocation(), 2) && from.InLOS(GetWorldLocation()))
- {
- if (Utility.RandomBool())
- {
- from.Location = Location;
- c.ItemID = 0x124A;
-
- Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 3, Activate, c, from);
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0,
- 501777); // Hmm... you suspect that if you used this again, it might hurt.
- }
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- 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();
- }
-
- public virtual void Activate(AddonComponent c, Mobile from)
- {
- c.ItemID += 1;
-
- if (c.ItemID < 0x124D)
- return;
-
- // blood
- int amount = Utility.RandomMinMax(3, 7);
-
- for (int i = 0; i < amount; i++)
- {
- int x = c.X + Utility.RandomMinMax(-1, 1);
- int y = c.Y + Utility.RandomMinMax(-1, 1);
- int z = c.Z;
-
- if (!c.Map.CanFit(x, y, z, 1, false, false))
- {
- z = c.Map.GetAverageZ(x, y);
-
- if (!c.Map.CanFit(x, y, z, 1, false, false))
- continue;
- }
-
- Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
- blood.MoveToWorld(new Point3D(x, y, z), c.Map);
- }
-
- from.PlaySound(from.Female ? Utility.RandomMinMax(0x150, 0x153) : Utility.RandomMinMax(0x15A, 0x15D));
-
- from.LocalOverheadMessage(MessageType.Regular, 0,
- 501777); // Hmm... you suspect that if you used this again, it might hurt.
- SpellHelper.Damage(TimeSpan.Zero, from, Utility.Dice(2, 10, 5));
-
- Timer.DelayCall(TimeSpan.FromSeconds(1), Deactivate, c);
- }
-
- private void Deactivate(AddonComponent c)
- {
- c.ItemID = 0x1249;
- }
- }
-
- public class IronMaidenDeed : BaseAddonDeed
- {
- [Constructible]
- public IronMaidenDeed() => LootType = LootType.Blessed;
-
- public IronMaidenDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new IronMaidenAddon();
- public override int LabelNumber => 1076288; // Iron Maiden
-
- 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();
- }
- }
-}
+using System;
+using Server.Network;
+using Server.Spells;
+
+namespace Server.Items
+{
+ public class IronMaidenAddon : BaseAddon
+ {
+ public IronMaidenAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x1249, 1076288), 0, 0, 0);
+ }
+
+ public IronMaidenAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new IronMaidenDeed();
+
+ public override void OnComponentUsed(AddonComponent c, Mobile from)
+ {
+ if (from.InRange(GetWorldLocation(), 2) && from.InLOS(GetWorldLocation()))
+ {
+ if (Utility.RandomBool())
+ {
+ from.Location = Location;
+ c.ItemID = 0x124A;
+
+ Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 3, Activate, c, from);
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0,
+ 501777); // Hmm... you suspect that if you used this again, it might hurt.
+ }
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ 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();
+ }
+
+ public virtual void Activate(AddonComponent c, Mobile from)
+ {
+ c.ItemID += 1;
+
+ if (c.ItemID < 0x124D)
+ return;
+
+ // blood
+ int amount = Utility.RandomMinMax(3, 7);
+
+ for (int i = 0; i < amount; i++)
+ {
+ int x = c.X + Utility.RandomMinMax(-1, 1);
+ int y = c.Y + Utility.RandomMinMax(-1, 1);
+ int z = c.Z;
+
+ if (!c.Map.CanFit(x, y, z, 1, false, false))
+ {
+ z = c.Map.GetAverageZ(x, y);
+
+ if (!c.Map.CanFit(x, y, z, 1, false, false))
+ continue;
+ }
+
+ Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
+ blood.MoveToWorld(new Point3D(x, y, z), c.Map);
+ }
+
+ from.PlaySound(from.Female ? Utility.RandomMinMax(0x150, 0x153) : Utility.RandomMinMax(0x15A, 0x15D));
+
+ from.LocalOverheadMessage(MessageType.Regular, 0,
+ 501777); // Hmm... you suspect that if you used this again, it might hurt.
+ SpellHelper.Damage(TimeSpan.Zero, from, Utility.Dice(2, 10, 5));
+
+ Timer.DelayCall(TimeSpan.FromSeconds(1), Deactivate, c);
+ }
+
+ private void Deactivate(AddonComponent c)
+ {
+ c.ItemID = 0x1249;
+ }
+ }
+
+ public class IronMaidenDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public IronMaidenDeed() => LootType = LootType.Blessed;
+
+ public IronMaidenDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new IronMaidenAddon();
+ public override int LabelNumber => 1076288; // Iron Maiden
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/LargeFishingNet.cs b/Projects/UOContent/Items/Special/Heritage Items/LargeFishingNet.cs
index 30f608856..cc1c9c814 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/LargeFishingNet.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/LargeFishingNet.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0x3D8E, 0x3D8F)]
- public class LargeFishingNetComponent : AddonComponent
- {
- public LargeFishingNetComponent() : base(0x3D8E)
- {
- }
-
- public LargeFishingNetComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076285; // Large Fish Net
-
- 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();
- }
- }
-
- public class LargeFishingNetAddon : BaseAddon
- {
- [Constructible]
- public LargeFishingNetAddon()
- {
- AddComponent(new LargeFishingNetComponent(), 0, 0, 0);
- }
-
- public LargeFishingNetAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new LargeFishingNetDeed();
-
- 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();
- }
- }
-
- public class LargeFishingNetDeed : BaseAddonDeed
- {
- [Constructible]
- public LargeFishingNetDeed() => LootType = LootType.Blessed;
-
- public LargeFishingNetDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new LargeFishingNetAddon();
- public override int LabelNumber => 1076285; // Large Fish Net
-
- 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(0x3D8E, 0x3D8F)]
+ public class LargeFishingNetComponent : AddonComponent
+ {
+ public LargeFishingNetComponent() : base(0x3D8E)
+ {
+ }
+
+ public LargeFishingNetComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076285; // Large Fish Net
+
+ 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();
+ }
+ }
+
+ public class LargeFishingNetAddon : BaseAddon
+ {
+ [Constructible]
+ public LargeFishingNetAddon()
+ {
+ AddComponent(new LargeFishingNetComponent(), 0, 0, 0);
+ }
+
+ public LargeFishingNetAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new LargeFishingNetDeed();
+
+ 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();
+ }
+ }
+
+ public class LargeFishingNetDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public LargeFishingNetDeed() => LootType = LootType.Blessed;
+
+ public LargeFishingNetDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new LargeFishingNetAddon();
+ public override int LabelNumber => 1076285; // Large Fish Net
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/PeachTrunk.cs b/Projects/UOContent/Items/Special/Heritage Items/PeachTrunk.cs
index 67ecd5192..cbfd09639 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/PeachTrunk.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/PeachTrunk.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class PeachTrunkAddon : BaseAddon
- {
- [Constructible]
- public PeachTrunkAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xD9C, 1076786), 0, 0, 0);
- }
-
- public PeachTrunkAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new PeachTrunkDeed();
-
- 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();
- }
- }
-
- public class PeachTrunkDeed : BaseAddonDeed
- {
- [Constructible]
- public PeachTrunkDeed() => LootType = LootType.Blessed;
-
- public PeachTrunkDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new PeachTrunkAddon();
- public override int LabelNumber => 1076786; // Peach Trunk
-
- 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 PeachTrunkAddon : BaseAddon
+ {
+ [Constructible]
+ public PeachTrunkAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xD9C, 1076786), 0, 0, 0);
+ }
+
+ public PeachTrunkAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new PeachTrunkDeed();
+
+ 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();
+ }
+ }
+
+ public class PeachTrunkDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public PeachTrunkDeed() => LootType = LootType.Blessed;
+
+ public PeachTrunkDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new PeachTrunkAddon();
+ public override int LabelNumber => 1076786; // Peach Trunk
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/PinkFancyRug.cs b/Projects/UOContent/Items/Special/Heritage Items/PinkFancyRug.cs
index 16e61aee2..9f4a0930f 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/PinkFancyRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/PinkFancyRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class PinkFancyRugAddon : BaseAddon
- {
- [Constructible]
- public PinkFancyRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xAEE, 1076590), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAEF, 1076590), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF0, 1076590), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF1, 1076590), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF2, 1076590), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAF3, 1076590), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xAF4, 1076590), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAF5, 1076590), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAEC, 1076590), 0, 0, 0);
- }
-
- public PinkFancyRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new PinkFancyRugDeed();
-
- 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();
- }
- }
-
- public class PinkFancyRugDeed : BaseAddonDeed
- {
- [Constructible]
- public PinkFancyRugDeed() => LootType = LootType.Blessed;
-
- public PinkFancyRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new PinkFancyRugAddon();
- public override int LabelNumber => 1076590; // Pink fancy rug
-
- 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 PinkFancyRugAddon : BaseAddon
+ {
+ [Constructible]
+ public PinkFancyRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xAEE, 1076590), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAEF, 1076590), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF0, 1076590), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF1, 1076590), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF2, 1076590), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF3, 1076590), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF4, 1076590), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAF5, 1076590), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAEC, 1076590), 0, 0, 0);
+ }
+
+ public PinkFancyRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new PinkFancyRugDeed();
+
+ 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();
+ }
+ }
+
+ public class PinkFancyRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public PinkFancyRugDeed() => LootType = LootType.Blessed;
+
+ public PinkFancyRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new PinkFancyRugAddon();
+ public override int LabelNumber => 1076590; // Pink fancy rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/RedPlainRug.cs b/Projects/UOContent/Items/Special/Heritage Items/RedPlainRug.cs
index c4de401b0..fb84993f9 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/RedPlainRug.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/RedPlainRug.cs
@@ -1,66 +1,66 @@
-namespace Server.Items
-{
- public class RedPlainRugAddon : BaseAddon
- {
- [Constructible]
- public RedPlainRugAddon()
- {
- AddComponent(new LocalizedAddonComponent(0xAC9, 1076588), 1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xACA, 1076588), -1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xACB, 1076588), -1, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xACC, 1076588), 1, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xACD, 1076588), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xACE, 1076588), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xACF, 1076588), 1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xAD0, 1076588), 0, 1, 0);
- AddComponent(new LocalizedAddonComponent(0xAC6, 1076588), 0, 0, 0);
- }
-
- public RedPlainRugAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new RedPlainRugDeed();
-
- 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();
- }
- }
-
- public class RedPlainRugDeed : BaseAddonDeed
- {
- [Constructible]
- public RedPlainRugDeed() => LootType = LootType.Blessed;
-
- public RedPlainRugDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new RedPlainRugAddon();
- public override int LabelNumber => 1076588; // Red plain rug
-
- 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 RedPlainRugAddon : BaseAddon
+ {
+ [Constructible]
+ public RedPlainRugAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0xAC9, 1076588), 1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xACA, 1076588), -1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xACB, 1076588), -1, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xACC, 1076588), 1, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xACD, 1076588), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xACE, 1076588), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xACF, 1076588), 1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xAD0, 1076588), 0, 1, 0);
+ AddComponent(new LocalizedAddonComponent(0xAC6, 1076588), 0, 0, 0);
+ }
+
+ public RedPlainRugAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new RedPlainRugDeed();
+
+ 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();
+ }
+ }
+
+ public class RedPlainRugDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public RedPlainRugDeed() => LootType = LootType.Blessed;
+
+ public RedPlainRugDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new RedPlainRugAddon();
+ public override int LabelNumber => 1076588; // Red plain rug
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/Scarecrow.cs b/Projects/UOContent/Items/Special/Heritage Items/Scarecrow.cs
index 3f9ef591a..1a3ed9a3f 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/Scarecrow.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/Scarecrow.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0x1E34, 0x1E35)]
- public class ScarecrowComponent : AddonComponent
- {
- public ScarecrowComponent() : base(0x1E34)
- {
- }
-
- public ScarecrowComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076608; // Scarecrow
-
- 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();
- }
- }
-
- public class ScarecrowAddon : BaseAddon
- {
- [Constructible]
- public ScarecrowAddon()
- {
- AddComponent(new ScarecrowComponent(), 0, 0, 0);
- }
-
- public ScarecrowAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new ScarecrowDeed();
-
- 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();
- }
- }
-
- public class ScarecrowDeed : BaseAddonDeed
- {
- [Constructible]
- public ScarecrowDeed() => LootType = LootType.Blessed;
-
- public ScarecrowDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new ScarecrowAddon();
- public override int LabelNumber => 1076608; // Scarecrow
-
- 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(0x1E34, 0x1E35)]
+ public class ScarecrowComponent : AddonComponent
+ {
+ public ScarecrowComponent() : base(0x1E34)
+ {
+ }
+
+ public ScarecrowComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076608; // Scarecrow
+
+ 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();
+ }
+ }
+
+ public class ScarecrowAddon : BaseAddon
+ {
+ [Constructible]
+ public ScarecrowAddon()
+ {
+ AddComponent(new ScarecrowComponent(), 0, 0, 0);
+ }
+
+ public ScarecrowAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new ScarecrowDeed();
+
+ 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();
+ }
+ }
+
+ public class ScarecrowDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public ScarecrowDeed() => LootType = LootType.Blessed;
+
+ public ScarecrowDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new ScarecrowAddon();
+ public override int LabelNumber => 1076608; // Scarecrow
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/SmallFishingNet.cs b/Projects/UOContent/Items/Special/Heritage Items/SmallFishingNet.cs
index 047793531..9a7a2d639 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/SmallFishingNet.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/SmallFishingNet.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0x1EA3, 0x1EA4)]
- public class SmallFishingNetComponent : AddonComponent
- {
- public SmallFishingNetComponent() : base(0x1EA3)
- {
- }
-
- public SmallFishingNetComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076286; // Small Fish Net
-
- 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();
- }
- }
-
- public class SmallFishingNetAddon : BaseAddon
- {
- [Constructible]
- public SmallFishingNetAddon()
- {
- AddComponent(new SmallFishingNetComponent(), 0, 0, 0);
- }
-
- public SmallFishingNetAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new SmallFishingNetDeed();
-
- 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();
- }
- }
-
- public class SmallFishingNetDeed : BaseAddonDeed
- {
- [Constructible]
- public SmallFishingNetDeed() => LootType = LootType.Blessed;
-
- public SmallFishingNetDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new SmallFishingNetAddon();
- public override int LabelNumber => 1076286; // Small Fish Net
-
- 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(0x1EA3, 0x1EA4)]
+ public class SmallFishingNetComponent : AddonComponent
+ {
+ public SmallFishingNetComponent() : base(0x1EA3)
+ {
+ }
+
+ public SmallFishingNetComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076286; // Small Fish Net
+
+ 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();
+ }
+ }
+
+ public class SmallFishingNetAddon : BaseAddon
+ {
+ [Constructible]
+ public SmallFishingNetAddon()
+ {
+ AddComponent(new SmallFishingNetComponent(), 0, 0, 0);
+ }
+
+ public SmallFishingNetAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new SmallFishingNetDeed();
+
+ 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();
+ }
+ }
+
+ public class SmallFishingNetDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public SmallFishingNetDeed() => LootType = LootType.Blessed;
+
+ public SmallFishingNetDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new SmallFishingNetAddon();
+ public override int LabelNumber => 1076286; // Small Fish Net
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/Statue.cs b/Projects/UOContent/Items/Special/Heritage Items/Statue.cs
index c66fd356d..86bcdf60c 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/Statue.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/Statue.cs
@@ -1,129 +1,129 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class StoneStatueAddon : BaseAddon
- {
- [Constructible]
- public StoneStatueAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new LocalizedAddonComponent(0x139E, 1076284), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x139F, 1076284), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x13A0, 1076284), 0, -1, 0);
- }
- else // south
- {
- AddComponent(new LocalizedAddonComponent(0x129F, 1076284), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0x12A0, 1076284), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0x12A1, 1076284), -1, 0, 0);
- }
- }
-
- public StoneStatueAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new StoneStatueDeed();
-
- 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();
- }
- }
-
- public class StoneStatueDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public StoneStatueDeed() => LootType = LootType.Blessed;
-
- public StoneStatueDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new StoneStatueAddon(m_East);
- public override int LabelNumber => 1076284; // Statue
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly StoneStatueDeed m_Deed;
-
- public InternalGump(StoneStatueDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076579, 0x7FFF); // Please select your statue position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class StoneStatueAddon : BaseAddon
+ {
+ [Constructible]
+ public StoneStatueAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new LocalizedAddonComponent(0x139E, 1076284), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x139F, 1076284), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x13A0, 1076284), 0, -1, 0);
+ }
+ else // south
+ {
+ AddComponent(new LocalizedAddonComponent(0x129F, 1076284), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0x12A0, 1076284), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0x12A1, 1076284), -1, 0, 0);
+ }
+ }
+
+ public StoneStatueAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new StoneStatueDeed();
+
+ 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();
+ }
+ }
+
+ public class StoneStatueDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public StoneStatueDeed() => LootType = LootType.Blessed;
+
+ public StoneStatueDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new StoneStatueAddon(m_East);
+ public override int LabelNumber => 1076284; // Statue
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly StoneStatueDeed m_Deed;
+
+ public InternalGump(StoneStatueDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076579, 0x7FFF); // Please select your statue position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/SuitOfGoldArmor.cs b/Projects/UOContent/Items/Special/Heritage Items/SuitOfGoldArmor.cs
index bc7691ec7..404479c52 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/SuitOfGoldArmor.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/SuitOfGoldArmor.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0x3DAA, 0x3DA9)]
- public class SuitOfGoldArmorComponent : AddonComponent
- {
- public SuitOfGoldArmorComponent() : base(0x3DAA)
- {
- }
-
- public SuitOfGoldArmorComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076265; // Suit of Gold Armor
-
- 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();
- }
- }
-
- public class SuitOfGoldArmorAddon : BaseAddon
- {
- [Constructible]
- public SuitOfGoldArmorAddon()
- {
- AddComponent(new SuitOfGoldArmorComponent(), 0, 0, 0);
- }
-
- public SuitOfGoldArmorAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new SuitOfGoldArmorDeed();
-
- 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();
- }
- }
-
- public class SuitOfGoldArmorDeed : BaseAddonDeed
- {
- [Constructible]
- public SuitOfGoldArmorDeed() => LootType = LootType.Blessed;
-
- public SuitOfGoldArmorDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new SuitOfGoldArmorAddon();
- public override int LabelNumber => 1076265; // Suit of Gold Armor
-
- 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(0x3DAA, 0x3DA9)]
+ public class SuitOfGoldArmorComponent : AddonComponent
+ {
+ public SuitOfGoldArmorComponent() : base(0x3DAA)
+ {
+ }
+
+ public SuitOfGoldArmorComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076265; // Suit of Gold Armor
+
+ 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();
+ }
+ }
+
+ public class SuitOfGoldArmorAddon : BaseAddon
+ {
+ [Constructible]
+ public SuitOfGoldArmorAddon()
+ {
+ AddComponent(new SuitOfGoldArmorComponent(), 0, 0, 0);
+ }
+
+ public SuitOfGoldArmorAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new SuitOfGoldArmorDeed();
+
+ 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();
+ }
+ }
+
+ public class SuitOfGoldArmorDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public SuitOfGoldArmorDeed() => LootType = LootType.Blessed;
+
+ public SuitOfGoldArmorDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new SuitOfGoldArmorAddon();
+ public override int LabelNumber => 1076265; // Suit of Gold Armor
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/SuitOfSilverArmor.cs b/Projects/UOContent/Items/Special/Heritage Items/SuitOfSilverArmor.cs
index 79dcb1b6f..4964c86d3 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/SuitOfSilverArmor.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/SuitOfSilverArmor.cs
@@ -1,86 +1,86 @@
-namespace Server.Items
-{
- [Flippable(0x3D86, 0x3D87)]
- public class SuitOfSilverArmorComponent : AddonComponent
- {
- public SuitOfSilverArmorComponent() : base(0x3D86)
- {
- }
-
- public SuitOfSilverArmorComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076266; // Suit of Silver Armor
-
- 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();
- }
- }
-
- public class SuitOfSilverArmorAddon : BaseAddon
- {
- [Constructible]
- public SuitOfSilverArmorAddon()
- {
- AddComponent(new SuitOfSilverArmorComponent(), 0, 0, 0);
- }
-
- public SuitOfSilverArmorAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new SuitOfSilverArmorDeed();
-
- 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();
- }
- }
-
- public class SuitOfSilverArmorDeed : BaseAddonDeed
- {
- [Constructible]
- public SuitOfSilverArmorDeed() => LootType = LootType.Blessed;
-
- public SuitOfSilverArmorDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new SuitOfSilverArmorAddon();
- public override int LabelNumber => 1076266; // Suit of Silver Armor
-
- 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(0x3D86, 0x3D87)]
+ public class SuitOfSilverArmorComponent : AddonComponent
+ {
+ public SuitOfSilverArmorComponent() : base(0x3D86)
+ {
+ }
+
+ public SuitOfSilverArmorComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076266; // Suit of Silver Armor
+
+ 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();
+ }
+ }
+
+ public class SuitOfSilverArmorAddon : BaseAddon
+ {
+ [Constructible]
+ public SuitOfSilverArmorAddon()
+ {
+ AddComponent(new SuitOfSilverArmorComponent(), 0, 0, 0);
+ }
+
+ public SuitOfSilverArmorAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new SuitOfSilverArmorDeed();
+
+ 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();
+ }
+ }
+
+ public class SuitOfSilverArmorDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public SuitOfSilverArmorDeed() => LootType = LootType.Blessed;
+
+ public SuitOfSilverArmorDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new SuitOfSilverArmorAddon();
+ public override int LabelNumber => 1076266; // Suit of Silver Armor
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/TableWithBlueCloth.cs b/Projects/UOContent/Items/Special/Heritage Items/TableWithBlueCloth.cs
index 289f3729d..111b2b8c1 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/TableWithBlueCloth.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/TableWithBlueCloth.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class TableWithBlueClothAddon : BaseAddon
- {
- [Constructible]
- public TableWithBlueClothAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x118C, 1076276), 0, 0, 0);
- }
-
- public TableWithBlueClothAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new TableWithBlueClothDeed();
-
- 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();
- }
- }
-
- public class TableWithBlueClothDeed : BaseAddonDeed
- {
- [Constructible]
- public TableWithBlueClothDeed() => LootType = LootType.Blessed;
-
- public TableWithBlueClothDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new TableWithBlueClothAddon();
- public override int LabelNumber => 1076276; // Table With A Blue Tablecloth
-
- 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 TableWithBlueClothAddon : BaseAddon
+ {
+ [Constructible]
+ public TableWithBlueClothAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x118C, 1076276), 0, 0, 0);
+ }
+
+ public TableWithBlueClothAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new TableWithBlueClothDeed();
+
+ 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();
+ }
+ }
+
+ public class TableWithBlueClothDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public TableWithBlueClothDeed() => LootType = LootType.Blessed;
+
+ public TableWithBlueClothDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new TableWithBlueClothAddon();
+ public override int LabelNumber => 1076276; // Table With A Blue Tablecloth
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/TableWithOrangeCloth.cs b/Projects/UOContent/Items/Special/Heritage Items/TableWithOrangeCloth.cs
index 1130b6df6..69b4e906d 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/TableWithOrangeCloth.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/TableWithOrangeCloth.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class TableWithOrangeClothAddon : BaseAddon
- {
- [Constructible]
- public TableWithOrangeClothAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x118E, 1076278), 0, 0, 0);
- }
-
- public TableWithOrangeClothAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new TableWithOrangeClothDeed();
-
- 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();
- }
- }
-
- public class TableWithOrangeClothDeed : BaseAddonDeed
- {
- [Constructible]
- public TableWithOrangeClothDeed() => LootType = LootType.Blessed;
-
- public TableWithOrangeClothDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new TableWithOrangeClothAddon();
- public override int LabelNumber => 1076278; // Table With An Orange Tablecloth
-
- 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 TableWithOrangeClothAddon : BaseAddon
+ {
+ [Constructible]
+ public TableWithOrangeClothAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x118E, 1076278), 0, 0, 0);
+ }
+
+ public TableWithOrangeClothAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new TableWithOrangeClothDeed();
+
+ 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();
+ }
+ }
+
+ public class TableWithOrangeClothDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public TableWithOrangeClothDeed() => LootType = LootType.Blessed;
+
+ public TableWithOrangeClothDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new TableWithOrangeClothAddon();
+ public override int LabelNumber => 1076278; // Table With An Orange Tablecloth
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/TableWithPurpleCloth.cs b/Projects/UOContent/Items/Special/Heritage Items/TableWithPurpleCloth.cs
index e0bc26537..684bd9ccc 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/TableWithPurpleCloth.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/TableWithPurpleCloth.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class TableWithPurpleClothAddon : BaseAddon
- {
- [Constructible]
- public TableWithPurpleClothAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x118B, 1076275), 0, 0, 0);
- }
-
- public TableWithPurpleClothAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new TableWithPurpleClothDeed();
-
- 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();
- }
- }
-
- public class TableWithPurpleClothDeed : BaseAddonDeed
- {
- [Constructible]
- public TableWithPurpleClothDeed() => LootType = LootType.Blessed;
-
- public TableWithPurpleClothDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new TableWithPurpleClothAddon();
- public override int LabelNumber => 1076275; // Table With A Purple Tablecloth
-
- 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 TableWithPurpleClothAddon : BaseAddon
+ {
+ [Constructible]
+ public TableWithPurpleClothAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x118B, 1076275), 0, 0, 0);
+ }
+
+ public TableWithPurpleClothAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new TableWithPurpleClothDeed();
+
+ 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();
+ }
+ }
+
+ public class TableWithPurpleClothDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public TableWithPurpleClothDeed() => LootType = LootType.Blessed;
+
+ public TableWithPurpleClothDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new TableWithPurpleClothAddon();
+ public override int LabelNumber => 1076275; // Table With A Purple Tablecloth
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/TableWithRedCloth.cs b/Projects/UOContent/Items/Special/Heritage Items/TableWithRedCloth.cs
index 1fc6f3d28..0c49060b3 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/TableWithRedCloth.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/TableWithRedCloth.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class TableWithRedClothAddon : BaseAddon
- {
- [Constructible]
- public TableWithRedClothAddon()
- {
- AddComponent(new LocalizedAddonComponent(0x118D, 1076277), 0, 0, 0);
- }
-
- public TableWithRedClothAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new TableWithRedClothDeed();
-
- 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();
- }
- }
-
- public class TableWithRedClothDeed : BaseAddonDeed
- {
- [Constructible]
- public TableWithRedClothDeed() => LootType = LootType.Blessed;
-
- public TableWithRedClothDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new TableWithRedClothAddon();
- public override int LabelNumber => 1076277; // Table With A Red Tablecloth
-
- 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 TableWithRedClothAddon : BaseAddon
+ {
+ [Constructible]
+ public TableWithRedClothAddon()
+ {
+ AddComponent(new LocalizedAddonComponent(0x118D, 1076277), 0, 0, 0);
+ }
+
+ public TableWithRedClothAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new TableWithRedClothDeed();
+
+ 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();
+ }
+ }
+
+ public class TableWithRedClothDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public TableWithRedClothDeed() => LootType = LootType.Blessed;
+
+ public TableWithRedClothDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new TableWithRedClothAddon();
+ public override int LabelNumber => 1076277; // Table With A Red Tablecloth
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/UnmadeBed.cs b/Projects/UOContent/Items/Special/Heritage Items/UnmadeBed.cs
index 42a55f9ec..62fbcceae 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/UnmadeBed.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/UnmadeBed.cs
@@ -1,131 +1,131 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class UnmadeBedAddon : BaseAddon
- {
- [Constructible]
- public UnmadeBedAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new LocalizedAddonComponent(0xA8C, 1076279), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xA8D, 1076279), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xA90, 1076279), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xA91, 1076279), -1, -1, 0);
- }
- else // south
- {
- AddComponent(new LocalizedAddonComponent(0xDB0, 1076279), 0, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xDB1, 1076279), -1, 0, 0);
- AddComponent(new LocalizedAddonComponent(0xDB4, 1076279), 0, -1, 0);
- AddComponent(new LocalizedAddonComponent(0xDB5, 1076279), -1, -1, 0);
- }
- }
-
- public UnmadeBedAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new UnmadeBedDeed();
-
- 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();
- }
- }
-
- public class UnmadeBedDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public UnmadeBedDeed() => LootType = LootType.Blessed;
-
- public UnmadeBedDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new UnmadeBedAddon(m_East);
- public override int LabelNumber => 1076279; // Unmade Bed
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly UnmadeBedDeed m_Deed;
-
- public InternalGump(UnmadeBedDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076580, 0x7FFF); // Pleae select your unmade bed position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class UnmadeBedAddon : BaseAddon
+ {
+ [Constructible]
+ public UnmadeBedAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new LocalizedAddonComponent(0xA8C, 1076279), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xA8D, 1076279), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xA90, 1076279), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xA91, 1076279), -1, -1, 0);
+ }
+ else // south
+ {
+ AddComponent(new LocalizedAddonComponent(0xDB0, 1076279), 0, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xDB1, 1076279), -1, 0, 0);
+ AddComponent(new LocalizedAddonComponent(0xDB4, 1076279), 0, -1, 0);
+ AddComponent(new LocalizedAddonComponent(0xDB5, 1076279), -1, -1, 0);
+ }
+ }
+
+ public UnmadeBedAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new UnmadeBedDeed();
+
+ 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();
+ }
+ }
+
+ public class UnmadeBedDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public UnmadeBedDeed() => LootType = LootType.Blessed;
+
+ public UnmadeBedDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new UnmadeBedAddon(m_East);
+ public override int LabelNumber => 1076279; // Unmade Bed
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly UnmadeBedDeed m_Deed;
+
+ public InternalGump(UnmadeBedDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076580, 0x7FFF); // Pleae select your unmade bed position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/Vanity.cs b/Projects/UOContent/Items/Special/Heritage Items/Vanity.cs
index 5803f6c26..377104399 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/Vanity.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/Vanity.cs
@@ -1,124 +1,124 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class VanityAddon : BaseAddonContainer
- {
- [Constructible]
- public VanityAddon(bool east) : base(east ? 0xA44 : 0xA3C)
- {
- if (east) // east
- AddComponent(new AddonContainerComponent(0xA45), 0, -1, 0);
- else // south
- AddComponent(new AddonContainerComponent(0xA3D), -1, 0, 0);
- }
-
- public VanityAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonContainerDeed Deed => new VanityDeed();
- public override int LabelNumber => 1074027; // Vanity
- public override int DefaultGumpID => 0x51;
- public override int DefaultDropSound => 0x42;
-
- 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();
- }
- }
-
- public class VanityDeed : BaseAddonContainerDeed
- {
- private bool m_East;
-
- [Constructible]
- public VanityDeed() => LootType = LootType.Blessed;
-
- public VanityDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonContainer Addon => new VanityAddon(m_East);
- public override int LabelNumber => 1074027; // Vanity
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly VanityDeed m_Deed;
-
- public InternalGump(VanityDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076744, 0x7FFF); // Please select your vanity position.
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class VanityAddon : BaseAddonContainer
+ {
+ [Constructible]
+ public VanityAddon(bool east) : base(east ? 0xA44 : 0xA3C)
+ {
+ if (east) // east
+ AddComponent(new AddonContainerComponent(0xA45), 0, -1, 0);
+ else // south
+ AddComponent(new AddonContainerComponent(0xA3D), -1, 0, 0);
+ }
+
+ public VanityAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonContainerDeed Deed => new VanityDeed();
+ public override int LabelNumber => 1074027; // Vanity
+ public override int DefaultGumpID => 0x51;
+ public override int DefaultDropSound => 0x42;
+
+ 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();
+ }
+ }
+
+ public class VanityDeed : BaseAddonContainerDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public VanityDeed() => LootType = LootType.Blessed;
+
+ public VanityDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonContainer Addon => new VanityAddon(m_East);
+ public override int LabelNumber => 1074027; // Vanity
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly VanityDeed m_Deed;
+
+ public InternalGump(VanityDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076744, 0x7FFF); // Please select your vanity position.
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Heritage Items/WallTorch.cs b/Projects/UOContent/Items/Special/Heritage Items/WallTorch.cs
index 61fcaccfd..eb3d6d56f 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/WallTorch.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/WallTorch.cs
@@ -1,108 +1,108 @@
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x3D98, 0x3D94)]
- public class WallTorchComponent : AddonComponent
- {
- public WallTorchComponent() : base(0x3D98)
- {
- }
-
- public WallTorchComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076282; // Wall Torch
-
- public override void OnDoubleClick(Mobile from)
- {
- if (from.InRange(Location, 2))
- {
- ItemID = ItemID switch
- {
- 0x3D98 => 0x3D9B,
- 0x3D9B => 0x3D98,
- 0x3D94 => 0x3D97,
- 0x3D97 => 0x3D94,
- _ => ItemID
- };
-
- Effects.PlaySound(Location, Map, 0x3BE);
- }
- else
- {
- from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
- }
- }
-
- 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();
- }
- }
-
- public class WallTorchAddon : BaseAddon
- {
- public WallTorchAddon()
- {
- AddComponent(new WallTorchComponent(), 0, 0, 0);
- }
-
- public WallTorchAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new WallTorchDeed();
-
- 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();
- }
- }
-
- public class WallTorchDeed : BaseAddonDeed
- {
- [Constructible]
- public WallTorchDeed() => LootType = LootType.Blessed;
-
- public WallTorchDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new WallTorchAddon();
- public override int LabelNumber => 1076282; // Wall Torch
-
- 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();
- }
- }
+using Server.Network;
+
+namespace Server.Items
+{
+ [Flippable(0x3D98, 0x3D94)]
+ public class WallTorchComponent : AddonComponent
+ {
+ public WallTorchComponent() : base(0x3D98)
+ {
+ }
+
+ public WallTorchComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076282; // Wall Torch
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (from.InRange(Location, 2))
+ {
+ ItemID = ItemID switch
+ {
+ 0x3D98 => 0x3D9B,
+ 0x3D9B => 0x3D98,
+ 0x3D94 => 0x3D97,
+ 0x3D97 => 0x3D94,
+ _ => ItemID
+ };
+
+ Effects.PlaySound(Location, Map, 0x3BE);
+ }
+ else
+ {
+ from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
+ }
+ }
+
+ 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();
+ }
+ }
+
+ public class WallTorchAddon : BaseAddon
+ {
+ public WallTorchAddon()
+ {
+ AddComponent(new WallTorchComponent(), 0, 0, 0);
+ }
+
+ public WallTorchAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new WallTorchDeed();
+
+ 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();
+ }
+ }
+
+ public class WallTorchDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public WallTorchDeed() => LootType = LootType.Blessed;
+
+ public WallTorchDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new WallTorchAddon();
+ public override int LabelNumber => 1076282; // Wall Torch
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Heritage Items/WoodenCoffin.cs b/Projects/UOContent/Items/Special/Heritage Items/WoodenCoffin.cs
index e7a4071f6..90a82ae3a 100644
--- a/Projects/UOContent/Items/Special/Heritage Items/WoodenCoffin.cs
+++ b/Projects/UOContent/Items/Special/Heritage Items/WoodenCoffin.cs
@@ -1,156 +1,156 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class WoodenCoffinComponent : AddonComponent
- {
- public WoodenCoffinComponent(int itemID) : base(itemID)
- {
- }
-
- public WoodenCoffinComponent(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076274; // Coffin
-
- 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();
- }
- }
-
- public class WoodenCoffinAddon : BaseAddon
- {
- [Constructible]
- public WoodenCoffinAddon(bool east)
- {
- if (east) // east
- {
- AddComponent(new WoodenCoffinComponent(0x1C41), 0, 0, 0);
- AddComponent(new WoodenCoffinComponent(0x1C42), 1, 0, 0);
- AddComponent(new WoodenCoffinComponent(0x1C43), 2, 0, 0);
- }
- else // south
- {
- AddComponent(new WoodenCoffinComponent(0x1C4F), 0, 0, 0);
- AddComponent(new WoodenCoffinComponent(0x1C50), 0, 1, 0);
- AddComponent(new WoodenCoffinComponent(0x1C51), 0, 2, 0);
- }
- }
-
- public WoodenCoffinAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new WoodenCoffinDeed();
-
- 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();
- }
- }
-
- public class WoodenCoffinDeed : BaseAddonDeed
- {
- private bool m_East;
-
- [Constructible]
- public WoodenCoffinDeed() => LootType = LootType.Blessed;
-
- public WoodenCoffinDeed(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddon Addon => new WoodenCoffinAddon(m_East);
- public override int LabelNumber => 1076274; // Coffin
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- private void SendTarget(Mobile m)
- {
- base.OnDoubleClick(m);
- }
-
- 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 InternalGump : Gump
- {
- private readonly WoodenCoffinDeed m_Deed;
-
- public InternalGump(WoodenCoffinDeed deed) : base(60, 36)
- {
- m_Deed = deed;
-
- AddPage(0);
-
- AddBackground(0, 0, 273, 324, 0x13BE);
- AddImageTiled(10, 10, 253, 20, 0xA40);
- AddImageTiled(10, 40, 253, 244, 0xA40);
- AddImageTiled(10, 294, 253, 20, 0xA40);
- AddAlphaRegion(10, 10, 253, 304);
- AddButton(10, 294, 0xFB1, 0xFB2, 0);
- AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
- AddHtmlLocalized(14, 12, 273, 20, 1076748, 0x7FFF); // Please select your coffin position
-
- AddPage(1);
-
- AddButton(19, 49, 0x845, 0x846, 1);
- AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
- AddButton(19, 73, 0x845, 0x846, 2);
- AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false || info.ButtonID == 0)
- return;
-
- m_Deed.m_East = info.ButtonID != 1;
- m_Deed.SendTarget(sender.Mobile);
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class WoodenCoffinComponent : AddonComponent
+ {
+ public WoodenCoffinComponent(int itemID) : base(itemID)
+ {
+ }
+
+ public WoodenCoffinComponent(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076274; // Coffin
+
+ 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();
+ }
+ }
+
+ public class WoodenCoffinAddon : BaseAddon
+ {
+ [Constructible]
+ public WoodenCoffinAddon(bool east)
+ {
+ if (east) // east
+ {
+ AddComponent(new WoodenCoffinComponent(0x1C41), 0, 0, 0);
+ AddComponent(new WoodenCoffinComponent(0x1C42), 1, 0, 0);
+ AddComponent(new WoodenCoffinComponent(0x1C43), 2, 0, 0);
+ }
+ else // south
+ {
+ AddComponent(new WoodenCoffinComponent(0x1C4F), 0, 0, 0);
+ AddComponent(new WoodenCoffinComponent(0x1C50), 0, 1, 0);
+ AddComponent(new WoodenCoffinComponent(0x1C51), 0, 2, 0);
+ }
+ }
+
+ public WoodenCoffinAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new WoodenCoffinDeed();
+
+ 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();
+ }
+ }
+
+ public class WoodenCoffinDeed : BaseAddonDeed
+ {
+ private bool m_East;
+
+ [Constructible]
+ public WoodenCoffinDeed() => LootType = LootType.Blessed;
+
+ public WoodenCoffinDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddon Addon => new WoodenCoffinAddon(m_East);
+ public override int LabelNumber => 1076274; // Coffin
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ private void SendTarget(Mobile m)
+ {
+ base.OnDoubleClick(m);
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly WoodenCoffinDeed m_Deed;
+
+ public InternalGump(WoodenCoffinDeed deed) : base(60, 36)
+ {
+ m_Deed = deed;
+
+ AddPage(0);
+
+ AddBackground(0, 0, 273, 324, 0x13BE);
+ AddImageTiled(10, 10, 253, 20, 0xA40);
+ AddImageTiled(10, 40, 253, 244, 0xA40);
+ AddImageTiled(10, 294, 253, 20, 0xA40);
+ AddAlphaRegion(10, 10, 253, 304);
+ AddButton(10, 294, 0xFB1, 0xFB2, 0);
+ AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
+ AddHtmlLocalized(14, 12, 273, 20, 1076748, 0x7FFF); // Please select your coffin position
+
+ AddPage(1);
+
+ AddButton(19, 49, 0x845, 0x846, 1);
+ AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
+ AddButton(19, 73, 0x845, 0x846, 2);
+ AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false || info.ButtonID == 0)
+ return;
+
+ m_Deed.m_East = info.ButtonID != 1;
+ m_Deed.SendTarget(sender.Mobile);
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/HeritageToken.cs b/Projects/UOContent/Items/Special/HeritageToken.cs
index 5b9700b93..e5fddd7f8 100644
--- a/Projects/UOContent/Items/Special/HeritageToken.cs
+++ b/Projects/UOContent/Items/Special/HeritageToken.cs
@@ -1,58 +1,58 @@
-using Server.Gumps;
-
-namespace Server.Items
-{
- public interface ITokunoDyable
- {
- }
-
- public class HeritageToken : Item
- {
- [Constructible]
- public HeritageToken() : base(0x367A)
- {
- LootType = LootType.Blessed;
- Weight = 5.0;
- }
-
- public HeritageToken(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1076596; // A Heritage Token
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new HeritageTokenGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
- }
- }
-
- public override void GetProperties(ObjectPropertyList list)
- {
- base.GetProperties(list);
-
- list.Add(1070998, $"#{1076595}"); // Use this to redeem Your Heritage Items
- }
-
- 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();
- }
- }
+using Server.Gumps;
+
+namespace Server.Items
+{
+ public interface ITokunoDyable
+ {
+ }
+
+ public class HeritageToken : Item
+ {
+ [Constructible]
+ public HeritageToken() : base(0x367A)
+ {
+ LootType = LootType.Blessed;
+ Weight = 5.0;
+ }
+
+ public HeritageToken(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1076596; // A Heritage Token
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new HeritageTokenGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
+ }
+ }
+
+ public override void GetProperties(ObjectPropertyList list)
+ {
+ base.GetProperties(list);
+
+ list.Add(1070998, $"#{1076595}"); // Use this to redeem Your Heritage Items
+ }
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs b/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs
index 77bdacb2d..ca3401a8a 100644
--- a/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs
+++ b/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs
@@ -1,292 +1,292 @@
-using System.Collections.Generic;
-using Server.Multis;
-
-namespace Server.Items
-{
- public enum HolidayTreeType
- {
- Classic,
- Modern
- }
-
- public class HolidayTree : Item, IAddon
- {
- private List m_Components;
-
- public HolidayTree(Mobile from, HolidayTreeType type, Point3D loc) : base(1)
- {
- Movable = false;
- MoveToWorld(loc, from.Map);
-
- Placer = from;
- m_Components = new List();
-
- switch (type)
- {
- case HolidayTreeType.Classic:
- {
- ItemID = 0xCD7;
-
- AddItem(0, 0, 0, new TreeTrunk(this, 0xCD6));
-
- AddOrnament(0, 0, 2, 0xF22);
- AddOrnament(0, 0, 9, 0xF18);
- AddOrnament(0, 0, 15, 0xF20);
- AddOrnament(0, 0, 19, 0xF17);
- AddOrnament(0, 0, 20, 0xF24);
- AddOrnament(0, 0, 20, 0xF1F);
- AddOrnament(0, 0, 20, 0xF19);
- AddOrnament(0, 0, 21, 0xF1B);
- AddOrnament(0, 0, 28, 0xF2F);
- AddOrnament(0, 0, 30, 0xF23);
- AddOrnament(0, 0, 32, 0xF2A);
- AddOrnament(0, 0, 33, 0xF30);
- AddOrnament(0, 0, 34, 0xF29);
- AddOrnament(0, 1, 7, 0xF16);
- AddOrnament(0, 1, 7, 0xF1E);
- AddOrnament(0, 1, 12, 0xF0F);
- AddOrnament(0, 1, 13, 0xF13);
- AddOrnament(0, 1, 18, 0xF12);
- AddOrnament(0, 1, 19, 0xF15);
- AddOrnament(0, 1, 25, 0xF28);
- AddOrnament(0, 1, 29, 0xF1A);
- AddOrnament(0, 1, 37, 0xF2B);
- AddOrnament(1, 0, 13, 0xF10);
- AddOrnament(1, 0, 14, 0xF1C);
- AddOrnament(1, 0, 16, 0xF14);
- AddOrnament(1, 0, 17, 0xF26);
- AddOrnament(1, 0, 22, 0xF27);
-
- break;
- }
- case HolidayTreeType.Modern:
- {
- ItemID = 0x1B7E;
-
- AddOrnament(0, 0, 2, 0xF2F);
- AddOrnament(0, 0, 2, 0xF20);
- AddOrnament(0, 0, 2, 0xF22);
- AddOrnament(0, 0, 5, 0xF30);
- AddOrnament(0, 0, 5, 0xF15);
- AddOrnament(0, 0, 5, 0xF1F);
- AddOrnament(0, 0, 5, 0xF2B);
- AddOrnament(0, 0, 6, 0xF0F);
- AddOrnament(0, 0, 7, 0xF1E);
- AddOrnament(0, 0, 7, 0xF24);
- AddOrnament(0, 0, 8, 0xF29);
- AddOrnament(0, 0, 9, 0xF18);
- AddOrnament(0, 0, 14, 0xF1C);
- AddOrnament(0, 0, 15, 0xF13);
- AddOrnament(0, 0, 15, 0xF20);
- AddOrnament(0, 0, 16, 0xF26);
- AddOrnament(0, 0, 17, 0xF12);
- AddOrnament(0, 0, 18, 0xF17);
- AddOrnament(0, 0, 20, 0xF1B);
- AddOrnament(0, 0, 23, 0xF28);
- AddOrnament(0, 0, 25, 0xF18);
- AddOrnament(0, 0, 25, 0xF2A);
- AddOrnament(0, 1, 7, 0xF16);
-
- break;
- }
- }
- }
-
- public HolidayTree(Serial serial) : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public Mobile Placer { get; set; }
-
- public override int LabelNumber => 1041117; // a tree for the holidays
-
- public bool CouldFit(IPoint3D p, Map map) => map.CanFit((Point3D)p, 20);
-
- Item IAddon.Deed => new HolidayTreeDeed();
-
- public override void OnAfterDelete()
- {
- for (int i = 0; i < m_Components.Count; ++i)
- m_Components[i].Delete();
- }
-
- private void AddOrnament(int x, int y, int z, int itemID)
- {
- AddItem(x + 1, y + 1, z + 11, new Ornament(itemID));
- }
-
- private void AddItem(int x, int y, int z, Item item)
- {
- item.MoveToWorld(new Point3D(Location.X + x, Location.Y + y, Location.Z + z), Map);
-
- m_Components.Add(item);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(1); // version
-
- writer.Write(Placer);
-
- writer.Write(m_Components.Count);
-
- for (int i = 0; i < m_Components.Count; ++i)
- writer.Write(m_Components[i]);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 1:
- {
- Placer = reader.ReadMobile();
-
- goto case 0;
- }
- case 0:
- {
- int count = reader.ReadInt();
-
- m_Components = new List(count);
-
- for (int i = 0; i < count; ++i)
- {
- Item item = reader.ReadItem();
-
- if (item != null)
- m_Components.Add(item);
- }
-
- break;
- }
- }
-
- Timer.DelayCall(ValidatePlacement);
- }
-
- public void ValidatePlacement()
- {
- if (BaseHouse.FindHouseAt(this) == null)
- {
- HolidayTreeDeed deed = new HolidayTreeDeed();
- deed.MoveToWorld(Location, Map);
- Delete();
- }
- }
-
- public override void OnDoubleClick(Mobile from)
- {
- if (from.InRange(GetWorldLocation(), 1))
- {
- if (Placer == null || from == Placer || from.AccessLevel >= AccessLevel.GameMaster)
- {
- from.AddToBackpack(new HolidayTreeDeed());
-
- Delete();
-
- BaseHouse house = BaseHouse.FindHouseAt(this);
-
- if (house?.Addons.Contains(this) == true)
- house.Addons.Remove(this);
-
- from.SendLocalizedMessage(503393); // A deed for the tree has been placed in your backpack.
- }
- else
- {
- from.SendLocalizedMessage(503396); // You cannot take this tree down.
- }
- }
- else
- {
- from.SendLocalizedMessage(500446); // That is too far away.
- }
- }
-
- private class Ornament : Item
- {
- public Ornament(int itemID) : base(itemID) => Movable = false;
-
- public Ornament(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041118; // a tree ornament
-
- 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();
- }
- }
-
- private class TreeTrunk : Item
- {
- private HolidayTree m_Tree;
-
- public TreeTrunk(HolidayTree tree, int itemID) : base(itemID)
- {
- Movable = false;
- MoveToWorld(tree.Location, tree.Map);
-
- m_Tree = tree;
- }
-
- public TreeTrunk(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1041117; // a tree for the holidays
-
- public override void OnDoubleClick(Mobile from)
- {
- if (m_Tree?.Deleted == false)
- m_Tree.OnDoubleClick(from);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_Tree);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Tree = reader.ReadItem() as HolidayTree;
-
- if (m_Tree == null)
- Delete();
-
- break;
- }
- }
- }
- }
- }
-}
+using System.Collections.Generic;
+using Server.Multis;
+
+namespace Server.Items
+{
+ public enum HolidayTreeType
+ {
+ Classic,
+ Modern
+ }
+
+ public class HolidayTree : Item, IAddon
+ {
+ private List m_Components;
+
+ public HolidayTree(Mobile from, HolidayTreeType type, Point3D loc) : base(1)
+ {
+ Movable = false;
+ MoveToWorld(loc, from.Map);
+
+ Placer = from;
+ m_Components = new List();
+
+ switch (type)
+ {
+ case HolidayTreeType.Classic:
+ {
+ ItemID = 0xCD7;
+
+ AddItem(0, 0, 0, new TreeTrunk(this, 0xCD6));
+
+ AddOrnament(0, 0, 2, 0xF22);
+ AddOrnament(0, 0, 9, 0xF18);
+ AddOrnament(0, 0, 15, 0xF20);
+ AddOrnament(0, 0, 19, 0xF17);
+ AddOrnament(0, 0, 20, 0xF24);
+ AddOrnament(0, 0, 20, 0xF1F);
+ AddOrnament(0, 0, 20, 0xF19);
+ AddOrnament(0, 0, 21, 0xF1B);
+ AddOrnament(0, 0, 28, 0xF2F);
+ AddOrnament(0, 0, 30, 0xF23);
+ AddOrnament(0, 0, 32, 0xF2A);
+ AddOrnament(0, 0, 33, 0xF30);
+ AddOrnament(0, 0, 34, 0xF29);
+ AddOrnament(0, 1, 7, 0xF16);
+ AddOrnament(0, 1, 7, 0xF1E);
+ AddOrnament(0, 1, 12, 0xF0F);
+ AddOrnament(0, 1, 13, 0xF13);
+ AddOrnament(0, 1, 18, 0xF12);
+ AddOrnament(0, 1, 19, 0xF15);
+ AddOrnament(0, 1, 25, 0xF28);
+ AddOrnament(0, 1, 29, 0xF1A);
+ AddOrnament(0, 1, 37, 0xF2B);
+ AddOrnament(1, 0, 13, 0xF10);
+ AddOrnament(1, 0, 14, 0xF1C);
+ AddOrnament(1, 0, 16, 0xF14);
+ AddOrnament(1, 0, 17, 0xF26);
+ AddOrnament(1, 0, 22, 0xF27);
+
+ break;
+ }
+ case HolidayTreeType.Modern:
+ {
+ ItemID = 0x1B7E;
+
+ AddOrnament(0, 0, 2, 0xF2F);
+ AddOrnament(0, 0, 2, 0xF20);
+ AddOrnament(0, 0, 2, 0xF22);
+ AddOrnament(0, 0, 5, 0xF30);
+ AddOrnament(0, 0, 5, 0xF15);
+ AddOrnament(0, 0, 5, 0xF1F);
+ AddOrnament(0, 0, 5, 0xF2B);
+ AddOrnament(0, 0, 6, 0xF0F);
+ AddOrnament(0, 0, 7, 0xF1E);
+ AddOrnament(0, 0, 7, 0xF24);
+ AddOrnament(0, 0, 8, 0xF29);
+ AddOrnament(0, 0, 9, 0xF18);
+ AddOrnament(0, 0, 14, 0xF1C);
+ AddOrnament(0, 0, 15, 0xF13);
+ AddOrnament(0, 0, 15, 0xF20);
+ AddOrnament(0, 0, 16, 0xF26);
+ AddOrnament(0, 0, 17, 0xF12);
+ AddOrnament(0, 0, 18, 0xF17);
+ AddOrnament(0, 0, 20, 0xF1B);
+ AddOrnament(0, 0, 23, 0xF28);
+ AddOrnament(0, 0, 25, 0xF18);
+ AddOrnament(0, 0, 25, 0xF2A);
+ AddOrnament(0, 1, 7, 0xF16);
+
+ break;
+ }
+ }
+ }
+
+ public HolidayTree(Serial serial) : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public Mobile Placer { get; set; }
+
+ public override int LabelNumber => 1041117; // a tree for the holidays
+
+ public bool CouldFit(IPoint3D p, Map map) => map.CanFit((Point3D)p, 20);
+
+ Item IAddon.Deed => new HolidayTreeDeed();
+
+ public override void OnAfterDelete()
+ {
+ for (int i = 0; i < m_Components.Count; ++i)
+ m_Components[i].Delete();
+ }
+
+ private void AddOrnament(int x, int y, int z, int itemID)
+ {
+ AddItem(x + 1, y + 1, z + 11, new Ornament(itemID));
+ }
+
+ private void AddItem(int x, int y, int z, Item item)
+ {
+ item.MoveToWorld(new Point3D(Location.X + x, Location.Y + y, Location.Z + z), Map);
+
+ m_Components.Add(item);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(1); // version
+
+ writer.Write(Placer);
+
+ writer.Write(m_Components.Count);
+
+ for (int i = 0; i < m_Components.Count; ++i)
+ writer.Write(m_Components[i]);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 1:
+ {
+ Placer = reader.ReadMobile();
+
+ goto case 0;
+ }
+ case 0:
+ {
+ int count = reader.ReadInt();
+
+ m_Components = new List(count);
+
+ for (int i = 0; i < count; ++i)
+ {
+ Item item = reader.ReadItem();
+
+ if (item != null)
+ m_Components.Add(item);
+ }
+
+ break;
+ }
+ }
+
+ Timer.DelayCall(ValidatePlacement);
+ }
+
+ public void ValidatePlacement()
+ {
+ if (BaseHouse.FindHouseAt(this) == null)
+ {
+ HolidayTreeDeed deed = new HolidayTreeDeed();
+ deed.MoveToWorld(Location, Map);
+ Delete();
+ }
+ }
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (from.InRange(GetWorldLocation(), 1))
+ {
+ if (Placer == null || from == Placer || from.AccessLevel >= AccessLevel.GameMaster)
+ {
+ from.AddToBackpack(new HolidayTreeDeed());
+
+ Delete();
+
+ BaseHouse house = BaseHouse.FindHouseAt(this);
+
+ if (house?.Addons.Contains(this) == true)
+ house.Addons.Remove(this);
+
+ from.SendLocalizedMessage(503393); // A deed for the tree has been placed in your backpack.
+ }
+ else
+ {
+ from.SendLocalizedMessage(503396); // You cannot take this tree down.
+ }
+ }
+ else
+ {
+ from.SendLocalizedMessage(500446); // That is too far away.
+ }
+ }
+
+ private class Ornament : Item
+ {
+ public Ornament(int itemID) : base(itemID) => Movable = false;
+
+ public Ornament(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041118; // a tree ornament
+
+ 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();
+ }
+ }
+
+ private class TreeTrunk : Item
+ {
+ private HolidayTree m_Tree;
+
+ public TreeTrunk(HolidayTree tree, int itemID) : base(itemID)
+ {
+ Movable = false;
+ MoveToWorld(tree.Location, tree.Map);
+
+ m_Tree = tree;
+ }
+
+ public TreeTrunk(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041117; // a tree for the holidays
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (m_Tree?.Deleted == false)
+ m_Tree.OnDoubleClick(from);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_Tree);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Tree = reader.ReadItem() as HolidayTree;
+
+ if (m_Tree == null)
+ Delete();
+
+ break;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/GiftBox.cs b/Projects/UOContent/Items/Special/Holiday/GiftBox.cs
index b9c885560..7f4842344 100644
--- a/Projects/UOContent/Items/Special/Holiday/GiftBox.cs
+++ b/Projects/UOContent/Items/Special/Holiday/GiftBox.cs
@@ -1,37 +1,37 @@
-namespace Server.Items
-{
- [Furniture]
- [Flippable(0x232A, 0x232B)]
- public class GiftBox : BaseContainer
- {
- [Constructible]
- public GiftBox() : this(Utility.RandomDyedHue())
- {
- }
-
- [Constructible]
- public GiftBox(int hue) : base(Utility.Random(0x232A, 2))
- {
- Weight = 2.0;
- Hue = hue;
- }
-
- public GiftBox(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
+{
+ [Furniture]
+ [Flippable(0x232A, 0x232B)]
+ public class GiftBox : BaseContainer
+ {
+ [Constructible]
+ public GiftBox() : this(Utility.RandomDyedHue())
+ {
+ }
+
+ [Constructible]
+ public GiftBox(int hue) : base(Utility.Random(0x232A, 2))
+ {
+ Weight = 2.0;
+ Hue = hue;
+ }
+
+ public GiftBox(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/GingerBreadHouseDeed.cs b/Projects/UOContent/Items/Special/Holiday/GingerBreadHouseDeed.cs
index e168434b8..aac2c8c3e 100644
--- a/Projects/UOContent/Items/Special/Holiday/GingerBreadHouseDeed.cs
+++ b/Projects/UOContent/Items/Special/Holiday/GingerBreadHouseDeed.cs
@@ -1,62 +1,62 @@
-namespace Server.Items
-{
- public class GingerBreadHouseAddon : BaseAddon
- {
- public GingerBreadHouseAddon()
- {
- for (int i = 0x2be5; i < 0x2be8; i++)
- {
- LocalizedAddonComponent laoc = new LocalizedAddonComponent(i, 1077395); // Gingerbread House
- laoc.Light = LightType.SouthSmall;
- AddComponent(laoc, i == 0x2be5 ? -1 : 0, i == 0x2be7 ? -1 : 0, 0);
- }
- }
-
- public GingerBreadHouseAddon(Serial serial) : base(serial)
- {
- }
-
- public override BaseAddonDeed Deed => new GingerBreadHouseDeed();
-
- 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 GingerBreadHouseDeed : BaseAddonDeed
- {
- [Constructible]
- public GingerBreadHouseDeed()
- {
- Weight = 1.0;
- LootType = LootType.Blessed;
- }
-
- public GingerBreadHouseDeed(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber => 1077394; // a Gingerbread House Deed
- public override BaseAddon Addon => new GingerBreadHouseAddon();
-
- 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 GingerBreadHouseAddon : BaseAddon
+ {
+ public GingerBreadHouseAddon()
+ {
+ for (int i = 0x2be5; i < 0x2be8; i++)
+ {
+ LocalizedAddonComponent laoc = new LocalizedAddonComponent(i, 1077395); // Gingerbread House
+ laoc.Light = LightType.SouthSmall;
+ AddComponent(laoc, i == 0x2be5 ? -1 : 0, i == 0x2be7 ? -1 : 0, 0);
+ }
+ }
+
+ public GingerBreadHouseAddon(Serial serial) : base(serial)
+ {
+ }
+
+ public override BaseAddonDeed Deed => new GingerBreadHouseDeed();
+
+ 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 GingerBreadHouseDeed : BaseAddonDeed
+ {
+ [Constructible]
+ public GingerBreadHouseDeed()
+ {
+ Weight = 1.0;
+ LootType = LootType.Blessed;
+ }
+
+ public GingerBreadHouseDeed(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1077394; // a Gingerbread House Deed
+ public override BaseAddon Addon => new GingerBreadHouseAddon();
+
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs b/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs
index a6132002d..261d2f3f9 100644
--- a/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs
+++ b/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs
@@ -1,111 +1,111 @@
-namespace Server.Items
-{
- public class HolidayBell : Item
- {
- private static readonly string[] m_StaffNames =
- {
- "Adrick",
- "Alai",
- "Bulldoz",
- "Evocare",
- "FierY-iCe",
- "Greyburn",
- "Hanse",
- "Ignatz",
- "Jalek",
- "LadyMOI",
- "Lord Krum",
- "Malantus",
- "Nimrond",
- "Oaks",
- "Prophet",
- "Runesabre",
- "Sage",
- "Stellerex",
- "T-Bone",
- "Tajima",
- "Tyrant",
- "Vex"
- };
-
- private static readonly int[] m_Hues =
- {
- 0xA, 0x24, 0x42, 0x56, 0x1A, 0x4C, 0x3C, 0x60, 0x2E, 0x55, 0x23, 0x38, 0x482, 0x6, 0x10
- };
-
- private string m_Maker;
- private int m_SoundID;
-
- [Constructible]
- public HolidayBell()
- : this(m_StaffNames.RandomElement())
- {
- }
-
- [Constructible]
- public HolidayBell(string maker)
- : base(0x1C12)
- {
- m_Maker = maker;
-
- LootType = LootType.Blessed;
- Hue = m_Hues.RandomElement();
- SoundID = 0x0F5 + Utility.Random(14);
- }
-
- public HolidayBell(Serial serial)
- : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public int SoundID
- {
- get => m_SoundID;
- set
- {
- m_SoundID = value;
- InvalidateProperties();
- }
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public string Giver
- {
- get => m_Maker;
- set => m_Maker = value;
- }
-
- public override string DefaultName => $"A Holiday Bell From {Giver}";
-
- public override void OnDoubleClick(Mobile from)
- {
- if (!from.InRange(GetWorldLocation(), 2))
- from.SendLocalizedMessage(500446); // That is too far away.
- else from.PlaySound(m_SoundID);
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
-
- writer.Write(m_Maker);
-
- writer.WriteEncodedInt(m_SoundID);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- m_Maker = reader.ReadString();
- m_SoundID = reader.ReadEncodedInt();
-
- Utility.Intern(ref m_Maker);
- }
- }
-}
+namespace Server.Items
+{
+ public class HolidayBell : Item
+ {
+ private static readonly string[] m_StaffNames =
+ {
+ "Adrick",
+ "Alai",
+ "Bulldoz",
+ "Evocare",
+ "FierY-iCe",
+ "Greyburn",
+ "Hanse",
+ "Ignatz",
+ "Jalek",
+ "LadyMOI",
+ "Lord Krum",
+ "Malantus",
+ "Nimrond",
+ "Oaks",
+ "Prophet",
+ "Runesabre",
+ "Sage",
+ "Stellerex",
+ "T-Bone",
+ "Tajima",
+ "Tyrant",
+ "Vex"
+ };
+
+ private static readonly int[] m_Hues =
+ {
+ 0xA, 0x24, 0x42, 0x56, 0x1A, 0x4C, 0x3C, 0x60, 0x2E, 0x55, 0x23, 0x38, 0x482, 0x6, 0x10
+ };
+
+ private string m_Maker;
+ private int m_SoundID;
+
+ [Constructible]
+ public HolidayBell()
+ : this(m_StaffNames.RandomElement())
+ {
+ }
+
+ [Constructible]
+ public HolidayBell(string maker)
+ : base(0x1C12)
+ {
+ m_Maker = maker;
+
+ LootType = LootType.Blessed;
+ Hue = m_Hues.RandomElement();
+ SoundID = 0x0F5 + Utility.Random(14);
+ }
+
+ public HolidayBell(Serial serial)
+ : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public int SoundID
+ {
+ get => m_SoundID;
+ set
+ {
+ m_SoundID = value;
+ InvalidateProperties();
+ }
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public string Giver
+ {
+ get => m_Maker;
+ set => m_Maker = value;
+ }
+
+ public override string DefaultName => $"A Holiday Bell From {Giver}";
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (!from.InRange(GetWorldLocation(), 2))
+ from.SendLocalizedMessage(500446); // That is too far away.
+ else from.PlaySound(m_SoundID);
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+
+ writer.Write(m_Maker);
+
+ writer.WriteEncodedInt(m_SoundID);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ m_Maker = reader.ReadString();
+ m_SoundID = reader.ReadEncodedInt();
+
+ Utility.Intern(ref m_Maker);
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs b/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs
index 7fa9a4414..23e122cd0 100644
--- a/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs
+++ b/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs
@@ -1,162 +1,162 @@
-using System;
-using System.Collections.Generic;
-
-namespace Server.Items
-{
- public class CandyCane : Food
- {
- [Constructible]
- public CandyCane()
- : this(0x2bdd + Utility.Random(4))
- {
- }
-
- public CandyCane(int itemID) : base(itemID, 1)
- {
- Stackable = false;
- LootType = LootType.Blessed;
- }
-
- public CandyCane(Serial serial)
- : base(serial)
- {
- }
-
- private static readonly Dictionary m_ToothAches = new Dictionary();
-
- private static CandyCaneTimer EnsureTimer(Mobile from)
- {
- if (!m_ToothAches.TryGetValue(from, out CandyCaneTimer timer))
- m_ToothAches[from] = timer = new CandyCaneTimer(from);
-
- return timer;
- }
-
- public static int GetToothAche(Mobile from) => m_ToothAches.TryGetValue(from, out CandyCaneTimer timer) ? timer.Eaten : 0;
-
- public static void SetToothAche(Mobile from, int value)
- {
- EnsureTimer(from).Eaten = value;
- }
-
- public override bool CheckHunger(Mobile from)
- {
- EnsureTimer(from).Eaten += 32;
-
- from.SendLocalizedMessage(1077387); // You feel as if you could eat as much as you wanted!
- 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 class CandyCaneTimer : Timer
- {
- public CandyCaneTimer(Mobile eater)
- : base(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30))
- {
- Eater = eater;
- Priority = TimerPriority.FiveSeconds;
- Start();
- }
-
- public Mobile Eater { get; }
-
- public int Eaten { get; set; }
-
- protected override void OnTick()
- {
- --Eaten;
-
- if (Eater?.Deleted != false || Eaten <= 0)
- {
- Stop();
- m_ToothAches.Remove(Eater);
- }
- else if (Eater.Map != Map.Internal && Eater.Alive)
- {
- if (Eaten > 60)
- {
- Eater.Say(1077388 + Utility.Random(5));
-
- /* ARRGH! My tooth hurts sooo much!
- * You just can't find a good Britannian dentist these days...
- * My teeth!
- * MAKE IT STOP!
- * AAAH! It feels like someone kicked me in the teeth!
- */
-
- if (Utility.RandomBool() && Eater.Body.IsHuman && !Eater.Mounted)
- Eater.Animate(32, 5, 1, true, false, 0);
- }
- else if (Eaten == 60)
- {
- Eater.SendLocalizedMessage(1077393); // The extreme pain in your teeth subsides.
- }
- }
- }
- }
- }
-
- public class GingerBreadCookie : Food
- {
- private readonly int[] m_Messages =
- {
- 0,
- 1077396, // Noooo!
- 1077397, // Please don't eat me... *whimper*
- 1077405, // Not the face!
- 1077406, // Ahhhhhh! My foot�s gone!
- 1077407, // Please. No! I have gingerkids!
- 1077408, // No, no! I�m really made of poison. Really.
- 1077409 // Run, run as fast as you can! You can't catch me! I'm the gingerbread man!
- };
-
- [Constructible]
- public GingerBreadCookie()
- : base(Utility.RandomBool() ? 0x2be1 : 0x2be2, 1)
- {
- Stackable = false;
- LootType = LootType.Blessed;
- }
-
- public GingerBreadCookie(Serial serial)
- : base(serial)
- {
- }
-
- public override bool Eat(Mobile from)
- {
- int message = m_Messages.RandomElement();
-
- if (message != 0)
- {
- SendLocalizedMessageTo(from, message);
- return false;
- }
-
- return base.Eat(from);
- }
-
- 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 System;
+using System.Collections.Generic;
+
+namespace Server.Items
+{
+ public class CandyCane : Food
+ {
+ [Constructible]
+ public CandyCane()
+ : this(0x2bdd + Utility.Random(4))
+ {
+ }
+
+ public CandyCane(int itemID) : base(itemID, 1)
+ {
+ Stackable = false;
+ LootType = LootType.Blessed;
+ }
+
+ public CandyCane(Serial serial)
+ : base(serial)
+ {
+ }
+
+ private static readonly Dictionary m_ToothAches = new Dictionary();
+
+ private static CandyCaneTimer EnsureTimer(Mobile from)
+ {
+ if (!m_ToothAches.TryGetValue(from, out CandyCaneTimer timer))
+ m_ToothAches[from] = timer = new CandyCaneTimer(from);
+
+ return timer;
+ }
+
+ public static int GetToothAche(Mobile from) => m_ToothAches.TryGetValue(from, out CandyCaneTimer timer) ? timer.Eaten : 0;
+
+ public static void SetToothAche(Mobile from, int value)
+ {
+ EnsureTimer(from).Eaten = value;
+ }
+
+ public override bool CheckHunger(Mobile from)
+ {
+ EnsureTimer(from).Eaten += 32;
+
+ from.SendLocalizedMessage(1077387); // You feel as if you could eat as much as you wanted!
+ 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 class CandyCaneTimer : Timer
+ {
+ public CandyCaneTimer(Mobile eater)
+ : base(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30))
+ {
+ Eater = eater;
+ Priority = TimerPriority.FiveSeconds;
+ Start();
+ }
+
+ public Mobile Eater { get; }
+
+ public int Eaten { get; set; }
+
+ protected override void OnTick()
+ {
+ --Eaten;
+
+ if (Eater?.Deleted != false || Eaten <= 0)
+ {
+ Stop();
+ m_ToothAches.Remove(Eater);
+ }
+ else if (Eater.Map != Map.Internal && Eater.Alive)
+ {
+ if (Eaten > 60)
+ {
+ Eater.Say(1077388 + Utility.Random(5));
+
+ /* ARRGH! My tooth hurts sooo much!
+ * You just can't find a good Britannian dentist these days...
+ * My teeth!
+ * MAKE IT STOP!
+ * AAAH! It feels like someone kicked me in the teeth!
+ */
+
+ if (Utility.RandomBool() && Eater.Body.IsHuman && !Eater.Mounted)
+ Eater.Animate(32, 5, 1, true, false, 0);
+ }
+ else if (Eaten == 60)
+ {
+ Eater.SendLocalizedMessage(1077393); // The extreme pain in your teeth subsides.
+ }
+ }
+ }
+ }
+ }
+
+ public class GingerBreadCookie : Food
+ {
+ private readonly int[] m_Messages =
+ {
+ 0,
+ 1077396, // Noooo!
+ 1077397, // Please don't eat me... *whimper*
+ 1077405, // Not the face!
+ 1077406, // Ahhhhhh! My foot�s gone!
+ 1077407, // Please. No! I have gingerkids!
+ 1077408, // No, no! I�m really made of poison. Really.
+ 1077409 // Run, run as fast as you can! You can't catch me! I'm the gingerbread man!
+ };
+
+ [Constructible]
+ public GingerBreadCookie()
+ : base(Utility.RandomBool() ? 0x2be1 : 0x2be2, 1)
+ {
+ Stackable = false;
+ LootType = LootType.Blessed;
+ }
+
+ public GingerBreadCookie(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override bool Eat(Mobile from)
+ {
+ int message = m_Messages.RandomElement();
+
+ if (message != 0)
+ {
+ SendLocalizedMessageTo(from, message);
+ return false;
+ }
+
+ return base.Eat(from);
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs b/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs
index a52b65af1..fff1301de 100644
--- a/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs
+++ b/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs
@@ -1,208 +1,208 @@
-namespace Server.Items
-{
- public class GiftBoxHues
- {
- /* there's possibly a couple more, but this is what we could verify on OSI */
-
- private static readonly int[] m_NormalHues =
- {
- 0x672,
- 0x454,
- 0x507,
- 0x4ac,
- 0x504,
- 0x84b,
- 0x495,
- 0x97c,
- 0x493,
- 0x4a8,
- 0x494,
- 0x4aa,
- 0xb8b,
- 0x84f,
- 0x491,
- 0x851,
- 0x503,
- 0xb8c,
- 0x4ab,
- 0x84B
- };
-
- private static readonly int[] m_NeonHues =
- {
- 0x438,
- 0x424,
- 0x433,
- 0x445,
- 0x42b,
- 0x448
- };
-
- public static int RandomGiftBoxHue => m_NormalHues.RandomElement();
- public static int RandomNeonBoxHue => m_NeonHues.RandomElement();
- }
-
- [Flippable(0x46A5, 0x46A6)]
- public class GiftBoxRectangle : BaseContainer
- {
- [Constructible]
- public GiftBoxRectangle()
- : base(Utility.RandomBool() ? 0x46A5 : 0x46A6) =>
- Hue = GiftBoxHues.RandomGiftBoxHue;
-
- public GiftBoxRectangle(Serial serial)
- : base(serial)
- {
- }
-
- public override int DefaultGumpID => 0x11E;
-
- 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 GiftBoxCube : BaseContainer
- {
- [Constructible]
- public GiftBoxCube()
- : base(0x46A2) =>
- Hue = GiftBoxHues.RandomGiftBoxHue;
-
- public GiftBoxCube(Serial serial)
- : base(serial)
- {
- }
-
- public override int DefaultGumpID => 0x11B;
-
- 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 GiftBoxCylinder : BaseContainer
- {
- [Constructible]
- public GiftBoxCylinder()
- : base(0x46A3) =>
- Hue = GiftBoxHues.RandomGiftBoxHue;
-
- public GiftBoxCylinder(Serial serial)
- : base(serial)
- {
- }
-
- public override int DefaultGumpID => 0x11C;
-
- 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 GiftBoxOctogon : BaseContainer
- {
- [Constructible]
- public GiftBoxOctogon()
- : base(0x46A4) =>
- Hue = GiftBoxHues.RandomGiftBoxHue;
-
- public GiftBoxOctogon(Serial serial)
- : base(serial)
- {
- }
-
- public override int DefaultGumpID => 0x11D;
-
- 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 GiftBoxAngel : BaseContainer
- {
- [Constructible]
- public GiftBoxAngel()
- : base(0x46A7) =>
- Hue = GiftBoxHues.RandomGiftBoxHue;
-
- public GiftBoxAngel(Serial serial)
- : base(serial)
- {
- }
-
- public override int DefaultGumpID => 0x11F;
-
- 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(0x232A, 0x232B)]
- public class GiftBoxNeon : BaseContainer
- {
- [Constructible]
- public GiftBoxNeon()
- : base(Utility.RandomBool() ? 0x232A : 0x232B) =>
- Hue = GiftBoxHues.RandomNeonBoxHue;
-
- public GiftBoxNeon(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 GiftBoxHues
+ {
+ /* there's possibly a couple more, but this is what we could verify on OSI */
+
+ private static readonly int[] m_NormalHues =
+ {
+ 0x672,
+ 0x454,
+ 0x507,
+ 0x4ac,
+ 0x504,
+ 0x84b,
+ 0x495,
+ 0x97c,
+ 0x493,
+ 0x4a8,
+ 0x494,
+ 0x4aa,
+ 0xb8b,
+ 0x84f,
+ 0x491,
+ 0x851,
+ 0x503,
+ 0xb8c,
+ 0x4ab,
+ 0x84B
+ };
+
+ private static readonly int[] m_NeonHues =
+ {
+ 0x438,
+ 0x424,
+ 0x433,
+ 0x445,
+ 0x42b,
+ 0x448
+ };
+
+ public static int RandomGiftBoxHue => m_NormalHues.RandomElement();
+ public static int RandomNeonBoxHue => m_NeonHues.RandomElement();
+ }
+
+ [Flippable(0x46A5, 0x46A6)]
+ public class GiftBoxRectangle : BaseContainer
+ {
+ [Constructible]
+ public GiftBoxRectangle()
+ : base(Utility.RandomBool() ? 0x46A5 : 0x46A6) =>
+ Hue = GiftBoxHues.RandomGiftBoxHue;
+
+ public GiftBoxRectangle(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int DefaultGumpID => 0x11E;
+
+ 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 GiftBoxCube : BaseContainer
+ {
+ [Constructible]
+ public GiftBoxCube()
+ : base(0x46A2) =>
+ Hue = GiftBoxHues.RandomGiftBoxHue;
+
+ public GiftBoxCube(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int DefaultGumpID => 0x11B;
+
+ 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 GiftBoxCylinder : BaseContainer
+ {
+ [Constructible]
+ public GiftBoxCylinder()
+ : base(0x46A3) =>
+ Hue = GiftBoxHues.RandomGiftBoxHue;
+
+ public GiftBoxCylinder(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int DefaultGumpID => 0x11C;
+
+ 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 GiftBoxOctogon : BaseContainer
+ {
+ [Constructible]
+ public GiftBoxOctogon()
+ : base(0x46A4) =>
+ Hue = GiftBoxHues.RandomGiftBoxHue;
+
+ public GiftBoxOctogon(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int DefaultGumpID => 0x11D;
+
+ 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 GiftBoxAngel : BaseContainer
+ {
+ [Constructible]
+ public GiftBoxAngel()
+ : base(0x46A7) =>
+ Hue = GiftBoxHues.RandomGiftBoxHue;
+
+ public GiftBoxAngel(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int DefaultGumpID => 0x11F;
+
+ 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(0x232A, 0x232B)]
+ public class GiftBoxNeon : BaseContainer
+ {
+ [Constructible]
+ public GiftBoxNeon()
+ : base(Utility.RandomBool() ? 0x232A : 0x232B) =>
+ Hue = GiftBoxHues.RandomNeonBoxHue;
+
+ public GiftBoxNeon(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayPottedPlant.cs b/Projects/UOContent/Items/Special/Holiday/HolidayPottedPlant.cs
index 8018df4b1..228370329 100644
--- a/Projects/UOContent/Items/Special/Holiday/HolidayPottedPlant.cs
+++ b/Projects/UOContent/Items/Special/Holiday/HolidayPottedPlant.cs
@@ -1,151 +1,151 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- public class HolidayPottedPlant : Item
- {
- [Constructible]
- public HolidayPottedPlant()
- : this(Utility.RandomMinMax(0x11C8, 0x11CC))
- {
- }
-
- [Constructible]
- public HolidayPottedPlant(int itemID)
- : base(itemID)
- {
- }
-
- public HolidayPottedPlant(Serial serial)
- : base(serial)
- {
- }
-
- public override bool ForceShowProperties => ObjectPropertyList.Enabled;
-
- 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();
- }
- }
-
- public class PottedPlantDeed : Item
- {
- [Constructible]
- public PottedPlantDeed()
- : base(0x14F0) =>
- LootType = LootType.Blessed;
-
- public PottedPlantDeed(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1041114; // A deed for a potted plant.
- public override double DefaultWeight => 1.0;
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump();
- from.SendGump(new InternalGump(this));
- }
- else
- {
- from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
- }
- }
-
- 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 InternalGump : Gump
- {
- private readonly PottedPlantDeed m_Deed;
-
- public InternalGump(PottedPlantDeed deed) : base(100, 200)
- {
- m_Deed = deed;
-
- Closable = true;
- Disposable = true;
- Draggable = true;
- Resizable = false;
-
- AddPage(0);
- AddBackground(0, 0, 360, 195, 0xA28);
-
- AddPage(1);
- AddLabel(45, 15, 0, "Choose a Potted Plant:");
-
- AddItem(45, 75, 0x11C8);
- AddButton(55, 50, 0x845, 0x846, 1);
-
- AddItem(100, 75, 0x11C9);
- AddButton(115, 50, 0x845, 0x846, 2);
-
- AddItem(160, 75, 0x11CA);
- AddButton(175, 50, 0x845, 0x846, 3);
-
- AddItem(225, 75, 0x11CB);
- AddButton(235, 50, 0x845, 0x846, 4);
-
- AddItem(280, 75, 0x11CC);
- AddButton(295, 50, 0x845, 0x846, 5);
- }
-
- public override void OnResponse(NetState sender, RelayInfo info)
- {
- if (m_Deed?.Deleted != false)
- return;
-
- Mobile from = sender.Mobile;
-
- if (!m_Deed.IsChildOf(from.Backpack))
- {
- from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it
- return;
- }
-
- int index = info.ButtonID - 1;
-
- if (index >= 0 && index <= 4)
- {
- HolidayPottedPlant plant = new HolidayPottedPlant(0x11C8 + index);
-
- if (!from.PlaceInBackpack(plant))
- {
- plant.Delete();
- from.SendLocalizedMessage(1078837); // Your backpack is full! Please make room and try again.
- }
- else
- {
- m_Deed.Delete();
- }
- }
- }
- }
- }
-}
+using Server.Gumps;
+using Server.Network;
+
+namespace Server.Items
+{
+ public class HolidayPottedPlant : Item
+ {
+ [Constructible]
+ public HolidayPottedPlant()
+ : this(Utility.RandomMinMax(0x11C8, 0x11CC))
+ {
+ }
+
+ [Constructible]
+ public HolidayPottedPlant(int itemID)
+ : base(itemID)
+ {
+ }
+
+ public HolidayPottedPlant(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override bool ForceShowProperties => ObjectPropertyList.Enabled;
+
+ 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();
+ }
+ }
+
+ public class PottedPlantDeed : Item
+ {
+ [Constructible]
+ public PottedPlantDeed()
+ : base(0x14F0) =>
+ LootType = LootType.Blessed;
+
+ public PottedPlantDeed(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041114; // A deed for a potted plant.
+ public override double DefaultWeight => 1.0;
+
+ public override void OnDoubleClick(Mobile from)
+ {
+ if (IsChildOf(from.Backpack))
+ {
+ from.CloseGump();
+ from.SendGump(new InternalGump(this));
+ }
+ else
+ {
+ from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
+ }
+ }
+
+ 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 InternalGump : Gump
+ {
+ private readonly PottedPlantDeed m_Deed;
+
+ public InternalGump(PottedPlantDeed deed) : base(100, 200)
+ {
+ m_Deed = deed;
+
+ Closable = true;
+ Disposable = true;
+ Draggable = true;
+ Resizable = false;
+
+ AddPage(0);
+ AddBackground(0, 0, 360, 195, 0xA28);
+
+ AddPage(1);
+ AddLabel(45, 15, 0, "Choose a Potted Plant:");
+
+ AddItem(45, 75, 0x11C8);
+ AddButton(55, 50, 0x845, 0x846, 1);
+
+ AddItem(100, 75, 0x11C9);
+ AddButton(115, 50, 0x845, 0x846, 2);
+
+ AddItem(160, 75, 0x11CA);
+ AddButton(175, 50, 0x845, 0x846, 3);
+
+ AddItem(225, 75, 0x11CB);
+ AddButton(235, 50, 0x845, 0x846, 4);
+
+ AddItem(280, 75, 0x11CC);
+ AddButton(295, 50, 0x845, 0x846, 5);
+ }
+
+ public override void OnResponse(NetState sender, RelayInfo info)
+ {
+ if (m_Deed?.Deleted != false)
+ return;
+
+ Mobile from = sender.Mobile;
+
+ if (!m_Deed.IsChildOf(from.Backpack))
+ {
+ from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it
+ return;
+ }
+
+ int index = info.ButtonID - 1;
+
+ if (index >= 0 && index <= 4)
+ {
+ HolidayPottedPlant plant = new HolidayPottedPlant(0x11C8 + index);
+
+ if (!from.PlaceInBackpack(plant))
+ {
+ plant.Delete();
+ from.SendLocalizedMessage(1078837); // Your backpack is full! Please make room and try again.
+ }
+ else
+ {
+ m_Deed.Delete();
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayTimepiece.cs b/Projects/UOContent/Items/Special/Holiday/HolidayTimepiece.cs
index c151bb073..33899c151 100644
--- a/Projects/UOContent/Items/Special/Holiday/HolidayTimepiece.cs
+++ b/Projects/UOContent/Items/Special/Holiday/HolidayTimepiece.cs
@@ -1,36 +1,36 @@
-namespace Server.Items
-{
- public class HolidayTimepiece : Clock
- {
- [Constructible]
- public HolidayTimepiece()
- : base(0x1086)
- {
- Weight = DefaultWeight;
- LootType = LootType.Blessed;
- Layer = Layer.Bracelet;
- }
-
- public HolidayTimepiece(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1041113; // a holiday timepiece
- 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
+{
+ public class HolidayTimepiece : Clock
+ {
+ [Constructible]
+ public HolidayTimepiece()
+ : base(0x1086)
+ {
+ Weight = DefaultWeight;
+ LootType = LootType.Blessed;
+ Layer = Layer.Bracelet;
+ }
+
+ public HolidayTimepiece(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1041113; // a holiday timepiece
+ 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/Icecicles.cs b/Projects/UOContent/Items/Special/Holiday/Icecicles.cs
index 499ec3d66..54dc4cbf0 100644
--- a/Projects/UOContent/Items/Special/Holiday/Icecicles.cs
+++ b/Projects/UOContent/Items/Special/Holiday/Icecicles.cs
@@ -1,170 +1,170 @@
-namespace Server.Items
-{
- public class IcicleLargeSouth : Item
- {
- [Constructible]
- public IcicleLargeSouth()
- : base(0x4572)
- {
- }
-
- public IcicleLargeSouth(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 IcicleMedSouth : Item
- {
- [Constructible]
- public IcicleMedSouth()
- : base(0x4573)
- {
- }
-
- public IcicleMedSouth(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 IcicleSmallSouth : Item
- {
- [Constructible]
- public IcicleSmallSouth()
- : base(0x4574)
- {
- }
-
- public IcicleSmallSouth(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 IcicleLargeEast : Item
- {
- [Constructible]
- public IcicleLargeEast()
- : base(0x4575)
- {
- }
-
- public IcicleLargeEast(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 IcicleMedEast : Item
- {
- [Constructible]
- public IcicleMedEast()
- : base(0x4576)
- {
- }
-
- public IcicleMedEast(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 IcicleSmallEast : Item
- {
- [Constructible]
- public IcicleSmallEast()
- : base(0x4577)
- {
- }
-
- public IcicleSmallEast(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 IcicleLargeSouth : Item
+ {
+ [Constructible]
+ public IcicleLargeSouth()
+ : base(0x4572)
+ {
+ }
+
+ public IcicleLargeSouth(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 IcicleMedSouth : Item
+ {
+ [Constructible]
+ public IcicleMedSouth()
+ : base(0x4573)
+ {
+ }
+
+ public IcicleMedSouth(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 IcicleSmallSouth : Item
+ {
+ [Constructible]
+ public IcicleSmallSouth()
+ : base(0x4574)
+ {
+ }
+
+ public IcicleSmallSouth(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 IcicleLargeEast : Item
+ {
+ [Constructible]
+ public IcicleLargeEast()
+ : base(0x4575)
+ {
+ }
+
+ public IcicleLargeEast(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 IcicleMedEast : Item
+ {
+ [Constructible]
+ public IcicleMedEast()
+ : base(0x4576)
+ {
+ }
+
+ public IcicleMedEast(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 IcicleSmallEast : Item
+ {
+ [Constructible]
+ public IcicleSmallEast()
+ : base(0x4577)
+ {
+ }
+
+ public IcicleSmallEast(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/IcyPatch.cs b/Projects/UOContent/Items/Special/Holiday/IcyPatch.cs
index 0ae538619..c22a8a57a 100644
--- a/Projects/UOContent/Items/Special/Holiday/IcyPatch.cs
+++ b/Projects/UOContent/Items/Special/Holiday/IcyPatch.cs
@@ -1,110 +1,110 @@
-using System;
-using Server.Mobiles;
-using Server.Spells;
-
-namespace Server.Items
-{
- public class IcyPatch : Item
- {
- /* On OSI, the iceypatch with itemid 0x122a is "rarer", so we will give it 1:10 chance of creating it that way */
-
- [Constructible]
- public IcyPatch()
- : this(Utility.Random(10) == 0 ? 0x122A : 0x122F)
- {
- }
-
- public IcyPatch(int itemid)
- : base(itemid) =>
- Hue = 0x481;
-
- public IcyPatch(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1095159; // An Icy Patch
- public override double DefaultWeight => 5.0;
-
- public override bool OnMoveOver(Mobile m)
- {
- if (m is PlayerMobile && m.Alive && m.AccessLevel == AccessLevel.Player)
- switch (Utility.Random(3))
- {
- case 0:
- RunSequence(m, 1095160, false);
- break; // You steadily walk over the slippery surface.
- case 1:
- RunSequence(m, 1095161, true);
- break; // You skillfully manage to maintain your balance.
- default:
- RunSequence(m, 1095162, true);
- break; // You lose your footing and ungracefully splatter on the ground.
- }
- return base.OnMoveOver(m);
- }
-
- public virtual void RunSequence(Mobile m, int message, bool freeze)
- {
- if (freeze)
- {
- m.Frozen = true;
- Timer.DelayCall(TimeSpan.FromSeconds(message == 1095162 ? 2.0 : 1.25), EndFall_Callback, m);
- }
-
- m.SendLocalizedMessage(message);
-
- int action = 0;
- int sound = 0;
-
- if (message == 1095162)
- {
- if (m.Mounted)
- m.Mount.Rider = null;
-
- Point3D p = new Point3D(Location);
-
- if (SpellHelper.FindValidSpawnLocation(Map, ref p, true))
- Timer.DelayCall(TimeSpan.FromSeconds(0), m.MoveToWorld, p, m.Map);
-
- action = 21 + Utility.Random(2);
- sound = m.Female ? 0x317 : 0x426;
- }
- else if (message == 1095161)
- {
- action = 17;
- sound = m.Female ? 0x319 : 0x429;
- }
-
- if (action > 0)
- Timer.DelayCall(TimeSpan.FromSeconds(0.4), BeginFall_Callback, m, action, sound);
- }
-
- private static void BeginFall_Callback(Mobile m, int action, int sound)
- {
- if (!m.Mounted)
- m.Animate(action, 1, 1, false, true, 0);
-
- m.PlaySound(sound);
- }
-
- private static void EndFall_Callback(Mobile m)
- {
- m.Frozen = false;
- }
-
- 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();
- }
- }
-}
+using System;
+using Server.Mobiles;
+using Server.Spells;
+
+namespace Server.Items
+{
+ public class IcyPatch : Item
+ {
+ /* On OSI, the iceypatch with itemid 0x122a is "rarer", so we will give it 1:10 chance of creating it that way */
+
+ [Constructible]
+ public IcyPatch()
+ : this(Utility.Random(10) == 0 ? 0x122A : 0x122F)
+ {
+ }
+
+ public IcyPatch(int itemid)
+ : base(itemid) =>
+ Hue = 0x481;
+
+ public IcyPatch(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override int LabelNumber => 1095159; // An Icy Patch
+ public override double DefaultWeight => 5.0;
+
+ public override bool OnMoveOver(Mobile m)
+ {
+ if (m is PlayerMobile && m.Alive && m.AccessLevel == AccessLevel.Player)
+ switch (Utility.Random(3))
+ {
+ case 0:
+ RunSequence(m, 1095160, false);
+ break; // You steadily walk over the slippery surface.
+ case 1:
+ RunSequence(m, 1095161, true);
+ break; // You skillfully manage to maintain your balance.
+ default:
+ RunSequence(m, 1095162, true);
+ break; // You lose your footing and ungracefully splatter on the ground.
+ }
+ return base.OnMoveOver(m);
+ }
+
+ public virtual void RunSequence(Mobile m, int message, bool freeze)
+ {
+ if (freeze)
+ {
+ m.Frozen = true;
+ Timer.DelayCall(TimeSpan.FromSeconds(message == 1095162 ? 2.0 : 1.25), EndFall_Callback, m);
+ }
+
+ m.SendLocalizedMessage(message);
+
+ int action = 0;
+ int sound = 0;
+
+ if (message == 1095162)
+ {
+ if (m.Mounted)
+ m.Mount.Rider = null;
+
+ Point3D p = new Point3D(Location);
+
+ if (SpellHelper.FindValidSpawnLocation(Map, ref p, true))
+ Timer.DelayCall(TimeSpan.FromSeconds(0), m.MoveToWorld, p, m.Map);
+
+ action = 21 + Utility.Random(2);
+ sound = m.Female ? 0x317 : 0x426;
+ }
+ else if (message == 1095161)
+ {
+ action = 17;
+ sound = m.Female ? 0x319 : 0x429;
+ }
+
+ if (action > 0)
+ Timer.DelayCall(TimeSpan.FromSeconds(0.4), BeginFall_Callback, m, action, sound);
+ }
+
+ private static void BeginFall_Callback(Mobile m, int action, int sound)
+ {
+ if (!m.Mounted)
+ m.Animate(action, 1, 1, false, true, 0);
+
+ m.PlaySound(sound);
+ }
+
+ private static void EndFall_Callback(Mobile m)
+ {
+ m.Frozen = false;
+ }
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs b/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs
index 436e94d86..b432bf170 100644
--- a/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs
+++ b/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs
@@ -1,90 +1,90 @@
-namespace Server.Items
-{
- public class Coal : Item
- {
- [Constructible]
- public Coal() : base(0x19b9)
- {
- Stackable = false;
- LootType = LootType.Blessed;
- Hue = 0x965;
- }
-
- public Coal(Serial serial) : base(serial)
- {
- }
-
- public override string DefaultName => "Coal";
-
- 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 BadCard : Item
- {
- private static readonly int[] m_CardHues = { 0x45, 0x27, 0x3d0 };
-
- [Constructible]
- public BadCard() : base(0x14ef)
- {
- Hue = m_CardHues.RandomElement();
- Stackable = false;
- LootType = LootType.Blessed;
- Movable = true;
- }
-
- public BadCard(Serial serial) : base(serial)
- {
- }
-
- public override int LabelNumber // Maybe next year youll get a better...
- => 1041428;
-
- 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 Spam : Food
- {
- [Constructible]
- public Spam() : base(0x1044, 1)
- {
- Stackable = false;
- LootType = LootType.Blessed;
- }
-
- public Spam(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 Coal : Item
+ {
+ [Constructible]
+ public Coal() : base(0x19b9)
+ {
+ Stackable = false;
+ LootType = LootType.Blessed;
+ Hue = 0x965;
+ }
+
+ public Coal(Serial serial) : base(serial)
+ {
+ }
+
+ public override string DefaultName => "Coal";
+
+ 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 BadCard : Item
+ {
+ private static readonly int[] m_CardHues = { 0x45, 0x27, 0x3d0 };
+
+ [Constructible]
+ public BadCard() : base(0x14ef)
+ {
+ Hue = m_CardHues.RandomElement();
+ Stackable = false;
+ LootType = LootType.Blessed;
+ Movable = true;
+ }
+
+ public BadCard(Serial serial) : base(serial)
+ {
+ }
+
+ public override int LabelNumber // Maybe next year youll get a better...
+ => 1041428;
+
+ 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 Spam : Food
+ {
+ [Constructible]
+ public Spam() : base(0x1044, 1)
+ {
+ Stackable = false;
+ LootType = LootType.Blessed;
+ }
+
+ public Spam(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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/Poinsettias.cs b/Projects/UOContent/Items/Special/Holiday/Poinsettias.cs
index 710a6f948..dc8227ac5 100644
--- a/Projects/UOContent/Items/Special/Holiday/Poinsettias.cs
+++ b/Projects/UOContent/Items/Special/Holiday/Poinsettias.cs
@@ -1,58 +1,58 @@
-namespace Server.Items
-{
- public class RedPoinsettia : Item
- {
- [Constructible]
- public RedPoinsettia() : base(0x2330)
- {
- Weight = 1.0;
- LootType = LootType.Blessed;
- }
-
- public RedPoinsettia(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 WhitePoinsettia : Item
- {
- [Constructible]
- public WhitePoinsettia() : base(0x2331)
- {
- Weight = 1.0;
- LootType = LootType.Blessed;
- }
-
- public WhitePoinsettia(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 RedPoinsettia : Item
+ {
+ [Constructible]
+ public RedPoinsettia() : base(0x2330)
+ {
+ Weight = 1.0;
+ LootType = LootType.Blessed;
+ }
+
+ public RedPoinsettia(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 WhitePoinsettia : Item
+ {
+ [Constructible]
+ public WhitePoinsettia() : base(0x2331)
+ {
+ Weight = 1.0;
+ LootType = LootType.Blessed;
+ }
+
+ public WhitePoinsettia(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();
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/SnowGlobes.cs b/Projects/UOContent/Items/Special/Holiday/SnowGlobes.cs
index 7ad3598a3..bf9b571c4 100644
--- a/Projects/UOContent/Items/Special/Holiday/SnowGlobes.cs
+++ b/Projects/UOContent/Items/Special/Holiday/SnowGlobes.cs
@@ -1,311 +1,311 @@
-namespace Server.Items
-{
- public class SnowGlobe : Item
- {
- public SnowGlobe()
- : base(0xE2F)
- {
- LootType = LootType.Blessed;
- Light = LightType.Circle150;
- }
-
- public SnowGlobe(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();
- }
- }
-
- public enum SnowGlobeTypeOne
- {
- Britain,
- Moonglow,
- Minoc,
- Magincia,
- BuccaneersDen,
- Trinsic,
- Yew,
- SkaraBrae,
- Jhelom,
- Nujelm,
- Papua,
- Delucia,
- Cove,
- Ocllo,
- SerpentsHold,
- EmpathAbbey,
- TheLycaeum,
- Vesper,
- Wind
- }
-
- public class SnowGlobeOne : SnowGlobe
- {
- private SnowGlobeTypeOne m_Type;
-
- [Constructible]
- public SnowGlobeOne()
- : this((SnowGlobeTypeOne)Utility.Random(19))
- {
- }
-
- [Constructible]
- public SnowGlobeOne(SnowGlobeTypeOne type) => m_Type = type;
-
- public SnowGlobeOne(Serial serial)
- : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SnowGlobeTypeOne Place
- {
- get => m_Type;
- set
- {
- m_Type = value;
- InvalidateProperties();
- }
- }
-
- public override int LabelNumber => 1041454 + (int)m_Type;
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
- writer.WriteEncodedInt((int)m_Type);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Type = (SnowGlobeTypeOne)reader.ReadEncodedInt();
- break;
- }
- }
- }
- }
-
- public enum SnowGlobeTypeTwo
- {
- AncientCitadel,
- BlackthornesCastle,
- CityofMontor,
- CityofMistas,
- ExodusLair,
- LakeofFire,
- Lakeshire,
- PassofKarnaugh,
- TheEtherealFortress,
- TwinOaksTavern,
- ChaosShrine,
- ShrineofHumility,
- ShrineofSacrifice,
- ShrineofCompassion,
- ShrineofHonor,
- ShrineofHonesty,
- ShrineofSpirituality,
- ShrineofJustice,
- ShrineofValor
- }
-
- public class SnowGlobeTwo : SnowGlobe
- {
- /* Oddly, these are not localized. */
- private static readonly string[] m_PlaceNames =
- {
- /* AncientCitadel */ "Ancient Citadel",
- /* BlackthornesCastle */ "Blackthorne's Castle",
- /* CityofMontor */ "City of Montor",
- /* CityofMistas */ "City of Mistas",
- /* ExodusLair */ "Exodus' Lair",
- /* LakeofFire */ "Lake of Fire",
- /* Lakeshire */ "Lakeshire",
- /* PassofKarnaugh */ "Pass of Karnaugh",
- /* TheEtherealFortress */ "The Etheral Fortress",
- /* TwinOaksTavern */ "Twin Oaks Tavern",
- /* ChaosShrine */ "Chaos Shrine",
- /* ShrineofHumility */ "Shrine of Humility",
- /* ShrineofSacrifice */ "Shrine of Sacrifice",
- /* ShrineofCompassion */ "Shrine of Compassion",
- /* ShrineofHonor */ "Shrine of Honor",
- /* ShrineofHonesty */ "Shrine of Honesty",
- /* ShrineofSpirituality */ "Shrine of Spirituality",
- /* ShrineofJustice */ "Shrine of Justice",
- /* ShrineofValor */ "Shrine of Valor"
- };
-
- private SnowGlobeTypeTwo m_Type;
-
- [Constructible]
- public SnowGlobeTwo()
- : this((SnowGlobeTypeTwo)Utility.Random(19))
- {
- }
-
- [Constructible]
- public SnowGlobeTwo(SnowGlobeTypeTwo type) => m_Type = type;
-
- public SnowGlobeTwo(Serial serial)
- : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SnowGlobeTypeTwo Place
- {
- get => m_Type;
- set
- {
- m_Type = value;
- InvalidateProperties();
- }
- }
-
- public override string DefaultName
- {
- get
- {
- int idx = (int)m_Type;
-
- if (idx < 0 || idx >= m_PlaceNames.Length)
- return "a snowy scene";
-
- return $"a snowy scene of {m_PlaceNames[idx]}";
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
- writer.WriteEncodedInt((int)m_Type);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Type = (SnowGlobeTypeTwo)reader.ReadEncodedInt();
- break;
- }
- }
- }
- }
-
- public enum SnowGlobeTypeThree
- {
- Luna,
- Umbra,
- Zento,
- Heartwood,
- Covetous,
- Deceit,
- Destard,
- Hythloth,
- Khaldun,
- Shame,
- Wrong,
- Doom,
- TheCitadel,
- ThePalaceofParoxysmus,
- TheBlightedGrove,
- ThePrismofLight
- }
-
- public class SnowGlobeThree : SnowGlobe
- {
- private SnowGlobeTypeThree m_Type;
-
- [Constructible]
- public SnowGlobeThree()
- : this((SnowGlobeTypeThree)Utility.Random(16))
- {
- }
-
- [Constructible]
- public SnowGlobeThree(SnowGlobeTypeThree type) => m_Type = type;
-
- public SnowGlobeThree(Serial serial)
- : base(serial)
- {
- }
-
- [CommandProperty(AccessLevel.GameMaster)]
- public SnowGlobeTypeThree Place
- {
- get => m_Type;
- set
- {
- m_Type = value;
- InvalidateProperties();
- }
- }
-
- public override int LabelNumber
- {
- get
- {
- if (m_Type >= SnowGlobeTypeThree.Covetous)
- return 1075440 + ((int)m_Type - 4);
-
- return 1075294 + (int)m_Type;
- }
- }
-
- public override void Serialize(IGenericWriter writer)
- {
- base.Serialize(writer);
-
- writer.Write(0); // version
- writer.WriteEncodedInt((int)m_Type);
- }
-
- public override void Deserialize(IGenericReader reader)
- {
- base.Deserialize(reader);
-
- int version = reader.ReadInt();
-
- switch (version)
- {
- case 0:
- {
- m_Type = (SnowGlobeTypeThree)reader.ReadEncodedInt();
- break;
- }
- }
- }
- }
+namespace Server.Items
+{
+ public class SnowGlobe : Item
+ {
+ public SnowGlobe()
+ : base(0xE2F)
+ {
+ LootType = LootType.Blessed;
+ Light = LightType.Circle150;
+ }
+
+ public SnowGlobe(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();
+ }
+ }
+
+ public enum SnowGlobeTypeOne
+ {
+ Britain,
+ Moonglow,
+ Minoc,
+ Magincia,
+ BuccaneersDen,
+ Trinsic,
+ Yew,
+ SkaraBrae,
+ Jhelom,
+ Nujelm,
+ Papua,
+ Delucia,
+ Cove,
+ Ocllo,
+ SerpentsHold,
+ EmpathAbbey,
+ TheLycaeum,
+ Vesper,
+ Wind
+ }
+
+ public class SnowGlobeOne : SnowGlobe
+ {
+ private SnowGlobeTypeOne m_Type;
+
+ [Constructible]
+ public SnowGlobeOne()
+ : this((SnowGlobeTypeOne)Utility.Random(19))
+ {
+ }
+
+ [Constructible]
+ public SnowGlobeOne(SnowGlobeTypeOne type) => m_Type = type;
+
+ public SnowGlobeOne(Serial serial)
+ : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SnowGlobeTypeOne Place
+ {
+ get => m_Type;
+ set
+ {
+ m_Type = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override int LabelNumber => 1041454 + (int)m_Type;
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+ writer.WriteEncodedInt((int)m_Type);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Type = (SnowGlobeTypeOne)reader.ReadEncodedInt();
+ break;
+ }
+ }
+ }
+ }
+
+ public enum SnowGlobeTypeTwo
+ {
+ AncientCitadel,
+ BlackthornesCastle,
+ CityofMontor,
+ CityofMistas,
+ ExodusLair,
+ LakeofFire,
+ Lakeshire,
+ PassofKarnaugh,
+ TheEtherealFortress,
+ TwinOaksTavern,
+ ChaosShrine,
+ ShrineofHumility,
+ ShrineofSacrifice,
+ ShrineofCompassion,
+ ShrineofHonor,
+ ShrineofHonesty,
+ ShrineofSpirituality,
+ ShrineofJustice,
+ ShrineofValor
+ }
+
+ public class SnowGlobeTwo : SnowGlobe
+ {
+ /* Oddly, these are not localized. */
+ private static readonly string[] m_PlaceNames =
+ {
+ /* AncientCitadel */ "Ancient Citadel",
+ /* BlackthornesCastle */ "Blackthorne's Castle",
+ /* CityofMontor */ "City of Montor",
+ /* CityofMistas */ "City of Mistas",
+ /* ExodusLair */ "Exodus' Lair",
+ /* LakeofFire */ "Lake of Fire",
+ /* Lakeshire */ "Lakeshire",
+ /* PassofKarnaugh */ "Pass of Karnaugh",
+ /* TheEtherealFortress */ "The Etheral Fortress",
+ /* TwinOaksTavern */ "Twin Oaks Tavern",
+ /* ChaosShrine */ "Chaos Shrine",
+ /* ShrineofHumility */ "Shrine of Humility",
+ /* ShrineofSacrifice */ "Shrine of Sacrifice",
+ /* ShrineofCompassion */ "Shrine of Compassion",
+ /* ShrineofHonor */ "Shrine of Honor",
+ /* ShrineofHonesty */ "Shrine of Honesty",
+ /* ShrineofSpirituality */ "Shrine of Spirituality",
+ /* ShrineofJustice */ "Shrine of Justice",
+ /* ShrineofValor */ "Shrine of Valor"
+ };
+
+ private SnowGlobeTypeTwo m_Type;
+
+ [Constructible]
+ public SnowGlobeTwo()
+ : this((SnowGlobeTypeTwo)Utility.Random(19))
+ {
+ }
+
+ [Constructible]
+ public SnowGlobeTwo(SnowGlobeTypeTwo type) => m_Type = type;
+
+ public SnowGlobeTwo(Serial serial)
+ : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SnowGlobeTypeTwo Place
+ {
+ get => m_Type;
+ set
+ {
+ m_Type = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override string DefaultName
+ {
+ get
+ {
+ int idx = (int)m_Type;
+
+ if (idx < 0 || idx >= m_PlaceNames.Length)
+ return "a snowy scene";
+
+ return $"a snowy scene of {m_PlaceNames[idx]}";
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+ writer.WriteEncodedInt((int)m_Type);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Type = (SnowGlobeTypeTwo)reader.ReadEncodedInt();
+ break;
+ }
+ }
+ }
+ }
+
+ public enum SnowGlobeTypeThree
+ {
+ Luna,
+ Umbra,
+ Zento,
+ Heartwood,
+ Covetous,
+ Deceit,
+ Destard,
+ Hythloth,
+ Khaldun,
+ Shame,
+ Wrong,
+ Doom,
+ TheCitadel,
+ ThePalaceofParoxysmus,
+ TheBlightedGrove,
+ ThePrismofLight
+ }
+
+ public class SnowGlobeThree : SnowGlobe
+ {
+ private SnowGlobeTypeThree m_Type;
+
+ [Constructible]
+ public SnowGlobeThree()
+ : this((SnowGlobeTypeThree)Utility.Random(16))
+ {
+ }
+
+ [Constructible]
+ public SnowGlobeThree(SnowGlobeTypeThree type) => m_Type = type;
+
+ public SnowGlobeThree(Serial serial)
+ : base(serial)
+ {
+ }
+
+ [CommandProperty(AccessLevel.GameMaster)]
+ public SnowGlobeTypeThree Place
+ {
+ get => m_Type;
+ set
+ {
+ m_Type = value;
+ InvalidateProperties();
+ }
+ }
+
+ public override int LabelNumber
+ {
+ get
+ {
+ if (m_Type >= SnowGlobeTypeThree.Covetous)
+ return 1075440 + ((int)m_Type - 4);
+
+ return 1075294 + (int)m_Type;
+ }
+ }
+
+ public override void Serialize(IGenericWriter writer)
+ {
+ base.Serialize(writer);
+
+ writer.Write(0); // version
+ writer.WriteEncodedInt((int)m_Type);
+ }
+
+ public override void Deserialize(IGenericReader reader)
+ {
+ base.Deserialize(reader);
+
+ int version = reader.ReadInt();
+
+ switch (version)
+ {
+ case 0:
+ {
+ m_Type = (SnowGlobeTypeThree)reader.ReadEncodedInt();
+ break;
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs b/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs
index 112622263..9181bd87d 100644
--- a/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs
+++ b/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs
@@ -1,40 +1,40 @@
-namespace Server.Items
-{
- public class SnowPileDeco : Item
- {
- private static readonly int[] m_Types = { 0x8E2, 0x8E0, 0x8E6, 0x8E5, 0x8E3 };
-
- [Constructible]
- public SnowPileDeco()
- : this(m_Types.RandomElement())
- {
- }
-
- [Constructible]
- public SnowPileDeco(int itemid)
- : base(itemid) =>
- Hue = 0x481;
-
- public SnowPileDeco(Serial serial)
- : base(serial)
- {
- }
-
- public override string DefaultName => "Snow Pile";
- public override double DefaultWeight => 2.0;
-
- 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 SnowPileDeco : Item
+ {
+ private static readonly int[] m_Types = { 0x8E2, 0x8E0, 0x8E6, 0x8E5, 0x8E3 };
+
+ [Constructible]
+ public SnowPileDeco()
+ : this(m_Types.RandomElement())
+ {
+ }
+
+ [Constructible]
+ public SnowPileDeco(int itemid)
+ : base(itemid) =>
+ Hue = 0x481;
+
+ public SnowPileDeco(Serial serial)
+ : base(serial)
+ {
+ }
+
+ public override string DefaultName => "Snow Pile";
+ public override double DefaultWeight => 2.0;
+
+ 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();
+ }
+ }
+}
diff --git a/Projects/UOContent/Items/Special/Holiday/SnowStatue.cs b/Projects/UOContent/Items/Special/Holiday/SnowStatue.cs
index c02856648..50d0ac3d9 100644
--- a/Projects/UOContent/Items/Special/Holiday/SnowStatue.cs
+++ b/Projects/UOContent/Items/Special/Holiday/SnowStatue.cs
@@ -1,249 +1,249 @@
-using Server.Gumps;
-using Server.Network;
-
-namespace Server.Items
-{
- [Flippable(0x456E, 0x456F)]
- public class SnowStatuePegasus : Item
- {
- [Constructible]
- public SnowStatuePegasus()
- : base(0x456E)
- {
- }
-
- public SnowStatuePegasus(Serial serial)
- : base(serial)
- {
- }
-
- public override bool ForceShowProperties => ObjectPropertyList.Enabled;
-
- 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();
- }
- }
-
- [Flippable(0x4578, 0x4579)]
- public class SnowStatueSeahorse : Item
- {
- [Constructible]
- public SnowStatueSeahorse()
- : base(0x4578)
- {
- }
-
- public SnowStatueSeahorse(Serial serial)
- : base(serial)
- {
- }
-
- public override bool ForceShowProperties => ObjectPropertyList.Enabled;
-
- 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();
- }
- }
-
- [Flippable(0x457A, 0x457B)]
- public class SnowStatueMermaid : Item
- {
- [Constructible]
- public SnowStatueMermaid()
- : base(0x457A)
- {
- }
-
- public SnowStatueMermaid(Serial serial)
- : base(serial)
- {
- }
-
- public override bool ForceShowProperties => ObjectPropertyList.Enabled;
-
- 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();
- }
- }
-
- [Flippable(0x457C, 0x457D)]
- public class SnowStatueGriffon : Item
- {
- [Constructible]
- public SnowStatueGriffon()
- : base(0x457C)
- {
- }
-
- public SnowStatueGriffon(Serial serial)
- : base(serial)
- {
- }
-
- public override bool ForceShowProperties => ObjectPropertyList.Enabled;
-
- 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();
- }
- }
-
- public class SnowStatueDeed : Item
- {
- [Constructible]
- public SnowStatueDeed()
- : base(0x14F0) =>
- LootType = LootType.Blessed;
-
- public SnowStatueDeed(Serial serial)
- : base(serial)
- {
- }
-
- public override int LabelNumber => 1114296; // snow statue deed
- public override double DefaultWeight => 1.0;
-
- public override void OnDoubleClick(Mobile from)
- {
- if (IsChildOf(from.Backpack))
- {
- from.CloseGump