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