From 752d7ff18c2e4901296e86af5f040edb7a48efa9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B0=B8=E5=AE=89404?=
<101850798+YongAn404@users.noreply.github.com>
Date: Tue, 5 Nov 2024 10:28:37 +0800
Subject: [PATCH] =?UTF-8?q?=E7=88=86=E7=88=86=E7=88=86=E7=88=86=20(#22)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* 紧急补丁
* 误触依赖回滚
* 问题修复与排版调整
* 自动化、注解更新和功能修复
* 错误的版本
* 错误的版本
* 错误的版本
* Docfx 修复
* docs 测试
* 测试
* 补全依赖
* test
* 正式修复
* ...
* 更新文档
* 许可证的更新和部分修正
* 命名空间修正
* 修复异常和清理规则
* u index
---
.github/workflows/dev.yml | 13 +-
.github/workflows/docs.yml | 53 ++
.github/workflows/master.yml | 13 +-
Commands/ExpCommand.cs | 4 +-
Components/CapacityList.cs | 2 +-
LICENSE.txt | 661 +++++--------------
Players/CustomPlayer.cs | 67 +-
Players/FramePlayer.cs | 188 ++++--
Players/HintManager.cs | 27 +-
Players/PlayerTitle.cs | 16 +-
Properties/AssemblyInfo.cs | 4 +-
Roles/CustomRolePlus.cs | 27 +-
Roles/MusicManager.cs | 6 +-
Roles/Properties/CustomRolePlusProperties.cs | 8 +-
Roles/Properties/MoreProperties.cs | 10 +-
Roles/Properties/SkillProperties.cs | 12 +-
Roles/Properties/SpawnProperties.cs | 21 +-
Roles/SkillManager.cs | 26 +-
SECURITY.md | 7 +
YongAnFrame.csproj | 53 +-
YongAnFrame.nuspec | 4 +-
YongAnFrameCore.cs => YongAnFramePlugin.cs | 1 +
docs/docfx.json | 44 ++
docs/index.md | 34 +
docs/toc.yml | 6 +
packages.config | 2 +-
26 files changed, 583 insertions(+), 726 deletions(-)
create mode 100644 .github/workflows/docs.yml
create mode 100644 SECURITY.md
rename YongAnFrameCore.cs => YongAnFramePlugin.cs (96%)
create mode 100644 docs/docfx.json
create mode 100644 docs/index.md
create mode 100644 docs/toc.yml
diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml
index 282f802..d1ece54 100644
--- a/.github/workflows/dev.yml
+++ b/.github/workflows/dev.yml
@@ -5,23 +5,22 @@ name: YongAnFrame Dev CI
on:
push:
- branches:
- - dev
+ branches: ["dev"]
pull_request:
- branches:
- - dev
+ branches: ["dev"]
workflow_dispatch:
jobs:
build:
runs-on: windows-latest
steps:
- - uses: actions/checkout@v4
+ - name: Setup Checkout
+ uses: actions/checkout@v4
- - name: Setup .NET
+ - name: Setup Dotnet
uses: actions/setup-dotnet@v4
- name: Setup NuGet
- uses: NuGet/setup-nuget@v2.0.0
+ uses: NuGet/setup-nuget@v2
- name: Restore NuGet packages
run: nuget restore YongAnFrame.sln
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 0000000..36f6bdd
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,53 @@
+# Simple workflow for deploying static content to GitHub Pages
+name: Build and Publish Docfx Pages
+
+on:
+ # Runs on pushes targeting the default branch
+ push:
+ branches: ["master"]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ publish-docs:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: windows-latest
+ steps:
+ - name: Dotnet Checkout
+ uses: actions/checkout@v4
+
+ - name: Dotnet Setup
+ uses: actions/setup-dotnet@v4
+
+ - name: Setup NuGet
+ uses: NuGet/setup-nuget@v2
+
+ - name: Restore NuGet packages
+ run: nuget restore YongAnFrame.sln
+
+ - run: dotnet tool update -g docfx
+ - run: docfx docs/docfx.json
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ # Upload entire repository
+ path: 'docs/_site'
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
\ No newline at end of file
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 50733b8..556f7a5 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -5,23 +5,22 @@ name: YongAnFrame Master CI
on:
push:
- branches:
- - master
+ branches: ["master"]
pull_request:
- branches:
- - master
+ branches: ["master"]
workflow_dispatch:
jobs:
build:
runs-on: windows-latest
steps:
- - uses: actions/checkout@v4
+ - name: Setup Checkout
+ uses: actions/checkout@v4
- - name: Setup .NET
+ - name: Setup Dotnet
uses: actions/setup-dotnet@v4
- name: Setup NuGet
- uses: NuGet/setup-nuget@v2.0.0
+ uses: NuGet/setup-nuget@v2
- name: Restore NuGet packages
run: nuget restore YongAnFrame.sln
diff --git a/Commands/ExpCommand.cs b/Commands/ExpCommand.cs
index 0a0c6c3..1a6dc8a 100644
--- a/Commands/ExpCommand.cs
+++ b/Commands/ExpCommand.cs
@@ -2,10 +2,8 @@
using Exiled.API.Features;
using Exiled.Permissions.Extensions;
using System;
-using YongAnFrame;
-using YongAnFrame.Commands;
-namespace BAPlugin.Command
+namespace YongAnFrame.Commands
{
[CommandHandler(typeof(RemoteAdminCommandHandler))]
public class ExpCommand : ICommand
diff --git a/Components/CapacityList.cs b/Components/CapacityList.cs
index fc4b157..3490115 100644
--- a/Components/CapacityList.cs
+++ b/Components/CapacityList.cs
@@ -22,7 +22,7 @@ public T this[int index]
}
set
{
-
+ list[index] = value;
}
}
diff --git a/LICENSE.txt b/LICENSE.txt
index 8000a6f..153d416 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,504 +1,165 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
- USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random
- Hacker.
-
- , 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
\ No newline at end of file
diff --git a/Players/CustomPlayer.cs b/Players/CustomPlayer.cs
index f670c2e..9b60650 100644
--- a/Players/CustomPlayer.cs
+++ b/Players/CustomPlayer.cs
@@ -5,65 +5,36 @@ namespace YongAnFrame.Players
public abstract class CustomPlayer(FramePlayer player)
{
///
- /// 拥有该实例的框架玩家
+ /// 获取拥有该实例的
///
public FramePlayer FramePlayer { get; private set; } = player;
- ///
- /// 是否有效
- ///
+ ///
public bool IsInvalid => FramePlayer == null;
- ///
- /// 实例拥有的自定义角色
- ///
+ ///
public CustomRolePlus CustomRolePlus => FramePlayer.CustomRolePlus;
- ///
- /// 提示系统管理器
- ///
+ ///
public HintManager HintManager => FramePlayer.HintManager;
- ///
- /// 正在使用的主要自定义算法
- ///
- public ICustomAlgorithm CustomAlgorithm { get => FramePlayer.CustomAlgorithm; set=> FramePlayer.CustomAlgorithm = value; }
- ///
- /// 玩家等级
- ///
+ ///
+ public ICustomAlgorithm CustomAlgorithm { get => FramePlayer.CustomAlgorithm; set => FramePlayer.CustomAlgorithm = value; }
+ ///
public ulong Level { get => FramePlayer.Level; set => FramePlayer.Level = value; }
- ///
- /// 玩家经验
- ///
+ ///
public ulong Exp { get => FramePlayer.Exp; set => FramePlayer.Exp = value; }
- ///
- /// 玩家经验倍率
- ///
+ ///
public float ExpMultiplier { get => FramePlayer.ExpMultiplier; set => FramePlayer.ExpMultiplier = value; }
- ///
- /// 玩家批准绕过DNT
- ///
+ ///
public bool IsBDNT { get => FramePlayer.IsBDNT; set => FramePlayer.IsBDNT = value; }
- ///
- /// 正在使用的名称称号
- ///
+ ///
public PlayerTitle UsingTitles { get => FramePlayer.UsingTitles; set => FramePlayer.UsingTitles = value; }
-
- ///
- /// 正在使用的排名称号
- ///
+ ///
public PlayerTitle UsingRankTitles { get => FramePlayer.UsingRankTitles; set => FramePlayer.UsingRankTitles = value; }
-
- ///
- /// 添加经验
- ///
- /// 数值
- /// 原因
- public void AddExp(ulong exp, string name = "未知原因")
- {
- FramePlayer.AddExp(exp, name);
- }
- ///
- /// 调用后该实例会立刻无效
- /// 调用后该实例会立刻无效
- /// 调用后该实例会立刻无效
- ///
+
+ ///
+ public void AddExp(ulong exp, string name = "未知原因") => FramePlayer.AddExp(exp, name);
+
+ public void UpdateShowInfoList() => FramePlayer.UpdateShowInfo();
+
+ ///
public virtual void Invalid()
{
FramePlayer = null;
diff --git a/Players/FramePlayer.cs b/Players/FramePlayer.cs
index a0e79c4..dd08c61 100644
--- a/Players/FramePlayer.cs
+++ b/Players/FramePlayer.cs
@@ -18,19 +18,19 @@ public sealed class FramePlayer : ICustomAlgorithm
private static readonly Dictionary dictionary = [];
///
- /// 拥有该实例的Exiled玩家
+ /// 获取拥有该实例的
///
public Player ExPlayer { get; private set; }
///
- /// 有效的框架玩家列表
+ /// 获取有效的框架玩家列表
///
public static IReadOnlyCollection List => [.. dictionary.Values];
///
- /// 是否有效
+ /// 获取的玩家是否有效
///
public bool IsInvalid { get => ExPlayer == null; }
///
- /// 实例拥有的自定义角色
+ /// 获取玩家拥有的自定义角色
///
public CustomRolePlus CustomRolePlus
{
@@ -44,40 +44,94 @@ public CustomRolePlus CustomRolePlus
}
}
///
- /// 提示系统管理器
+ /// 获取或设置玩家的提示系统管理器
///
public HintManager HintManager { get; private set; }
///
- /// 正在使用的主要自定义算法
+ /// 获取或设置玩家正在使用的主要自定义算法
///
public ICustomAlgorithm CustomAlgorithm { get; set; }
///
- /// 玩家等级
+ /// 获取或设置玩家的等级
///
public ulong Level { get; set; }
///
- /// 玩家经验
+ /// 获取或设置玩家的经验
///
public ulong Exp { get; set; }
///
- /// 玩家经验倍率
+ /// 获取或设置玩家的经验倍率
///
public float ExpMultiplier { get; set; }
///
- /// 玩家批准绕过DNT
+ /// 获取或设置玩家的批准绕过DNT
///
public bool IsBDNT { get; set; }
///
- /// 正在使用的名称称号
+ /// 获取或设置玩家正在使用的名称称号
///
public PlayerTitle UsingTitles { get => usingTitles; set { if (value != null && !value.IsRank) { usingTitles = value; } } }
///
- /// 正在使用的排名称号
+ /// 获取或设置玩家正在使用的地位称号
///
- public PlayerTitle UsingRankTitles { get => usingRankTitles; set { if (value != null && value.IsRank) { usingRankTitles = value; } } }
+ public PlayerTitle UsingRankTitles
+ {
+ get => usingRankTitles;
+ set
+ {
+ if (value != null && value.IsRank)
+ {
+ usingRankTitles = value;
+ }
+ }
+ }
+
+ #region EX增强
+ ///
+ /// 获取或设置玩家的地位名称。
+ ///
+ public string RankName
+ {
+ get => ExPlayer.RankName;
+ set
+ {
+ if (RankName == value)
+ {
+ ExPlayer.RankName = value;
+ }
+ }
+ }
+ ///
+ /// 获取或设置玩家的地位颜色。
+ ///
+ public string RankColor
+ {
+ get => ExPlayer.RankColor; set
+ {
+ if (RankColor == value)
+ {
+ ExPlayer.RankColor = value;
+ }
+ }
+ }
+ ///
+ /// 获取或设置玩家的昵称,如果为 null,则设置原始昵称。
+ ///
+ public string CustomName
+ {
+ get => ExPlayer.CustomName;
+ set
+ {
+ if (CustomName == value)
+ {
+ ExPlayer.CustomName = value;
+ }
+ }
+ }
+ #endregion
#region Static
public static void SubscribeStaticEvents()
@@ -118,10 +172,11 @@ private static void OnStaticDestroying(DestroyingEventArgs args)
internal FramePlayer(Player player)
{
ExPlayer = player;
- HintManager = new HintManager(this);
dictionary.Add(ExPlayer.Id, this);
+ HintManager = new HintManager(this);
CustomAlgorithm = this;
Events.Handlers.FramePlayer.OnFramePlayerCreated(new FramePlayerCreatedEventArgs(this));
+ UpdateShowInfo();
}
///
@@ -149,7 +204,7 @@ public void AddExp(ulong exp, string name = "未知原因")
}
if (oldLevel < Level)
{
- UpdateShowInfoList();
+ UpdateShowInfo();
HintManager.MessageTexts.Add(new Text($"恭喜你从{oldLevel}级到达{Level}级,距离下一级需要{Exp}/{needExp}经验", 8));
}
}
@@ -159,59 +214,35 @@ public void AddExp(ulong exp, string name = "未知原因")
private readonly CoroutineHandle[] coroutines = new CoroutineHandle[2];
- internal void UpdateShowInfoList()
+ ///
+ /// 更新显示的服务器列表信息
+ ///
+ public void UpdateShowInfo()
{
if (ExPlayer.IsNPC) return;
if (ExPlayer.GlobalBadge != null)
{
- ExPlayer.CustomName = $"[LV:{Level}][全球徽章]{ExPlayer.Nickname}";
- if (!string.IsNullOrEmpty(CustomRolePlus.Name))
+ CustomName = $"[LV:{Level}][全球徽章]{ExPlayer.Nickname}";
+ if (CustomRolePlus != null)
{
- ExPlayer.RankName = $"*{ExPlayer.GlobalBadge.Value.Text}* {CustomRolePlus.Name}";
+ RankName = $"*{ExPlayer.GlobalBadge.Value.Text}* {CustomRolePlus.Name}";
}
else
{
- ExPlayer.RankName = $"{ExPlayer.GlobalBadge.Value.Text}";
+ RankName = $"{ExPlayer.GlobalBadge.Value.Text}";
}
- ExPlayer.RankColor = $"{ExPlayer.GlobalBadge.Value.Color}";
+ RankColor = $"{ExPlayer.GlobalBadge.Value.Color}";
return;
}
- if (usingRankTitles != null)
- {
- if (usingRankTitles.DynamicCommand != null)
- {
- Timing.KillCoroutines(coroutines[0]);
- coroutines[0] = Timing.RunCoroutine(DynamicRankTitlesShow());
- }
- else
- {
- if (!string.IsNullOrEmpty(usingRankTitles.Color))
- {
- ExPlayer.RankColor = usingRankTitles.Color;
- }
- else
- {
- if (CustomRolePlus != null)
- {
- ExPlayer.RankColor = CustomRolePlus.NameColor;
- }
- else
- {
- ExPlayer.RankColor = null;
- }
- }
+ string rankColor = null;
+ string rankName = null;
- if (CustomRolePlus != null)
- {
- ExPlayer.RankName = $"{CustomRolePlus.Name} *{usingRankTitles.Name}*";
- }
- else
- {
- ExPlayer.RankName = usingRankTitles.Name;
- }
- }
+ if (CustomRolePlus != null)
+ {
+ rankName = CustomRolePlus.Name;
+ rankColor = CustomRolePlus.NameColor;
}
if (usingTitles != null)
@@ -223,28 +254,45 @@ internal void UpdateShowInfoList()
}
else
{
- ExPlayer.CustomName = $"[LV:{Level}][{usingTitles.Name}]{ExPlayer.Nickname}";
+ CustomName = $"[LV:{Level}][{usingTitles.Name}]{ExPlayer.Nickname}";
if (!string.IsNullOrEmpty(usingTitles.Color))
{
- ExPlayer.RankColor = usingTitles.Color;
+ rankColor = usingTitles.Color;
}
}
}
else
{
- if (CustomRolePlus != null)
+ ExPlayer.CustomName = $"[LV:{Level}]{ExPlayer.Nickname}";
+ }
+
+ if (usingRankTitles != null)
+ {
+ if (usingRankTitles.DynamicCommand != null)
{
- ExPlayer.RankName = CustomRolePlus.Name;
- ExPlayer.RankColor = CustomRolePlus.NameColor;
+ Timing.KillCoroutines(coroutines[0]);
+ coroutines[0] = Timing.RunCoroutine(DynamicRankTitlesShow());
}
else
{
- ExPlayer.RankName = string.Empty;
- ExPlayer.RankColor = string.Empty;
+ if (CustomRolePlus != null)
+ {
+ rankName = $"{CustomRolePlus.Name} *{usingRankTitles.Name}*";
+ }
+ else
+ {
+ rankName = usingRankTitles.Name;
+ }
+
+ if (!string.IsNullOrEmpty(usingRankTitles.Color))
+ {
+ rankColor = usingRankTitles.Color;
+ }
}
}
- if (usingTitles == null) ExPlayer.CustomName = $"[LV:{Level}]{ExPlayer.Nickname}";
+ RankColor = rankColor;
+ RankName = rankName;
}
private IEnumerator DynamicRankTitlesShow()
@@ -255,14 +303,16 @@ private IEnumerator DynamicRankTitlesShow()
{
if (CustomRolePlus != null)
{
- ExPlayer.RankName = $"{CustomRolePlus.Name} *{command[0]}*";
+ RankName = $"{CustomRolePlus.Name} *{command[0]}*";
}
else
{
- ExPlayer.RankName = $"{command[0]}";
+ RankName = $"{command[0]}";
+ }
+ if (usingRankTitles == null)
+ {
+ RankColor = command[1] != "null" ? command[1] : RankColor;
}
-
- ExPlayer.RankColor = command[1] != "null" ? command[1] : ExPlayer.RankColor;
yield return Timing.WaitForSeconds(float.Parse(command[2]));
}
}
@@ -273,10 +323,10 @@ private IEnumerator DynamicTitlesShow()
{
foreach (var command in usingTitles.DynamicCommand)
{
- ExPlayer.CustomName = $"[LV:{Level}][{command[0]}]{ExPlayer.Nickname}";
+ CustomName = $"[LV:{Level}][{command[0]}]{ExPlayer.Nickname}";
if (usingRankTitles == null)
{
- ExPlayer.RankColor = command[1] != "null" ? command[1] : ExPlayer.RankColor;
+ RankColor = command[1] != "null" ? command[1] : RankColor;
}
yield return Timing.WaitForSeconds(float.Parse(command[2]));
}
@@ -284,6 +334,7 @@ private IEnumerator DynamicTitlesShow()
}
#endregion
+ ///
public ulong GetNeedUpLevel(ulong level)
{
return (ulong)(100 + Math.Floor(level / 10f) * 100);
@@ -320,6 +371,7 @@ public static FramePlayer Get(int numId)
public void Invalid()
{
Events.Handlers.FramePlayer.OnFramePlayerInvalidating(new FramePlayerInvalidatingEventArgs(this));
+ CustomRolePlus?.RemoveRole(this);
dictionary.Remove(ExPlayer.Id);
HintManager?.Clean();
ExPlayer = null;
diff --git a/Players/HintManager.cs b/Players/HintManager.cs
index b7a0879..820c4de 100644
--- a/Players/HintManager.cs
+++ b/Players/HintManager.cs
@@ -9,11 +9,7 @@ namespace YongAnFrame.Players
///
public sealed class HintManager
{
- ///
- /// 拥有该实例的框架玩家
- ///
private readonly FramePlayer fPlayer;
-
private readonly CoroutineHandle coroutine;
public Text[] CustomText = new Text[20];
@@ -25,15 +21,16 @@ public HintManager(FramePlayer player)
coroutine = Timing.RunCoroutine(Update());
}
- public IEnumerator Update()
+ private IEnumerator Update()
{
while (true)
{
+ CustomText = new Text[20];
Events.Handlers.FramePlayer.OnFramerHintUpdate();
string[] text = new string[36];
int used = 0;
- text[used] = $"YongAnFrame 1.0.0-Beta2";
+ text[used] = $"YongAnFrame 1.0.0-Beta3";
if (fPlayer.ExPlayer.DoNotTrack && !fPlayer.IsBDNT)
{
@@ -59,14 +56,14 @@ public IEnumerator Update()
}
else
{
- text[used] = string.Empty;
+ text[used] += Text.Empty;
}
used++;
}
foreach (Text data in CustomText)
{
- text[used] = data ?? string.Empty;
+ text[used] += data ?? Text.Empty;
used++;
}
@@ -86,15 +83,16 @@ public IEnumerator Update()
}
else
{
- text[used] = string.Empty;
+ text[used] += Text.Empty;
}
used++;
}
- text[used] += "";
+ text[34] = "";
if (fPlayer.CustomRolePlus != null)
{
- text[34] = fPlayer.CustomRolePlus.Name;
+
+ text[34] += $"{fPlayer.CustomRolePlus.Name}";
text[35] = fPlayer.CustomRolePlus.Description;
}
@@ -103,16 +101,21 @@ public IEnumerator Update()
}
}
+ ///
+ /// 立刻停用这个提示系统管理器
+ ///
public void Clean()
{
Timing.KillCoroutines(coroutine);
}
- public class Text(string text, float duration, int size = 0)
+ public class Text(string text, float duration)
{
public string Content { get; private set; } = text;
public float Duration { get; internal set; } = duration;
+ public static string Empty => "占";
+
public override string ToString()
{
return Content;
diff --git a/Players/PlayerTitle.cs b/Players/PlayerTitle.cs
index e47e369..46f0e42 100644
--- a/Players/PlayerTitle.cs
+++ b/Players/PlayerTitle.cs
@@ -8,25 +8,25 @@ namespace YongAnFrame.Players
public sealed class PlayerTitle
{
///
- /// 称号ID
+ /// 获取或设置称号的ID
///
public uint Id { get; set; }
///
- /// 称号名称
+ /// 获取或设置称号的名称
///
public string Name { get; set; }
///
- /// 称号颜色
+ /// 获取或设置称号的颜色
///
public string Color { get; set; }
///
- /// 是否为Rank
+ /// 获取或设置称号是否为Rank
///
public bool IsRank { get; set; }
///
- /// 动态指令集
+ /// 获取称号的动态指令集
///
- public List DynamicCommand { get; set; }
+ public List DynamicCommand { get; private set; }
public PlayerTitle(uint id, string name, string color, bool isRank, string dynamicCommandString)
{
@@ -37,6 +37,10 @@ public PlayerTitle(uint id, string name, string color, bool isRank, string dynam
SetDynamicCommand(dynamicCommandString);
}
+ ///
+ /// 设置称号的动态指令集
+ ///
+ ///
public void SetDynamicCommand(string dynamicCommandString)
{
List dynamicCommands = null;
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index fc4bdde..a9acd8d 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.10")]
-[assembly: AssemblyFileVersion("1.0.0.10")]
+[assembly: AssemblyVersion("1.0.0.11")]
+[assembly: AssemblyFileVersion("1.0.0.11")]
diff --git a/Roles/CustomRolePlus.cs b/Roles/CustomRolePlus.cs
index ee7f753..bb45873 100644
--- a/Roles/CustomRolePlus.cs
+++ b/Roles/CustomRolePlus.cs
@@ -11,7 +11,6 @@
using System;
using System.Collections.Generic;
using YongAnFrame.Players;
-using YongAnFrame.Role.Properties;
using YongAnFrame.Roles.Enums;
using YongAnFrame.Roles.Interfaces;
using YongAnFrame.Roles.Properties;
@@ -25,28 +24,28 @@ public abstract class CustomRolePlus : CustomRole
///
public override bool IgnoreSpawnSystem { get; set; } = false;
///
- /// 生成属性
+ /// 获取或设置自定义角色的生成属性
///
- public new virtual Role.Properties.SpawnProperties SpawnProperties { get; set; } = new Role.Properties.SpawnProperties();
+ public new virtual Properties.SpawnProperties SpawnProperties { get; set; } = new Properties.SpawnProperties();
///
- /// 是否开启生成
+ /// 获取或设置自定义角色是否开启生成
///
public bool IsStaetSpawn { get; set; } = true;
internal Dictionary BaseData { get; } = [];
///
- /// 更多属性
+ /// 获取或设置自定义角色的更多属性
///
public virtual MoreProperties MoreProperties { get; set; } = new MoreProperties();
///
- /// 名字颜色
+ /// 获取或设置自定义角色的名字颜色
///
public abstract string NameColor { get; set; }
///
- /// 角色联动死亡文本表
+ /// 获取自定义角色的联动死亡文本表
///
public Dictionary RoleDeathText { get; } = [];
///
- /// 生成前的目标角色
+ /// 获取或设置自定义角色的生成前的目标角色
///
public virtual RoleTypeId OldRole { get; set; } = RoleTypeId.None;
@@ -138,7 +137,7 @@ public virtual void AddRole(FramePlayer fPlayer)
{
MusicManager.Instance.Play(SpawnProperties.MusicFileName, $"{Name}");
}
- fPlayer.UpdateShowInfoList();
+ fPlayer.UpdateShowInfo();
}
protected virtual void AddRoleData(FramePlayer fPlayer)
@@ -160,7 +159,11 @@ protected virtual void AddRoleData(FramePlayer fPlayer)
/// EX玩家
public override void RemoveRole(Player player)
{
- RemoveRole(player.ToFPlayer());
+ FramePlayer fPlayer = player.ToFPlayer();
+ if (fPlayer != null)
+ {
+ RemoveRole(player.ToFPlayer());
+ }
}
///
/// 给玩家移除这个角色
@@ -168,7 +171,7 @@ public override void RemoveRole(Player player)
/// 框架玩家
public virtual void RemoveRole(FramePlayer fPlayer)
{
- if (!Check(fPlayer) || fPlayer == null) return;
+ if (!Check(fPlayer)) return;
Log.Debug($"已删除{fPlayer.ExPlayer.Nickname}的{Name}({Id})角色");
if (Check(fPlayer, out CustomRolePlusProperties data) && !data.IsDeathHandling)
{
@@ -177,7 +180,7 @@ public virtual void RemoveRole(FramePlayer fPlayer)
base.RemoveRole(fPlayer.ExPlayer);
BaseData.Remove(fPlayer);
fPlayer.ExPlayer.ShowHint($"", 0.1f);
- fPlayer.UpdateShowInfoList();
+ fPlayer.UpdateShowInfo();
}
#region TrySpawn
diff --git a/Roles/MusicManager.cs b/Roles/MusicManager.cs
index 8004c79..d71c7ad 100644
--- a/Roles/MusicManager.cs
+++ b/Roles/MusicManager.cs
@@ -21,7 +21,7 @@ public sealed class MusicManager
private int num = 1;
public static MusicManager Instance => instance;
///
- /// 放音频的玩家(NPC)
+ /// 获取或设置放音频的玩家(NPC)
///
public Dictionary MusicNpc { get; } = [];
private MusicManager() { }
@@ -72,7 +72,7 @@ public AudioPlayerBase Play(string musicFile, string npcName)
return Play(musicFile, npcName, new TrackEvent(), null, 0, [], false, 80, false);
}
///
- ///
+ /// 播放音频
///
/// 音频文件
/// NPC名称
@@ -84,7 +84,7 @@ public AudioPlayerBase Play(string musicFile, string npcName, FramePlayer source
return Play(musicFile, npcName, new TrackEvent(), source, distance, [], false, 80, false);
}
///
- ///
+ /// 播放音频
///
/// 音频文件
/// NPC名称
diff --git a/Roles/Properties/CustomRolePlusProperties.cs b/Roles/Properties/CustomRolePlusProperties.cs
index d85ac60..d616143 100644
--- a/Roles/Properties/CustomRolePlusProperties.cs
+++ b/Roles/Properties/CustomRolePlusProperties.cs
@@ -1,6 +1,4 @@
-using YongAnFrame.Roles;
-
-namespace YongAnFrame.Role.Properties
+namespace YongAnFrame.Roles.Properties
{
///
/// 自定义角色玩家数据
@@ -8,11 +6,11 @@ namespace YongAnFrame.Role.Properties
public class CustomRolePlusProperties
{
///
- /// 技能管理器
+ /// 获取或设置自定义角色的技能管理器
///
public SkillManager[] SkillManagers { get; set; }
///
- /// 是否正常死亡
+ /// 获取或设置自定义角色是否正常死亡
///
public bool IsDeathHandling { get; set; }
}
diff --git a/Roles/Properties/MoreProperties.cs b/Roles/Properties/MoreProperties.cs
index ca100f5..ed3ff56 100644
--- a/Roles/Properties/MoreProperties.cs
+++ b/Roles/Properties/MoreProperties.cs
@@ -3,23 +3,23 @@
public struct MoreProperties
{
///
- /// 伤害加成倍数
+ /// 获取或设置伤害加成倍数
///
public float AttackDamageMultiplier { get; set; } = 1;
///
- /// 攻击无视护甲
+ /// 获取或设置攻击无视护甲
///
public bool IsAttackIgnoresArmor { get; set; } = false;
///
- /// 攻击无视减Ahp伤盾
+ /// 获取或设置攻击无视减Ahp伤盾
///
public bool IsAttackIgnoresAhp { get; set; } = false;
///
- /// 伤害减伤倍数
+ /// 获取或设置伤害减伤倍数
///
public float DamageResistanceMultiplier { get; set; } = 1;
///
- /// 基础移动速度倍数
+ /// 获取或设置基础移动速度倍数
///
public float BaseMovementSpeedMultiplier { get; set; } = 1;
diff --git a/Roles/Properties/SkillProperties.cs b/Roles/Properties/SkillProperties.cs
index 728ecf6..0d51d2d 100644
--- a/Roles/Properties/SkillProperties.cs
+++ b/Roles/Properties/SkillProperties.cs
@@ -3,27 +3,27 @@
public readonly struct SkillProperties(string name, string statement, string description, float activeMaxTime, float burialMaxTime, ItemType useItem = ItemType.Coin)
{
///
- /// 技能名称
+ /// 获取技能的名称
///
public string Name { get; } = name;
///
- /// 使用技能绑定的物品
+ /// 获取技能的绑定物品
///
public ItemType UseItem { get; } = useItem;
///
- /// 发动技能描述
+ /// 获取技能的发动描述
///
public string Statement { get; } = statement;
///
- /// 技能介绍
+ /// 获取技能的介绍
///
public string Description { get; } = description;
///
- /// 最大作用时间
+ /// 获取技能的最大作用时间
///
public float ActiveMaxTime { get; } = activeMaxTime;
///
- /// 最大冷却时间
+ /// 获取技能的最大冷却时间
///
public float BurialMaxTime { get; } = burialMaxTime;
}
diff --git a/Roles/Properties/SpawnProperties.cs b/Roles/Properties/SpawnProperties.cs
index 244f6f0..2467f94 100644
--- a/Roles/Properties/SpawnProperties.cs
+++ b/Roles/Properties/SpawnProperties.cs
@@ -1,6 +1,6 @@
using YongAnFrame.Roles.Enums;
-namespace YongAnFrame.Role.Properties
+namespace YongAnFrame.Roles.Properties
{
public struct SpawnProperties
{
@@ -9,23 +9,23 @@ public SpawnProperties()
}
///
- /// 每次生成最多数量
+ /// 获取或设置每次生成的最多数量
///
public int MaxCount { get; set; } = 1;
///
- /// 生成最少玩家
+ /// 获取或设置生成需要的最少玩家
///
public int MinPlayer { get; set; } = 0;
///
- /// 生成最多玩家
+ /// 获取或设置生成需要的最多玩家
///
public int MaxPlayer { get; set; } = 1000;
///
- /// 生成时播放音频文件
+ /// 获取或设置生成时播放音频文件
///
public string MusicFileName { get; set; } = null;
///
- /// 生成跟随的队伍
+ /// 获取或设置生成时跟随的队伍
///
public RefreshTeamType RefreshTeam { get; set; } = RefreshTeamType.Start;
///
@@ -33,16 +33,19 @@ public SpawnProperties()
///
public string Info { get; set; } = null;
///
- /// 角色生成数量限制
+ /// 获取或设置生成的数量限制
///
public uint Limit { get; set; } = 1;
///
- /// 每次会生成的概率
+ /// 获取或设置每次生成的概率
///
public float Chance { get; set; } = 100;
///
- /// 在第几次开始刷新,只适用于除RefreshTeamType.Start以外的所有内容
+ /// 获取或设置的刷新波次
///
+ ///
+ /// 只适用于除 以外的所有内容
+ ///
public uint StartWave { get; set; } = 1;
}
}
diff --git a/Roles/SkillManager.cs b/Roles/SkillManager.cs
index b1a96f8..05112ea 100644
--- a/Roles/SkillManager.cs
+++ b/Roles/SkillManager.cs
@@ -12,11 +12,13 @@ namespace YongAnFrame.Roles
///
///
///
- ///
- public sealed class SkillManager(FramePlayer fPlayer, ISkill skill, byte Id)
+ ///
+ public sealed class SkillManager(FramePlayer fPlayer, ISkill skill, byte id)
{
-
- public byte Id { get; } = Id;
+ ///
+ /// 获取或设置技能的ID
+ ///
+ public byte Id { get; } = id;
private ISkillActiveStart SkillActiveStart
{
get
@@ -52,24 +54,32 @@ private ISkillBurialEnd SkillBurialEnd
}
public SkillProperties SkillProperties { get => skill.SkillProperties[Id]; }
- public int SkillsEffectSwitchId { get; set; }
///
- /// 是否运行
+ /// 获取或设置技能是否行动
///
public bool IsActive { get => ActiveRemainingTime > 0; }
///
- /// 是否冷却
+ /// 获取或设置技能是否冷却
///
public bool IsBurial { get => BurialRemainingTime > 0; }
+ ///
+ /// 获取或设置技能的行动时间
+ ///
public float ActiveRemainingTime { get; private set; }
+ ///
+ /// 获取或设置技能的冷却时间
+ ///
public float BurialRemainingTime { get; private set; }
private CoroutineHandle coroutineHandle;
///
- /// 有计时任务会直接覆盖
+ /// 使用技能
///
+ ///
+ /// 有计时任务会直接覆盖
+ ///
public void Run()
{
if (coroutineHandle != null)
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..43b342a
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,7 @@
+# 安全策略
+## 支持的版本
+只有最新版本支持安全更新
+## 报告漏洞
+如果您在我们的代码库中检测到漏洞,请立即向我们报告!
+
+E-Mail:yongandevelopers@163.com
\ No newline at end of file
diff --git a/YongAnFrame.csproj b/YongAnFrame.csproj
index 688469a..e83eb38 100644
--- a/YongAnFrame.csproj
+++ b/YongAnFrame.csproj
@@ -39,44 +39,45 @@
lib\net48\Assembly-CSharp-firstpass.dll
- packages\ExMod.Exiled.8.12.2\lib\net48\Assembly-CSharp-Publicized.dll
+ packages\ExMod.Exiled.8.13.1\lib\net48\Assembly-CSharp-Publicized.dll
False
False
- packages\ExMod.Exiled.8.12.2\lib\net48\CommandSystem.Core.dll
+ packages\ExMod.Exiled.8.13.1\lib\net48\CommandSystem.Core.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.API.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.API.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.CreditTags.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.CreditTags.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.CustomItems.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.CustomItems.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.CustomRoles.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.CustomRoles.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.Events.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.Events.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.Loader.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.Loader.dll
-
- packages\ExMod.Exiled.8.12.2\lib\net48\Exiled.Permissions.dll
+
+ packages\ExMod.Exiled.8.13.1\lib\net48\Exiled.Permissions.dll
lib\net48\Mirror.dll
- packages\ExMod.Exiled.8.12.2\lib\net48\NorthwoodLib.dll
+ packages\ExMod.Exiled.8.13.1\lib\net48\NorthwoodLib.dll
- packages\ExMod.Exiled.8.12.2\lib\net48\PluginAPI.dll
+ packages\ExMod.Exiled.8.13.1\lib\net48\PluginAPI.dll
-
+
+ False
lib\net48\SCPSLAudioApi.dll
@@ -94,7 +95,7 @@
lib\net48\UnityEngine.PhysicsModule.dll
- packages\ExMod.Exiled.8.12.2\lib\net48\YamlDotNet.dll
+ packages\ExMod.Exiled.8.13.1\lib\net48\YamlDotNet.dll
@@ -115,7 +116,7 @@
-
+
@@ -130,11 +131,21 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/YongAnFrame.nuspec b/YongAnFrame.nuspec
index 2e36c58..458f476 100644
--- a/YongAnFrame.nuspec
+++ b/YongAnFrame.nuspec
@@ -2,11 +2,11 @@
$id$
- 1.0.0-beta2
+ 1.0.0-beta3
$title$
$author$
true
- LGPL-2.1-only
+ LGPL-3-only
docs\README.md
https://github.com/YongAn404/YongAnFrame
diff --git a/YongAnFrameCore.cs b/YongAnFramePlugin.cs
similarity index 96%
rename from YongAnFrameCore.cs
rename to YongAnFramePlugin.cs
index 4fea65b..1ff0081 100644
--- a/YongAnFrameCore.cs
+++ b/YongAnFramePlugin.cs
@@ -11,6 +11,7 @@ public sealed class YongAnFramePlugin : Plugin
private static YongAnFramePlugin instance;
public static YongAnFramePlugin Instance => instance;
public override PluginPriority Priority => PluginPriority.First;
+ public override bool IgnoreRequiredVersionCheck => true;
public override void OnEnabled()
{
diff --git a/docs/docfx.json b/docs/docfx.json
new file mode 100644
index 0000000..4484751
--- /dev/null
+++ b/docs/docfx.json
@@ -0,0 +1,44 @@
+{
+ "metadata": [
+ {
+ "src": [
+ {
+ "files": [
+ "**/*.csproj"
+ ],
+ "exclude": [
+ "**/bin/**",
+ "**/obj/**"
+ ],
+ "src": "../"
+ }
+ ],
+ "dest": "api",
+ "namespaceLayout": "nested",
+ "enumSortOrder": "declaringOrder"
+ }
+ ],
+ "build": {
+ "globalMetadata": {
+ "_appTitle": "YongAnFrame",
+ "_enableSearch": true,
+ "_lang": "zh-CN",
+ "_gitContribute": {
+ "repo": "https://github.com/SCP-SL-Plugin-YongAnTeam/YongAnFrame",
+ "branch": "dev"
+ }
+ },
+ "template": [ "default", "modern" ],
+ "content": [
+ {
+ "files": [
+ "api/**.yml",
+ "api/index.md",
+ "toc.yml",
+ "*.md"
+ ]
+ }
+ ],
+ "dest": "_site"
+ }
+}
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..fdcd941
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,34 @@
+---
+title: Home
+---
+
+# YongAnFrame
+基于[EXILED](https://github.com/ExMod-Team/EXILED)写的框架,为国内服务器常见的插件需求简化开发
+
+## YongAnFrame是什么类型的插件/框架?
+**YongAnFrame** 是一个集成了命令系统、整合了自定义角色及技能系统、称号系统、提示系统的免费框架,使用 **[EXILED](https://github.com/ExMod-Team/EXILED)** 开发。\
+您可以通过安装该插件并使用该框架开发插件,简化您的开发流程。
+
+## 功能
+- 称号系统:提供动态指令运行集
+- DNT检测和BDNT(Bypass DNT)请求:使信息获取和保存符合VSR规则
+- 提示系统:提供可方便调用显示提示,拒绝冲突
+- 自定义角色:提供对[EXILED](https://github.com/ExMod-Team/EXILED)的自定义角色升级,部分兼容[EXILED](https://github.com/ExMod-Team/EXILED)自定义角色
+- 等级系统:提供整合统一的等级API,支持自定义算法
+- 自定义算法:提供一个可替换主要算法的属性(该功能不支持多元化,只能采用一个主要算法)
+- 音频API:提供方便更好调用SCPSLAudioApi
+
+## 为服务端安装框架
+ 如图,下载 **Release下的最新压缩包** 全部解压并合并到**EXILED目录**,如C:\Users\Administrator\Appdata\Roaming\ ,安装后请启动一次服务端,并在EXILED\Config内根据提示调整配置文件.
+ ![image](https://github.com/user-attachments/assets/c6a9934b-5cd1-4905-bb94-ae294a12749c)
+
+
+## 使用YongAnFrame进行开发
+ 如图,在您的项目的Nuget包管理器中,安装最新版的YongAnFrame即可
+![image](https://github.com/user-attachments/assets/afd10f37-eac1-4c4c-958c-2c4f655186e8)
+ 如果你要查询开发教程,请访问[Wiki](https://github.com/SCP-SL-Plugin-YongAnTeam/YongAnFrame/wiki)
+
+## 联系我们 ##
+QQ:3489728203
+Mail:3489728203@qq.com
+Bug反馈或有疑问欢迎提交issue(请附带错误日志/截图,以及问题的详细描述)
diff --git a/docs/toc.yml b/docs/toc.yml
new file mode 100644
index 0000000..3ff9579
--- /dev/null
+++ b/docs/toc.yml
@@ -0,0 +1,6 @@
+- name: Articles
+ href: https://github.com/SCP-SL-Plugin-YongAnTeam/YongAnFrame/wiki/%5BCN%5D%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B
+- name: API Documentation
+ href: api/YongAnFrame.html
+- name: GitHub
+ href: https://github.com/SCP-SL-Plugin-YongAnTeam/YongAnFrame
\ No newline at end of file
diff --git a/packages.config b/packages.config
index f286a37..9d0ea98 100644
--- a/packages.config
+++ b/packages.config
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file