Updates formatting rules (#199)
This commit is contained in:
parent
8caf5a422f
commit
1f651992d7
1752 changed files with 203904 additions and 203367 deletions
243
.editorconfig
243
.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
|
||||
|
|
|
|||
8
.gitattributes
vendored
Normal file
8
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
* text=auto
|
||||
*.cs text diff=csharp
|
||||
*.json text diff=json
|
||||
*.sln text eol=crlf
|
||||
*.csproj text eol=crlf
|
||||
*.bat text eol=crlf
|
||||
*.sh text eol=lf
|
||||
publish.cmd text eol=lf
|
||||
|
|
@ -1,20 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Authors>Kamron Batman</Authors>
|
||||
<Company>ModernUO</Company>
|
||||
<Copyright>2019-2020</Copyright>
|
||||
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
|
||||
<Platforms>x64</Platforms>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>8.0</LangVersion>
|
||||
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith('win'))">WINDOWS</DefineConstants>
|
||||
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith(`win`)) != true">UNIX</DefineConstants>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||
<RestoreLockedMode>true</RestoreLockedMode>
|
||||
<NoWarn>NU1603</NoWarn>
|
||||
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
|
||||
<RuntimeIdentifiers>win-x64;debian.10-x64;debian.9-x64;ubuntu.16.04-x64;ubuntu.18.04-x64;ubuntu.20.04-x64;centos.7-x64;centos.8-x64;osx-x64</RuntimeIdentifiers>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<Authors>Kamron Batman</Authors>
|
||||
<Company>ModernUO</Company>
|
||||
<Copyright>2019-2020</Copyright>
|
||||
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
|
||||
<Platforms>x64</Platforms>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>8.0</LangVersion>
|
||||
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith('win'))">WINDOWS</DefineConstants>
|
||||
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith(`win`)) != true">UNIX</DefineConstants>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||
<RestoreLockedMode>true</RestoreLockedMode>
|
||||
<NoWarn>NU1603</NoWarn>
|
||||
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
|
||||
<RuntimeIdentifiers>win-x64;debian.10-x64;debian.9-x64;ubuntu.16.04-x64;ubuntu.18.04-x64;ubuntu.20.04-x64;centos.7-x64;centos.8-x64;osx-x64</RuntimeIdentifiers>
|
||||
<Configurations>Debug;Release;Analyze</Configurations>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(Configuration)'=='Analyze'">
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.205" PrivateAssets="all" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers">
|
||||
<Version>3.0.0</Version>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<AdditionalFiles Include=".\stylecop.json" />
|
||||
<AdditionalFiles Include=".\Rules.ruleset" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,203 +1,202 @@
|
|||
/***************************************************************************
|
||||
* AggressorInfo.cs
|
||||
* -------------------
|
||||
* begin : May 1, 2002
|
||||
* copyright : (C) The RunUO Software Team
|
||||
* email : info@runuo.com
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
namespace Server
|
||||
{
|
||||
public class AggressorInfo
|
||||
{
|
||||
private static readonly Queue<AggressorInfo> m_Pool = new Queue<AggressorInfo>();
|
||||
private Mobile m_Attacker, m_Defender;
|
||||
private bool m_CanReportMurder;
|
||||
private bool m_CriminalAggression;
|
||||
private DateTime m_LastCombatTime;
|
||||
|
||||
private bool m_Queued;
|
||||
private bool m_Reported;
|
||||
|
||||
private AggressorInfo(Mobile attacker, Mobile defender, bool criminal)
|
||||
{
|
||||
m_Attacker = attacker;
|
||||
m_Defender = defender;
|
||||
|
||||
m_CanReportMurder = criminal;
|
||||
m_CriminalAggression = criminal;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public static TimeSpan ExpireDelay { get; set; } = TimeSpan.FromMinutes(2.0);
|
||||
|
||||
public bool Expired
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Attacker.Deleted || m_Defender.Deleted || DateTime.UtcNow >= m_LastCombatTime + ExpireDelay;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CriminalAggression
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_CriminalAggression;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_CriminalAggression = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Mobile Attacker
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Attacker;
|
||||
}
|
||||
}
|
||||
|
||||
public Mobile Defender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Defender;
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime LastCombatTime
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_LastCombatTime;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Reported
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Reported;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_Reported = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanReportMurder
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_CanReportMurder;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_CanReportMurder = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static AggressorInfo Create(Mobile attacker, Mobile defender, bool criminal)
|
||||
{
|
||||
AggressorInfo info;
|
||||
|
||||
if (m_Pool.Count > 0)
|
||||
{
|
||||
info = m_Pool.Dequeue();
|
||||
|
||||
info.m_Attacker = attacker;
|
||||
info.m_Defender = defender;
|
||||
|
||||
info.m_CanReportMurder = criminal;
|
||||
info.m_CriminalAggression = criminal;
|
||||
|
||||
info.m_Queued = false;
|
||||
|
||||
info.Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
info = new AggressorInfo(attacker, defender, criminal);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
public void Free()
|
||||
{
|
||||
if (m_Queued)
|
||||
return;
|
||||
|
||||
m_Queued = true;
|
||||
m_Pool.Enqueue(this);
|
||||
}
|
||||
|
||||
public static void DumpAccess()
|
||||
{
|
||||
using var op = new StreamWriter("warnings.log", true);
|
||||
op.WriteLine("Warning: Access to queued AggressorInfo:");
|
||||
op.WriteLine(new StackTrace());
|
||||
op.WriteLine();
|
||||
op.WriteLine();
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_LastCombatTime = DateTime.UtcNow;
|
||||
m_Reported = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
/***************************************************************************
|
||||
* AggressorInfo.cs
|
||||
* -------------------
|
||||
* begin : May 1, 2002
|
||||
* copyright : (C) The RunUO Software Team
|
||||
* email : info@runuo.com
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
namespace Server
|
||||
{
|
||||
public class AggressorInfo {
|
||||
private static readonly Queue<AggressorInfo> m_Pool = new Queue<AggressorInfo>();
|
||||
private Mobile m_Attacker, m_Defender;
|
||||
private bool m_CanReportMurder;
|
||||
private bool m_CriminalAggression;
|
||||
private DateTime m_LastCombatTime;
|
||||
|
||||
private bool m_Queued;
|
||||
private bool m_Reported;
|
||||
|
||||
private AggressorInfo(Mobile attacker, Mobile defender, bool criminal)
|
||||
{
|
||||
m_Attacker = attacker;
|
||||
m_Defender = defender;
|
||||
|
||||
m_CanReportMurder = criminal;
|
||||
m_CriminalAggression = criminal;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public static TimeSpan ExpireDelay { get; set; } = TimeSpan.FromMinutes(2.0);
|
||||
|
||||
public bool Expired
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Attacker.Deleted || m_Defender.Deleted || DateTime.UtcNow >= m_LastCombatTime + ExpireDelay;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CriminalAggression
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_CriminalAggression;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_CriminalAggression = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Mobile Attacker
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Attacker;
|
||||
}
|
||||
}
|
||||
|
||||
public Mobile Defender
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Defender;
|
||||
}
|
||||
}
|
||||
|
||||
public DateTime LastCombatTime
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_LastCombatTime;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Reported
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_Reported;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_Reported = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanReportMurder
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
return m_CanReportMurder;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_CanReportMurder = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static AggressorInfo Create(Mobile attacker, Mobile defender, bool criminal)
|
||||
{
|
||||
AggressorInfo info;
|
||||
|
||||
if (m_Pool.Count > 0)
|
||||
{
|
||||
info = m_Pool.Dequeue();
|
||||
|
||||
info.m_Attacker = attacker;
|
||||
info.m_Defender = defender;
|
||||
|
||||
info.m_CanReportMurder = criminal;
|
||||
info.m_CriminalAggression = criminal;
|
||||
|
||||
info.m_Queued = false;
|
||||
|
||||
info.Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
info = new AggressorInfo(attacker, defender, criminal);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
public void Free()
|
||||
{
|
||||
if (m_Queued)
|
||||
return;
|
||||
|
||||
m_Queued = true;
|
||||
m_Pool.Enqueue(this);
|
||||
}
|
||||
|
||||
public static void DumpAccess()
|
||||
{
|
||||
using var op = new StreamWriter("warnings.log", true);
|
||||
op.WriteLine("Warning: Access to queued AggressorInfo:");
|
||||
op.WriteLine(new StackTrace());
|
||||
op.WriteLine();
|
||||
op.WriteLine();
|
||||
}
|
||||
|
||||
public void Refresh()
|
||||
{
|
||||
if (m_Queued)
|
||||
DumpAccess();
|
||||
|
||||
m_LastCombatTime = DateTime.UtcNow;
|
||||
m_Reported = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,85 +1,71 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<ApplicationIcon>MUO.ico</ApplicationIcon>
|
||||
<StartupObject>Server.Core</StartupObject>
|
||||
<AssemblyName>ModernUO</AssemblyName>
|
||||
<Win32Resource />
|
||||
<Version>0.5.0</Version>
|
||||
<Product>ModernUO Server</Product>
|
||||
<PublishDir>..\..\Distribution</PublishDir>
|
||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||
<Configurations>Debug;Release;Analyze</Configurations>
|
||||
<UseNETCoreGenerator>true</UseNETCoreGenerator>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<WarningsAsErrors />
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
</PropertyGroup>
|
||||
<Target Name="CleanPub" AfterTargets="Clean">
|
||||
<Message Text="Removing distribution files..." />
|
||||
<Delete Files="..\..\Distribution\libuv.dylib" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libuv.so" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libuv.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\zlib.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libz.dylib" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libz.so" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\ZLib.Bindings.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Connections.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Http.Features.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Configuration.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.DependencyInjection.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.FileProviders.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Hosting.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Logging.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Options.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Primitives.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName)" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).dll.config" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).exe" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).deps.json" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).pdb" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.dev.json" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.json" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\System.IO.Pipelines.dll" ContinueOnError="true" />
|
||||
</Target>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<Optimize>false</Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<Optimize>true</Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Analyze'">
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
|
||||
<CodeAnalysisRuleSet>..\..\Rules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Include="..\..\Rules.ruleset">
|
||||
<Link>Rules.rulest</Link>
|
||||
</AdditionalFiles>
|
||||
<AdditionalFiles Include="..\..\stylecop.json">
|
||||
<Link>stylecop.json</Link>
|
||||
</AdditionalFiles>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.5" />
|
||||
<PackageReference Include="System.IO.Pipelines" Version="4.7.2" />
|
||||
<PackageReference Include="Zlib.Bindings" Version="1.2.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(Configuration)'=='Analyze'">
|
||||
<PackageReference Include="StyleCop.Analyzers">
|
||||
<Version>1.1.118</Version>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers">
|
||||
<Version>3.0.0</Version>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<ApplicationIcon>MUO.ico</ApplicationIcon>
|
||||
<StartupObject>Server.Core</StartupObject>
|
||||
<AssemblyName>ModernUO</AssemblyName>
|
||||
<Win32Resource />
|
||||
<Version>0.5.0</Version>
|
||||
<Product>ModernUO Server</Product>
|
||||
<PublishDir>..\..\Distribution</PublishDir>
|
||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||
<UseNETCoreGenerator>true</UseNETCoreGenerator>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<WarningsAsErrors />
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
|
||||
</PropertyGroup>
|
||||
<Target Name="CleanPub" AfterTargets="Clean">
|
||||
<Message Text="Removing distribution files..." />
|
||||
<Delete Files="..\..\Distribution\libuv.dylib" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libuv.so" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libuv.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\zlib.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libz.dylib" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\libz.so" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\ZLib.Bindings.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Connections.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Http.Features.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Configuration.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.DependencyInjection.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.FileProviders.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Hosting.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Logging.Abstractions.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Options.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\Microsoft.Extensions.Primitives.dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName)" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).dll" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).dll.config" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).exe" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).deps.json" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).pdb" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.dev.json" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.json" ContinueOnError="true" />
|
||||
<Delete Files="..\..\Distribution\System.IO.Pipelines.dll" ContinueOnError="true" />
|
||||
</Target>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<Optimize>false</Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<Optimize>true</Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Analyze'">
|
||||
<CodeAnalysisRuleSet>..\..\Rules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.5" />
|
||||
<PackageReference Include="System.IO.Pipelines" Version="4.7.2" />
|
||||
<PackageReference Include="Zlib.Bindings" Version="1.2.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(Configuration)'=='Analyze'">
|
||||
<AdditionalFiles Include="..\..\stylecop.json" />
|
||||
<AdditionalFiles Include="..\..\Rules.ruleset" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -1,210 +1,210 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class WarningItem : Item
|
||||
{
|
||||
private bool m_Broadcasting;
|
||||
|
||||
private DateTime m_LastBroadcast;
|
||||
private int m_Range;
|
||||
|
||||
[Constructible]
|
||||
public WarningItem(int itemID, int range, int warning) : base(itemID)
|
||||
{
|
||||
if (range > 18)
|
||||
range = 18;
|
||||
|
||||
Movable = false;
|
||||
|
||||
WarningNumber = warning;
|
||||
m_Range = range;
|
||||
}
|
||||
|
||||
[Constructible]
|
||||
public WarningItem(int itemID, int range, string warning) : base(itemID)
|
||||
{
|
||||
if (range > 18)
|
||||
range = 18;
|
||||
|
||||
Movable = false;
|
||||
|
||||
WarningString = warning;
|
||||
m_Range = range;
|
||||
}
|
||||
|
||||
public WarningItem(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string WarningString { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int WarningNumber { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Range
|
||||
{
|
||||
get => m_Range;
|
||||
set
|
||||
{
|
||||
if (value > 18) value = 18;
|
||||
m_Range = value;
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public TimeSpan ResetDelay { get; set; }
|
||||
|
||||
public virtual bool OnlyToTriggerer => false;
|
||||
public virtual int NeighborRange => 5;
|
||||
|
||||
public override bool HandlesOnMovement => true;
|
||||
|
||||
public virtual void SendMessage(Mobile triggerer, bool onlyToTriggerer, string messageString, int messageNumber)
|
||||
{
|
||||
if (onlyToTriggerer)
|
||||
{
|
||||
if (messageString != null)
|
||||
triggerer.SendMessage(messageString);
|
||||
else
|
||||
triggerer.SendLocalizedMessage(messageNumber);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (messageString != null)
|
||||
PublicOverheadMessage(MessageType.Regular, 0x3B2, false, messageString);
|
||||
else
|
||||
PublicOverheadMessage(MessageType.Regular, 0x3B2, messageNumber);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Broadcast(Mobile triggerer)
|
||||
{
|
||||
if (m_Broadcasting || DateTime.UtcNow < m_LastBroadcast + ResetDelay)
|
||||
return;
|
||||
|
||||
m_LastBroadcast = DateTime.UtcNow;
|
||||
|
||||
m_Broadcasting = true;
|
||||
|
||||
SendMessage(triggerer, OnlyToTriggerer, WarningString, WarningNumber);
|
||||
|
||||
if (NeighborRange >= 0)
|
||||
{
|
||||
List<WarningItem> list = new List<WarningItem>();
|
||||
|
||||
foreach (Item item in GetItemsInRange(NeighborRange))
|
||||
if (item != this && item is WarningItem warningItem)
|
||||
list.Add(warningItem);
|
||||
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
list[i].Broadcast(triggerer);
|
||||
}
|
||||
|
||||
Timer.DelayCall(StopBroadcasting);
|
||||
}
|
||||
|
||||
private void StopBroadcasting()
|
||||
{
|
||||
m_Broadcasting = false;
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m.Player && Utility.InRange(m.Location, Location, m_Range) &&
|
||||
!Utility.InRange(oldLocation, Location, m_Range))
|
||||
Broadcast(m);
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(WarningString);
|
||||
writer.Write(WarningNumber);
|
||||
writer.Write(m_Range);
|
||||
|
||||
writer.Write(ResetDelay);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
WarningString = reader.ReadString();
|
||||
WarningNumber = reader.ReadInt();
|
||||
m_Range = reader.ReadInt();
|
||||
ResetDelay = reader.ReadTimeSpan();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class HintItem : WarningItem
|
||||
{
|
||||
[Constructible]
|
||||
public HintItem(int itemID, int range, int warning, int hint) : base(itemID, range, warning) => HintNumber = hint;
|
||||
|
||||
[Constructible]
|
||||
public HintItem(int itemID, int range, string warning, string hint) : base(itemID, range, warning) => HintString = hint;
|
||||
|
||||
public HintItem(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string HintString { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int HintNumber { get; set; }
|
||||
|
||||
public override bool OnlyToTriggerer => true;
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
SendMessage(from, true, HintString, HintNumber);
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(HintString);
|
||||
writer.Write(HintNumber);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
HintString = reader.ReadString();
|
||||
HintNumber = reader.ReadInt();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class WarningItem : Item
|
||||
{
|
||||
private bool m_Broadcasting;
|
||||
|
||||
private DateTime m_LastBroadcast;
|
||||
private int m_Range;
|
||||
|
||||
[Constructible]
|
||||
public WarningItem(int itemID, int range, int warning) : base(itemID)
|
||||
{
|
||||
if (range > 18)
|
||||
range = 18;
|
||||
|
||||
Movable = false;
|
||||
|
||||
WarningNumber = warning;
|
||||
m_Range = range;
|
||||
}
|
||||
|
||||
[Constructible]
|
||||
public WarningItem(int itemID, int range, string warning) : base(itemID)
|
||||
{
|
||||
if (range > 18)
|
||||
range = 18;
|
||||
|
||||
Movable = false;
|
||||
|
||||
WarningString = warning;
|
||||
m_Range = range;
|
||||
}
|
||||
|
||||
public WarningItem(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string WarningString { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int WarningNumber { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Range
|
||||
{
|
||||
get => m_Range;
|
||||
set
|
||||
{
|
||||
if (value > 18) value = 18;
|
||||
m_Range = value;
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public TimeSpan ResetDelay { get; set; }
|
||||
|
||||
public virtual bool OnlyToTriggerer => false;
|
||||
public virtual int NeighborRange => 5;
|
||||
|
||||
public override bool HandlesOnMovement => true;
|
||||
|
||||
public virtual void SendMessage(Mobile triggerer, bool onlyToTriggerer, string messageString, int messageNumber)
|
||||
{
|
||||
if (onlyToTriggerer)
|
||||
{
|
||||
if (messageString != null)
|
||||
triggerer.SendMessage(messageString);
|
||||
else
|
||||
triggerer.SendLocalizedMessage(messageNumber);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (messageString != null)
|
||||
PublicOverheadMessage(MessageType.Regular, 0x3B2, false, messageString);
|
||||
else
|
||||
PublicOverheadMessage(MessageType.Regular, 0x3B2, messageNumber);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Broadcast(Mobile triggerer)
|
||||
{
|
||||
if (m_Broadcasting || DateTime.UtcNow < m_LastBroadcast + ResetDelay)
|
||||
return;
|
||||
|
||||
m_LastBroadcast = DateTime.UtcNow;
|
||||
|
||||
m_Broadcasting = true;
|
||||
|
||||
SendMessage(triggerer, OnlyToTriggerer, WarningString, WarningNumber);
|
||||
|
||||
if (NeighborRange >= 0)
|
||||
{
|
||||
List<WarningItem> list = new List<WarningItem>();
|
||||
|
||||
foreach (Item item in GetItemsInRange(NeighborRange))
|
||||
if (item != this && item is WarningItem warningItem)
|
||||
list.Add(warningItem);
|
||||
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
list[i].Broadcast(triggerer);
|
||||
}
|
||||
|
||||
Timer.DelayCall(StopBroadcasting);
|
||||
}
|
||||
|
||||
private void StopBroadcasting()
|
||||
{
|
||||
m_Broadcasting = false;
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m.Player && Utility.InRange(m.Location, Location, m_Range) &&
|
||||
!Utility.InRange(oldLocation, Location, m_Range))
|
||||
Broadcast(m);
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(WarningString);
|
||||
writer.Write(WarningNumber);
|
||||
writer.Write(m_Range);
|
||||
|
||||
writer.Write(ResetDelay);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
WarningString = reader.ReadString();
|
||||
WarningNumber = reader.ReadInt();
|
||||
m_Range = reader.ReadInt();
|
||||
ResetDelay = reader.ReadTimeSpan();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class HintItem : WarningItem
|
||||
{
|
||||
[Constructible]
|
||||
public HintItem(int itemID, int range, int warning, int hint) : base(itemID, range, warning) => HintNumber = hint;
|
||||
|
||||
[Constructible]
|
||||
public HintItem(int itemID, int range, string warning, string hint) : base(itemID, range, warning) => HintString = hint;
|
||||
|
||||
public HintItem(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string HintString { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int HintNumber { get; set; }
|
||||
|
||||
public override bool OnlyToTriggerer => true;
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
SendMessage(from, true, HintString, HintNumber);
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(HintString);
|
||||
writer.Write(HintNumber);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
HintString = reader.ReadString();
|
||||
HintNumber = reader.ReadInt();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,357 +1,357 @@
|
|||
namespace Server.Items
|
||||
{
|
||||
public abstract class BaseIngot : Item, ICommodity
|
||||
{
|
||||
private CraftResource m_Resource;
|
||||
|
||||
public BaseIngot(CraftResource resource, int amount = 1) : base(0x1BF2)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
Hue = CraftResources.GetHue(resource);
|
||||
|
||||
m_Resource = resource;
|
||||
}
|
||||
|
||||
public BaseIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CraftResource Resource
|
||||
{
|
||||
get => m_Resource;
|
||||
set
|
||||
{
|
||||
m_Resource = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
public override double DefaultWeight => 0.1;
|
||||
|
||||
public override int LabelNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Resource >= CraftResource.DullCopper && m_Resource <= CraftResource.Valorite)
|
||||
return 1042684 + (m_Resource - CraftResource.DullCopper);
|
||||
|
||||
return 1042692;
|
||||
}
|
||||
}
|
||||
|
||||
int ICommodity.DescriptionNumber => LabelNumber;
|
||||
bool ICommodity.IsDeedable => true;
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.Write((int)m_Resource);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_Resource = (CraftResource)reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
var info = reader.ReadInt() switch
|
||||
{
|
||||
0 => OreInfo.Iron,
|
||||
1 => OreInfo.DullCopper,
|
||||
2 => OreInfo.ShadowIron,
|
||||
3 => OreInfo.Copper,
|
||||
4 => OreInfo.Bronze,
|
||||
5 => OreInfo.Gold,
|
||||
6 => OreInfo.Agapite,
|
||||
7 => OreInfo.Verite,
|
||||
8 => OreInfo.Valorite,
|
||||
_ => null
|
||||
};
|
||||
|
||||
m_Resource = CraftResources.GetFromOreInfo(info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
if (Amount > 1)
|
||||
list.Add(1050039, "{0}\t#{1}", Amount, 1027154); // ~1_NUMBER~ ~2_ITEMNAME~
|
||||
else
|
||||
list.Add(1027154); // ingots
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (!CraftResources.IsStandard(m_Resource))
|
||||
{
|
||||
int num = CraftResources.GetLocalizationNumber(m_Resource);
|
||||
|
||||
if (num > 0)
|
||||
list.Add(num);
|
||||
else
|
||||
list.Add(CraftResources.GetName(m_Resource));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class IronIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public IronIngot(int amount = 1) : base(CraftResource.Iron, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public IronIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class DullCopperIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public DullCopperIngot(int amount = 1) : base(CraftResource.DullCopper, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public DullCopperIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class ShadowIronIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public ShadowIronIngot(int amount = 1) : base(CraftResource.ShadowIron, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public ShadowIronIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class CopperIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public CopperIngot(int amount = 1) : base(CraftResource.Copper, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public CopperIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class BronzeIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public BronzeIngot(int amount = 1) : base(CraftResource.Bronze, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public BronzeIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class GoldIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public GoldIngot(int amount = 1) : base(CraftResource.Gold, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public GoldIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class AgapiteIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public AgapiteIngot(int amount = 1) : base(CraftResource.Agapite, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public AgapiteIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class VeriteIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public VeriteIngot(int amount = 1) : base(CraftResource.Verite, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public VeriteIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class ValoriteIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public ValoriteIngot(int amount = 1) : base(CraftResource.Valorite, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public ValoriteIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
namespace Server.Items
|
||||
{
|
||||
public abstract class BaseIngot : Item, ICommodity
|
||||
{
|
||||
private CraftResource m_Resource;
|
||||
|
||||
public BaseIngot(CraftResource resource, int amount = 1) : base(0x1BF2)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
Hue = CraftResources.GetHue(resource);
|
||||
|
||||
m_Resource = resource;
|
||||
}
|
||||
|
||||
public BaseIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CraftResource Resource
|
||||
{
|
||||
get => m_Resource;
|
||||
set
|
||||
{
|
||||
m_Resource = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
public override double DefaultWeight => 0.1;
|
||||
|
||||
public override int LabelNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Resource >= CraftResource.DullCopper && m_Resource <= CraftResource.Valorite)
|
||||
return 1042684 + (m_Resource - CraftResource.DullCopper);
|
||||
|
||||
return 1042692;
|
||||
}
|
||||
}
|
||||
|
||||
int ICommodity.DescriptionNumber => LabelNumber;
|
||||
bool ICommodity.IsDeedable => true;
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.Write((int)m_Resource);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_Resource = (CraftResource)reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
var info = reader.ReadInt() switch
|
||||
{
|
||||
0 => OreInfo.Iron,
|
||||
1 => OreInfo.DullCopper,
|
||||
2 => OreInfo.ShadowIron,
|
||||
3 => OreInfo.Copper,
|
||||
4 => OreInfo.Bronze,
|
||||
5 => OreInfo.Gold,
|
||||
6 => OreInfo.Agapite,
|
||||
7 => OreInfo.Verite,
|
||||
8 => OreInfo.Valorite,
|
||||
_ => null
|
||||
};
|
||||
|
||||
m_Resource = CraftResources.GetFromOreInfo(info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
if (Amount > 1)
|
||||
list.Add(1050039, "{0}\t#{1}", Amount, 1027154); // ~1_NUMBER~ ~2_ITEMNAME~
|
||||
else
|
||||
list.Add(1027154); // ingots
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (!CraftResources.IsStandard(m_Resource))
|
||||
{
|
||||
int num = CraftResources.GetLocalizationNumber(m_Resource);
|
||||
|
||||
if (num > 0)
|
||||
list.Add(num);
|
||||
else
|
||||
list.Add(CraftResources.GetName(m_Resource));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class IronIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public IronIngot(int amount = 1) : base(CraftResource.Iron, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public IronIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class DullCopperIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public DullCopperIngot(int amount = 1) : base(CraftResource.DullCopper, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public DullCopperIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class ShadowIronIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public ShadowIronIngot(int amount = 1) : base(CraftResource.ShadowIron, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public ShadowIronIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class CopperIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public CopperIngot(int amount = 1) : base(CraftResource.Copper, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public CopperIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class BronzeIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public BronzeIngot(int amount = 1) : base(CraftResource.Bronze, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public BronzeIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class GoldIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public GoldIngot(int amount = 1) : base(CraftResource.Gold, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public GoldIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class AgapiteIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public AgapiteIngot(int amount = 1) : base(CraftResource.Agapite, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public AgapiteIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class VeriteIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public VeriteIngot(int amount = 1) : base(CraftResource.Verite, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public VeriteIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[Flippable(0x1BF2, 0x1BEF)]
|
||||
public class ValoriteIngot : BaseIngot
|
||||
{
|
||||
[Constructible]
|
||||
public ValoriteIngot(int amount = 1) : base(CraftResource.Valorite, amount)
|
||||
{
|
||||
}
|
||||
|
||||
public ValoriteIngot(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,312 +1,312 @@
|
|||
namespace Server.Items
|
||||
{
|
||||
public abstract class BaseGranite : Item
|
||||
{
|
||||
private CraftResource m_Resource;
|
||||
|
||||
public BaseGranite(CraftResource resource) : base(0x1779)
|
||||
{
|
||||
Hue = CraftResources.GetHue(resource);
|
||||
Stackable = Core.ML;
|
||||
|
||||
m_Resource = resource;
|
||||
}
|
||||
|
||||
public BaseGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CraftResource Resource
|
||||
{
|
||||
get => m_Resource;
|
||||
set
|
||||
{
|
||||
m_Resource = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
public override double DefaultWeight => Core.ML ? 1.0 : 10.0;
|
||||
|
||||
public override int LabelNumber => 1044607; // high quality granite
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.Write((int)m_Resource);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
case 0:
|
||||
{
|
||||
m_Resource = (CraftResource)reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (version < 1)
|
||||
Stackable = Core.ML;
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (!CraftResources.IsStandard(m_Resource))
|
||||
{
|
||||
int num = CraftResources.GetLocalizationNumber(m_Resource);
|
||||
|
||||
if (num > 0)
|
||||
list.Add(num);
|
||||
else
|
||||
list.Add(CraftResources.GetName(m_Resource));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Granite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public Granite() : base(CraftResource.Iron)
|
||||
{
|
||||
}
|
||||
|
||||
public Granite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class DullCopperGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public DullCopperGranite() : base(CraftResource.DullCopper)
|
||||
{
|
||||
}
|
||||
|
||||
public DullCopperGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class ShadowIronGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public ShadowIronGranite() : base(CraftResource.ShadowIron)
|
||||
{
|
||||
}
|
||||
|
||||
public ShadowIronGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class CopperGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public CopperGranite() : base(CraftResource.Copper)
|
||||
{
|
||||
}
|
||||
|
||||
public CopperGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BronzeGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public BronzeGranite() : base(CraftResource.Bronze)
|
||||
{
|
||||
}
|
||||
|
||||
public BronzeGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class GoldGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public GoldGranite() : base(CraftResource.Gold)
|
||||
{
|
||||
}
|
||||
|
||||
public GoldGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class AgapiteGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public AgapiteGranite() : base(CraftResource.Agapite)
|
||||
{
|
||||
}
|
||||
|
||||
public AgapiteGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class VeriteGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public VeriteGranite() : base(CraftResource.Verite)
|
||||
{
|
||||
}
|
||||
|
||||
public VeriteGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class ValoriteGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public ValoriteGranite() : base(CraftResource.Valorite)
|
||||
{
|
||||
}
|
||||
|
||||
public ValoriteGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
namespace Server.Items
|
||||
{
|
||||
public abstract class BaseGranite : Item
|
||||
{
|
||||
private CraftResource m_Resource;
|
||||
|
||||
public BaseGranite(CraftResource resource) : base(0x1779)
|
||||
{
|
||||
Hue = CraftResources.GetHue(resource);
|
||||
Stackable = Core.ML;
|
||||
|
||||
m_Resource = resource;
|
||||
}
|
||||
|
||||
public BaseGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CraftResource Resource
|
||||
{
|
||||
get => m_Resource;
|
||||
set
|
||||
{
|
||||
m_Resource = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
public override double DefaultWeight => Core.ML ? 1.0 : 10.0;
|
||||
|
||||
public override int LabelNumber => 1044607; // high quality granite
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.Write((int)m_Resource);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
case 0:
|
||||
{
|
||||
m_Resource = (CraftResource)reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (version < 1)
|
||||
Stackable = Core.ML;
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (!CraftResources.IsStandard(m_Resource))
|
||||
{
|
||||
int num = CraftResources.GetLocalizationNumber(m_Resource);
|
||||
|
||||
if (num > 0)
|
||||
list.Add(num);
|
||||
else
|
||||
list.Add(CraftResources.GetName(m_Resource));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Granite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public Granite() : base(CraftResource.Iron)
|
||||
{
|
||||
}
|
||||
|
||||
public Granite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class DullCopperGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public DullCopperGranite() : base(CraftResource.DullCopper)
|
||||
{
|
||||
}
|
||||
|
||||
public DullCopperGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class ShadowIronGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public ShadowIronGranite() : base(CraftResource.ShadowIron)
|
||||
{
|
||||
}
|
||||
|
||||
public ShadowIronGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class CopperGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public CopperGranite() : base(CraftResource.Copper)
|
||||
{
|
||||
}
|
||||
|
||||
public CopperGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BronzeGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public BronzeGranite() : base(CraftResource.Bronze)
|
||||
{
|
||||
}
|
||||
|
||||
public BronzeGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class GoldGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public GoldGranite() : base(CraftResource.Gold)
|
||||
{
|
||||
}
|
||||
|
||||
public GoldGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class AgapiteGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public AgapiteGranite() : base(CraftResource.Agapite)
|
||||
{
|
||||
}
|
||||
|
||||
public AgapiteGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class VeriteGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public VeriteGranite() : base(CraftResource.Verite)
|
||||
{
|
||||
}
|
||||
|
||||
public VeriteGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class ValoriteGranite : BaseGranite
|
||||
{
|
||||
[Constructible]
|
||||
public ValoriteGranite() : base(CraftResource.Valorite)
|
||||
{
|
||||
}
|
||||
|
||||
public ValoriteGranite(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,44 +1,44 @@
|
|||
namespace Server.Items
|
||||
{
|
||||
public class Aegis : HeaterShield
|
||||
{
|
||||
[Constructible]
|
||||
public Aegis()
|
||||
{
|
||||
Hue = 0x47E;
|
||||
ArmorAttributes.SelfRepair = 5;
|
||||
Attributes.ReflectPhysical = 15;
|
||||
Attributes.DefendChance = 15;
|
||||
Attributes.LowerManaCost = 8;
|
||||
}
|
||||
|
||||
public Aegis(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1061602; // <20>gis
|
||||
public override int ArtifactRarity => 11;
|
||||
|
||||
public override int BasePhysicalResistance => 15;
|
||||
|
||||
public override int InitMinHits => 255;
|
||||
public override int InitMaxHits => 255;
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (version < 1)
|
||||
PhysicalBonus = 0;
|
||||
}
|
||||
}
|
||||
namespace Server.Items
|
||||
{
|
||||
public class Aegis : HeaterShield
|
||||
{
|
||||
[Constructible]
|
||||
public Aegis()
|
||||
{
|
||||
Hue = 0x47E;
|
||||
ArmorAttributes.SelfRepair = 5;
|
||||
Attributes.ReflectPhysical = 15;
|
||||
Attributes.DefendChance = 15;
|
||||
Attributes.LowerManaCost = 8;
|
||||
}
|
||||
|
||||
public Aegis(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1061602; // <20>gis
|
||||
public override int ArtifactRarity => 11;
|
||||
|
||||
public override int BasePhysicalResistance => 15;
|
||||
|
||||
public override int InitMinHits => 255;
|
||||
public override int InitMaxHits => 255;
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (version < 1)
|
||||
PhysicalBonus = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,179 +1,179 @@
|
|||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BaseShield : BaseArmor
|
||||
{
|
||||
public BaseShield(int itemID) : base(itemID)
|
||||
{
|
||||
}
|
||||
|
||||
public BaseShield(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
|
||||
|
||||
public override double ArmorRating
|
||||
{
|
||||
get
|
||||
{
|
||||
Mobile m = Parent as Mobile;
|
||||
double ar = base.ArmorRating;
|
||||
|
||||
if (m != null)
|
||||
return m.Skills.Parry.Value * ar / 200.0 + 1.0;
|
||||
return ar;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (version < 1)
|
||||
{
|
||||
if (this is Aegis)
|
||||
return;
|
||||
|
||||
// The 15 bonus points to resistances are not applied to shields on OSI.
|
||||
PhysicalBonus = 0;
|
||||
FireBonus = 0;
|
||||
ColdBonus = 0;
|
||||
PoisonBonus = 0;
|
||||
EnergyBonus = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override int OnHit(BaseWeapon weapon, int damage)
|
||||
{
|
||||
if (Core.AOS)
|
||||
{
|
||||
if (ArmorAttributes.SelfRepair > Utility.Random(10))
|
||||
{
|
||||
HitPoints += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
double halfArmor = ArmorRating / 2.0;
|
||||
int absorbed = (int)(halfArmor + halfArmor * Utility.RandomDouble());
|
||||
|
||||
if (absorbed < 2)
|
||||
absorbed = 2;
|
||||
|
||||
int wear;
|
||||
|
||||
if (weapon.Type == WeaponType.Bashing)
|
||||
wear = absorbed / 2;
|
||||
else
|
||||
wear = Utility.Random(2);
|
||||
|
||||
if (wear > 0 && MaxHitPoints > 0)
|
||||
{
|
||||
if (HitPoints >= wear)
|
||||
{
|
||||
HitPoints -= wear;
|
||||
wear = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
wear -= HitPoints;
|
||||
HitPoints = 0;
|
||||
}
|
||||
|
||||
if (wear > 0)
|
||||
{
|
||||
if (MaxHitPoints > wear)
|
||||
{
|
||||
MaxHitPoints -= wear;
|
||||
|
||||
if (Parent is Mobile mobile)
|
||||
mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2,
|
||||
1061121); // Your equipment is severely damaged.
|
||||
}
|
||||
else
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(Parent is Mobile owner))
|
||||
return damage;
|
||||
|
||||
double ar = ArmorRating;
|
||||
double chance = (owner.Skills.Parry.Value - ar * 2.0) / 100.0;
|
||||
|
||||
if (chance < 0.01)
|
||||
chance = 0.01;
|
||||
/*
|
||||
FORMULA: Displayed AR = ((Parrying Skill * Base AR of Shield) <EFBFBD> 200) + 1
|
||||
|
||||
FORMULA: % Chance of Blocking = parry skill - (shieldAR * 2)
|
||||
|
||||
FORMULA: Melee Damage Absorbed = (AR of Shield) / 2 | Archery Damage Absorbed = AR of Shield
|
||||
*/
|
||||
if (owner.CheckSkill(SkillName.Parry, chance))
|
||||
{
|
||||
if (weapon.Skill == SkillName.Archery)
|
||||
damage -= (int)ar;
|
||||
else
|
||||
damage -= (int)(ar / 2.0);
|
||||
|
||||
if (damage < 0)
|
||||
damage = 0;
|
||||
|
||||
owner.FixedEffect(0x37B9, 10, 16);
|
||||
|
||||
if (Utility.Random(100) < 25) // 25% chance to lower durability
|
||||
{
|
||||
int wear = Utility.Random(2);
|
||||
|
||||
if (wear > 0 && MaxHitPoints > 0)
|
||||
{
|
||||
if (HitPoints >= wear)
|
||||
{
|
||||
HitPoints -= wear;
|
||||
wear = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
wear -= HitPoints;
|
||||
HitPoints = 0;
|
||||
}
|
||||
|
||||
if (wear > 0)
|
||||
{
|
||||
if (MaxHitPoints > wear)
|
||||
{
|
||||
MaxHitPoints -= wear;
|
||||
|
||||
((Mobile)Parent).LocalOverheadMessage(MessageType.Regular, 0x3B2,
|
||||
1061121); // Your equipment is severely damaged.
|
||||
}
|
||||
else
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return damage;
|
||||
}
|
||||
}
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class BaseShield : BaseArmor
|
||||
{
|
||||
public BaseShield(int itemID) : base(itemID)
|
||||
{
|
||||
}
|
||||
|
||||
public BaseShield(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
|
||||
|
||||
public override double ArmorRating
|
||||
{
|
||||
get
|
||||
{
|
||||
Mobile m = Parent as Mobile;
|
||||
double ar = base.ArmorRating;
|
||||
|
||||
if (m != null)
|
||||
return m.Skills.Parry.Value * ar / 200.0 + 1.0;
|
||||
return ar;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (version < 1)
|
||||
{
|
||||
if (this is Aegis)
|
||||
return;
|
||||
|
||||
// The 15 bonus points to resistances are not applied to shields on OSI.
|
||||
PhysicalBonus = 0;
|
||||
FireBonus = 0;
|
||||
ColdBonus = 0;
|
||||
PoisonBonus = 0;
|
||||
EnergyBonus = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override int OnHit(BaseWeapon weapon, int damage)
|
||||
{
|
||||
if (Core.AOS)
|
||||
{
|
||||
if (ArmorAttributes.SelfRepair > Utility.Random(10))
|
||||
{
|
||||
HitPoints += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
double halfArmor = ArmorRating / 2.0;
|
||||
int absorbed = (int)(halfArmor + halfArmor * Utility.RandomDouble());
|
||||
|
||||
if (absorbed < 2)
|
||||
absorbed = 2;
|
||||
|
||||
int wear;
|
||||
|
||||
if (weapon.Type == WeaponType.Bashing)
|
||||
wear = absorbed / 2;
|
||||
else
|
||||
wear = Utility.Random(2);
|
||||
|
||||
if (wear > 0 && MaxHitPoints > 0)
|
||||
{
|
||||
if (HitPoints >= wear)
|
||||
{
|
||||
HitPoints -= wear;
|
||||
wear = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
wear -= HitPoints;
|
||||
HitPoints = 0;
|
||||
}
|
||||
|
||||
if (wear > 0)
|
||||
{
|
||||
if (MaxHitPoints > wear)
|
||||
{
|
||||
MaxHitPoints -= wear;
|
||||
|
||||
if (Parent is Mobile mobile)
|
||||
mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2,
|
||||
1061121); // Your equipment is severely damaged.
|
||||
}
|
||||
else
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(Parent is Mobile owner))
|
||||
return damage;
|
||||
|
||||
double ar = ArmorRating;
|
||||
double chance = (owner.Skills.Parry.Value - ar * 2.0) / 100.0;
|
||||
|
||||
if (chance < 0.01)
|
||||
chance = 0.01;
|
||||
/*
|
||||
FORMULA: Displayed AR = ((Parrying Skill * Base AR of Shield) <EFBFBD> 200) + 1
|
||||
|
||||
FORMULA: % Chance of Blocking = parry skill - (shieldAR * 2)
|
||||
|
||||
FORMULA: Melee Damage Absorbed = (AR of Shield) / 2 | Archery Damage Absorbed = AR of Shield
|
||||
*/
|
||||
if (owner.CheckSkill(SkillName.Parry, chance))
|
||||
{
|
||||
if (weapon.Skill == SkillName.Archery)
|
||||
damage -= (int)ar;
|
||||
else
|
||||
damage -= (int)(ar / 2.0);
|
||||
|
||||
if (damage < 0)
|
||||
damage = 0;
|
||||
|
||||
owner.FixedEffect(0x37B9, 10, 16);
|
||||
|
||||
if (Utility.Random(100) < 25) // 25% chance to lower durability
|
||||
{
|
||||
int wear = Utility.Random(2);
|
||||
|
||||
if (wear > 0 && MaxHitPoints > 0)
|
||||
{
|
||||
if (HitPoints >= wear)
|
||||
{
|
||||
HitPoints -= wear;
|
||||
wear = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
wear -= HitPoints;
|
||||
HitPoints = 0;
|
||||
}
|
||||
|
||||
if (wear > 0)
|
||||
{
|
||||
if (MaxHitPoints > wear)
|
||||
{
|
||||
MaxHitPoints -= wear;
|
||||
|
||||
((Mobile)Parent).LocalOverheadMessage(MessageType.Regular, 0x3B2,
|
||||
1061121); // Your equipment is severely damaged.
|
||||
}
|
||||
else
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return damage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,127 +1,127 @@
|
|||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
[Flippable(0xA57, 0xA58, 0xA59)]
|
||||
public class Bedroll : Item
|
||||
{
|
||||
[Constructible]
|
||||
public Bedroll() : base(0xA57) => Weight = 5.0;
|
||||
|
||||
public Bedroll(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (Parent != null || !VerifyMove(from))
|
||||
return;
|
||||
|
||||
if (!from.InRange(this, 2))
|
||||
{
|
||||
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
|
||||
return;
|
||||
}
|
||||
|
||||
if (ItemID == 0xA57) // rolled
|
||||
{
|
||||
Direction dir = PlayerMobile.GetDirection4(from.Location, Location);
|
||||
|
||||
if (dir == Direction.North || dir == Direction.South)
|
||||
ItemID = 0xA55;
|
||||
else
|
||||
ItemID = 0xA56;
|
||||
}
|
||||
else // unrolled
|
||||
{
|
||||
ItemID = 0xA57;
|
||||
|
||||
if (!from.HasGump<LogoutGump>())
|
||||
{
|
||||
CampfireEntry entry = Campfire.GetEntry(from);
|
||||
|
||||
if (entry?.Safe == true)
|
||||
from.SendGump(new LogoutGump(entry, this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
}
|
||||
|
||||
private class LogoutGump : Gump
|
||||
{
|
||||
private readonly Bedroll m_Bedroll;
|
||||
private readonly Timer m_CloseTimer;
|
||||
|
||||
private readonly CampfireEntry m_Entry;
|
||||
|
||||
public LogoutGump(CampfireEntry entry, Bedroll bedroll) : base(100, 0)
|
||||
{
|
||||
m_Entry = entry;
|
||||
m_Bedroll = bedroll;
|
||||
|
||||
m_CloseTimer = Timer.DelayCall(TimeSpan.FromSeconds(10.0), CloseGump);
|
||||
|
||||
AddBackground(0, 0, 400, 350, 0xA28);
|
||||
|
||||
AddHtmlLocalized(100, 20, 200, 35, 1011015); // <center>Logging out via camping</center>
|
||||
|
||||
/* Using a bedroll in the safety of a camp will log you out of the game safely.
|
||||
* If this is what you wish to do choose CONTINUE and you will be logged out.
|
||||
* Otherwise, select the CANCEL button to avoid logging out at this time.
|
||||
* The camp will remain secure for 10 seconds at which time this window will close
|
||||
* and you not be logged out.
|
||||
*/
|
||||
AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true);
|
||||
|
||||
AddButton(45, 298, 0xFA5, 0xFA7, 1);
|
||||
AddHtmlLocalized(80, 300, 110, 35, 1011011); // CONTINUE
|
||||
|
||||
AddButton(200, 298, 0xFA5, 0xFA7, 0);
|
||||
AddHtmlLocalized(235, 300, 110, 35, 1011012); // CANCEL
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, RelayInfo info)
|
||||
{
|
||||
PlayerMobile pm = m_Entry.Player;
|
||||
|
||||
m_CloseTimer.Stop();
|
||||
|
||||
if (Campfire.GetEntry(pm) != m_Entry)
|
||||
return;
|
||||
|
||||
if (info.ButtonID == 1 && m_Entry.Safe && m_Bedroll.Parent == null && m_Bedroll.IsAccessibleTo(pm)
|
||||
&& m_Bedroll.VerifyMove(pm) && m_Bedroll.Map == pm.Map && pm.InRange(m_Bedroll, 2))
|
||||
{
|
||||
pm.PlaceInBackpack(m_Bedroll);
|
||||
|
||||
pm.BedrollLogout = true;
|
||||
sender.Dispose();
|
||||
}
|
||||
|
||||
Campfire.RemoveEntry(m_Entry);
|
||||
}
|
||||
|
||||
private void CloseGump()
|
||||
{
|
||||
Campfire.RemoveEntry(m_Entry);
|
||||
m_Entry.Player.CloseGump<LogoutGump>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
[Flippable(0xA57, 0xA58, 0xA59)]
|
||||
public class Bedroll : Item
|
||||
{
|
||||
[Constructible]
|
||||
public Bedroll() : base(0xA57) => Weight = 5.0;
|
||||
|
||||
public Bedroll(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (Parent != null || !VerifyMove(from))
|
||||
return;
|
||||
|
||||
if (!from.InRange(this, 2))
|
||||
{
|
||||
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
|
||||
return;
|
||||
}
|
||||
|
||||
if (ItemID == 0xA57) // rolled
|
||||
{
|
||||
Direction dir = PlayerMobile.GetDirection4(from.Location, Location);
|
||||
|
||||
if (dir == Direction.North || dir == Direction.South)
|
||||
ItemID = 0xA55;
|
||||
else
|
||||
ItemID = 0xA56;
|
||||
}
|
||||
else // unrolled
|
||||
{
|
||||
ItemID = 0xA57;
|
||||
|
||||
if (!from.HasGump<LogoutGump>())
|
||||
{
|
||||
CampfireEntry entry = Campfire.GetEntry(from);
|
||||
|
||||
if (entry?.Safe == true)
|
||||
from.SendGump(new LogoutGump(entry, this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadEncodedInt();
|
||||
}
|
||||
|
||||
private class LogoutGump : Gump
|
||||
{
|
||||
private readonly Bedroll m_Bedroll;
|
||||
private readonly Timer m_CloseTimer;
|
||||
|
||||
private readonly CampfireEntry m_Entry;
|
||||
|
||||
public LogoutGump(CampfireEntry entry, Bedroll bedroll) : base(100, 0)
|
||||
{
|
||||
m_Entry = entry;
|
||||
m_Bedroll = bedroll;
|
||||
|
||||
m_CloseTimer = Timer.DelayCall(TimeSpan.FromSeconds(10.0), CloseGump);
|
||||
|
||||
AddBackground(0, 0, 400, 350, 0xA28);
|
||||
|
||||
AddHtmlLocalized(100, 20, 200, 35, 1011015); // <center>Logging out via camping</center>
|
||||
|
||||
/* Using a bedroll in the safety of a camp will log you out of the game safely.
|
||||
* If this is what you wish to do choose CONTINUE and you will be logged out.
|
||||
* Otherwise, select the CANCEL button to avoid logging out at this time.
|
||||
* The camp will remain secure for 10 seconds at which time this window will close
|
||||
* and you not be logged out.
|
||||
*/
|
||||
AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true);
|
||||
|
||||
AddButton(45, 298, 0xFA5, 0xFA7, 1);
|
||||
AddHtmlLocalized(80, 300, 110, 35, 1011011); // CONTINUE
|
||||
|
||||
AddButton(200, 298, 0xFA5, 0xFA7, 0);
|
||||
AddHtmlLocalized(235, 300, 110, 35, 1011012); // CANCEL
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, RelayInfo info)
|
||||
{
|
||||
PlayerMobile pm = m_Entry.Player;
|
||||
|
||||
m_CloseTimer.Stop();
|
||||
|
||||
if (Campfire.GetEntry(pm) != m_Entry)
|
||||
return;
|
||||
|
||||
if (info.ButtonID == 1 && m_Entry.Safe && m_Bedroll.Parent == null && m_Bedroll.IsAccessibleTo(pm)
|
||||
&& m_Bedroll.VerifyMove(pm) && m_Bedroll.Map == pm.Map && pm.InRange(m_Bedroll, 2))
|
||||
{
|
||||
pm.PlaceInBackpack(m_Bedroll);
|
||||
|
||||
pm.BedrollLogout = true;
|
||||
sender.Dispose();
|
||||
}
|
||||
|
||||
Campfire.RemoveEntry(m_Entry);
|
||||
}
|
||||
|
||||
private void CloseGump()
|
||||
{
|
||||
Campfire.RemoveEntry(m_Entry);
|
||||
m_Entry.Player.CloseGump<LogoutGump>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,194 +1,194 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public enum CampfireStatus
|
||||
{
|
||||
Burning,
|
||||
Extinguishing,
|
||||
Off
|
||||
}
|
||||
|
||||
public class Campfire : Item
|
||||
{
|
||||
public static readonly int SecureRange = 7;
|
||||
|
||||
private static readonly Dictionary<Mobile, CampfireEntry> m_Table = new Dictionary<Mobile, CampfireEntry>();
|
||||
|
||||
private readonly List<CampfireEntry> m_Entries;
|
||||
|
||||
private readonly Timer m_Timer;
|
||||
|
||||
public Campfire() : base(0xDE3)
|
||||
{
|
||||
Movable = false;
|
||||
Light = LightType.Circle300;
|
||||
|
||||
m_Entries = new List<CampfireEntry>();
|
||||
|
||||
Created = DateTime.UtcNow;
|
||||
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnTick);
|
||||
}
|
||||
|
||||
public Campfire(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime Created { get; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CampfireStatus Status
|
||||
{
|
||||
get
|
||||
{
|
||||
return ItemID switch
|
||||
{
|
||||
0xDE3 => CampfireStatus.Burning,
|
||||
0xDE9 => CampfireStatus.Extinguishing,
|
||||
_ => CampfireStatus.Off
|
||||
};
|
||||
}
|
||||
set
|
||||
{
|
||||
if (Status == value)
|
||||
return;
|
||||
|
||||
switch (value)
|
||||
{
|
||||
case CampfireStatus.Burning:
|
||||
ItemID = 0xDE3;
|
||||
Light = LightType.Circle300;
|
||||
break;
|
||||
|
||||
case CampfireStatus.Extinguishing:
|
||||
ItemID = 0xDE9;
|
||||
Light = LightType.Circle150;
|
||||
break;
|
||||
|
||||
default:
|
||||
ItemID = 0xDEA;
|
||||
Light = LightType.ArchedWindowEast;
|
||||
ClearEntries();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static CampfireEntry GetEntry(Mobile player)
|
||||
{
|
||||
m_Table.TryGetValue(player, out CampfireEntry value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public static void RemoveEntry(CampfireEntry entry)
|
||||
{
|
||||
m_Table.Remove(entry.Player);
|
||||
entry.Fire.m_Entries.Remove(entry);
|
||||
}
|
||||
|
||||
private void OnTick()
|
||||
{
|
||||
DateTime now = DateTime.UtcNow;
|
||||
TimeSpan age = now - Created;
|
||||
|
||||
if (age >= TimeSpan.FromSeconds(100.0))
|
||||
Delete();
|
||||
else if (age >= TimeSpan.FromSeconds(90.0))
|
||||
Status = CampfireStatus.Off;
|
||||
else if (age >= TimeSpan.FromSeconds(60.0))
|
||||
Status = CampfireStatus.Extinguishing;
|
||||
|
||||
if (Status == CampfireStatus.Off || Deleted)
|
||||
return;
|
||||
|
||||
foreach (CampfireEntry entry in m_Entries.ToList())
|
||||
if (!entry.Valid || entry.Player.NetState == null)
|
||||
RemoveEntry(entry);
|
||||
else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0))
|
||||
{
|
||||
entry.Safe = true;
|
||||
entry.Player.SendLocalizedMessage(500621); // The camp is now secure.
|
||||
}
|
||||
|
||||
IPooledEnumerable<NetState> eable = GetClientsInRange(SecureRange);
|
||||
|
||||
foreach (NetState state in eable)
|
||||
if (state.Mobile is PlayerMobile pm && GetEntry(pm) == null)
|
||||
{
|
||||
CampfireEntry entry = new CampfireEntry(pm, this);
|
||||
|
||||
m_Table[pm] = entry;
|
||||
m_Entries.Add(entry);
|
||||
|
||||
pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp.
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
}
|
||||
|
||||
private void ClearEntries()
|
||||
{
|
||||
if (m_Entries == null)
|
||||
return;
|
||||
|
||||
foreach (CampfireEntry entry in m_Entries.ToList())
|
||||
RemoveEntry(entry);
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
m_Timer?.Stop();
|
||||
|
||||
ClearEntries();
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public class CampfireEntry
|
||||
{
|
||||
private bool m_Safe;
|
||||
|
||||
public CampfireEntry(PlayerMobile player, Campfire fire)
|
||||
{
|
||||
Player = player;
|
||||
Fire = fire;
|
||||
Start = DateTime.UtcNow;
|
||||
m_Safe = false;
|
||||
}
|
||||
|
||||
public PlayerMobile Player { get; }
|
||||
|
||||
public Campfire Fire { get; }
|
||||
|
||||
public DateTime Start { get; }
|
||||
|
||||
public bool Valid => !Fire.Deleted && Fire.Status != CampfireStatus.Off && Player.Map == Fire.Map &&
|
||||
Player.InRange(Fire, Campfire.SecureRange);
|
||||
|
||||
public bool Safe
|
||||
{
|
||||
get => Valid && m_Safe;
|
||||
set => m_Safe = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public enum CampfireStatus
|
||||
{
|
||||
Burning,
|
||||
Extinguishing,
|
||||
Off
|
||||
}
|
||||
|
||||
public class Campfire : Item
|
||||
{
|
||||
public static readonly int SecureRange = 7;
|
||||
|
||||
private static readonly Dictionary<Mobile, CampfireEntry> m_Table = new Dictionary<Mobile, CampfireEntry>();
|
||||
|
||||
private readonly List<CampfireEntry> m_Entries;
|
||||
|
||||
private readonly Timer m_Timer;
|
||||
|
||||
public Campfire() : base(0xDE3)
|
||||
{
|
||||
Movable = false;
|
||||
Light = LightType.Circle300;
|
||||
|
||||
m_Entries = new List<CampfireEntry>();
|
||||
|
||||
Created = DateTime.UtcNow;
|
||||
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnTick);
|
||||
}
|
||||
|
||||
public Campfire(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime Created { get; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public CampfireStatus Status
|
||||
{
|
||||
get
|
||||
{
|
||||
return ItemID switch
|
||||
{
|
||||
0xDE3 => CampfireStatus.Burning,
|
||||
0xDE9 => CampfireStatus.Extinguishing,
|
||||
_ => CampfireStatus.Off
|
||||
};
|
||||
}
|
||||
set
|
||||
{
|
||||
if (Status == value)
|
||||
return;
|
||||
|
||||
switch (value)
|
||||
{
|
||||
case CampfireStatus.Burning:
|
||||
ItemID = 0xDE3;
|
||||
Light = LightType.Circle300;
|
||||
break;
|
||||
|
||||
case CampfireStatus.Extinguishing:
|
||||
ItemID = 0xDE9;
|
||||
Light = LightType.Circle150;
|
||||
break;
|
||||
|
||||
default:
|
||||
ItemID = 0xDEA;
|
||||
Light = LightType.ArchedWindowEast;
|
||||
ClearEntries();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static CampfireEntry GetEntry(Mobile player)
|
||||
{
|
||||
m_Table.TryGetValue(player, out CampfireEntry value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public static void RemoveEntry(CampfireEntry entry)
|
||||
{
|
||||
m_Table.Remove(entry.Player);
|
||||
entry.Fire.m_Entries.Remove(entry);
|
||||
}
|
||||
|
||||
private void OnTick()
|
||||
{
|
||||
DateTime now = DateTime.UtcNow;
|
||||
TimeSpan age = now - Created;
|
||||
|
||||
if (age >= TimeSpan.FromSeconds(100.0))
|
||||
Delete();
|
||||
else if (age >= TimeSpan.FromSeconds(90.0))
|
||||
Status = CampfireStatus.Off;
|
||||
else if (age >= TimeSpan.FromSeconds(60.0))
|
||||
Status = CampfireStatus.Extinguishing;
|
||||
|
||||
if (Status == CampfireStatus.Off || Deleted)
|
||||
return;
|
||||
|
||||
foreach (CampfireEntry entry in m_Entries.ToList())
|
||||
if (!entry.Valid || entry.Player.NetState == null)
|
||||
RemoveEntry(entry);
|
||||
else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0))
|
||||
{
|
||||
entry.Safe = true;
|
||||
entry.Player.SendLocalizedMessage(500621); // The camp is now secure.
|
||||
}
|
||||
|
||||
IPooledEnumerable<NetState> eable = GetClientsInRange(SecureRange);
|
||||
|
||||
foreach (NetState state in eable)
|
||||
if (state.Mobile is PlayerMobile pm && GetEntry(pm) == null)
|
||||
{
|
||||
CampfireEntry entry = new CampfireEntry(pm, this);
|
||||
|
||||
m_Table[pm] = entry;
|
||||
m_Entries.Add(entry);
|
||||
|
||||
pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp.
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
}
|
||||
|
||||
private void ClearEntries()
|
||||
{
|
||||
if (m_Entries == null)
|
||||
return;
|
||||
|
||||
foreach (CampfireEntry entry in m_Entries.ToList())
|
||||
RemoveEntry(entry);
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
m_Timer?.Stop();
|
||||
|
||||
ClearEntries();
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public class CampfireEntry
|
||||
{
|
||||
private bool m_Safe;
|
||||
|
||||
public CampfireEntry(PlayerMobile player, Campfire fire)
|
||||
{
|
||||
Player = player;
|
||||
Fire = fire;
|
||||
Start = DateTime.UtcNow;
|
||||
m_Safe = false;
|
||||
}
|
||||
|
||||
public PlayerMobile Player { get; }
|
||||
|
||||
public Campfire Fire { get; }
|
||||
|
||||
public DateTime Start { get; }
|
||||
|
||||
public bool Valid => !Fire.Deleted && Fire.Status != CampfireStatus.Off && Player.Map == Fire.Map &&
|
||||
Player.InRange(Fire, Campfire.SecureRange);
|
||||
|
||||
public bool Safe
|
||||
{
|
||||
get => Valid && m_Safe;
|
||||
set => m_Safe = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue