Merge branch 'main' into gitlocalize-40432

This commit is contained in:
Starystars67
2026-08-10 20:25:35 +01:00
committed by GitHub
92 changed files with 25827 additions and 532 deletions
+15
View File
@@ -0,0 +1,15 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: BeamMP # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
+661
View File
@@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, 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
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero 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
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

+38
View File
@@ -0,0 +1,38 @@
## Warum muss ich meine Mods deaktivieren?
In BeamMP stellt der Server, mit dem du dich verbindest, die notwendigen Mods bereit. Diese werden beim Verbinden automatisch heruntergeladen und aktiviert. Sind lokale Mods installiert und aktiviert, funktioniert BeamMP oft nicht richtig, selbst wenn du nur einen zusätzlichen Mod neben BeamMP hast.
!!! warning
Entferne alle Mods, die du im Ordner BeamNG.Drive\content\ oder in Unterordnern abgelegt hast. Dieser Speicherort ist NICHT für die Installation von Mods vorgesehen und kann zu Problemen führen, wie in der Datei `DO_NOT_INSTALL_MODS_HERE.txt` im selben Verzeichnis beschrieben.
!!! quote "DO_NOT_INSTALL_MODS_HERE.txt"
Kopiere KEINE Mods in diesen Ordner: Dies kann zu beschädigten Mods, einer langsameren Installation von Updates, einem beschädigten Mod-Manager, einem beschädigten abgesicherten Modus und anderen Problemen führen.
## Wie deaktiviere/entferne ich meine Mods?
Es gibt drei Möglichkeiten, mögliche Probleme bei der Verwendung von BeamMP zu lösen.
### 1. Mods deaktivieren
Bevor du einem Server beitrittst, stelle sicher, dass du außer „multiplayerbeammp“ keine Mods aktiviert hast. Wenn das Spiel einfriert oder weiterhin Probleme auftreten, probiere den nächsten Schritt.
### 2. Erstellen eines neuen Benutzerordners
Öffne den Benutzerordner von BeamNG.Drive und benenne den Ordner der neuesten Version (z. B. 0.35) um, z. B. in 0.xx_OLD (0.35_OLD). Schließe BeamNG.drive, bevor du ihn umbenennst.<br>![Bild](../../assets/content/new-userfolder.png)
### 3. Entfernen von Mods aus dem content Ordnern.
Um auf den Ordner Beamng.drive\content\ zuzugreifen und ihn von allen Mods zu bereinigen, öffne den Installationsort von BeamNG.drive. Klicke mit der rechten Maustaste auf den Ordner `content` und lösche ihn. Überprüfe anschließend die Spieldateien über Steam oder Epic Games. Dadurch werden die Dateien erneut heruntergeladen.
Starte anschließend BeamNG.Drive über den BeamMP-Launcher. Im Repository sollte „multiplayerbeammp“ als einziger aktivierter Mod verfügbar sein. Im Hauptmenü findest du außerdem die Schaltfläche zum Aufrufen von BeamMP. Solltest du weiterhin Probleme beim Beitritt zu gemoddeten Servern haben, liegen wahrscheinlich defekte/veraltete Mods vor.
### 4. BeamMP-Launcher Cache bereinigen
Um zwischengespeicherte Mods aus den BeamMP-Verzeichnissen zu entfernen, gehe zum Installationsort deines BeamMP-Launchers. Standardmäßig lautet der Pfad „C:\Benutzer\AppData\BeamMP-Launcher“. Dort findest du den Ordner „Ressourcen“. Lösche diesen Ordner, um alle zwischengespeicherten Mods zu löschen. Dies kann hilfreich sein, wenn du mehr Speicherplatz auf deiner Festplatte benötigst oder veraltete BeamNG-Mods entfernen möchtest.
!!! question "Meine Einstellungen und Konfigurationen sind weg! Wie kann ich sie wiederherstellen?"
Wenn du den Benutzerordner umbenannt hast, wurde das Spiel gezwungen, einen neuen, sauberen Benutzerordner zu erstellen. Du kannst die beiden Ordner „Einstellungen“ und „Fahrzeuge“ aus dem umbenannten Ordner (z. B. 0.34_OLD) in den neu erstellten Ordner kopieren.
Stelle sicher, dass BeamNG.Drive geschlossen ist, und ersetze alle Elemente am Zielort. Alle Konfigurationen und Einstellungen sollten nun wiederhergestellt sein.
+4 -4
View File
@@ -14,21 +14,21 @@ Eine vollständige Anleitung zur Installation von BeamMP unter Windows findet ma
--- ---
### **Funktioniert BeamMP mit einer gecrackten Version von BeamNG?** ### **Funktioniert BeamMP mit raubkopierten/modifizierten Versionen von BeamNG?**
BeamMP funktioniert nicht mit Raubkopien oder veralteten Versionen von BeamNG.drive. Das BeamMP-Supportteam bietet keinen Support bei Problemen mit gecrackten/veralteten Kopien. BeamMP funktioniert möglicherweise nicht mit Raubkopien oder veralteten Versionen von BeamNG.drive. Modifikationen, wie beispielsweise Mods von Drittanbietern, können zu Problemen mit BeamMP führen. (Siehe [„Mods entfernen“](https://github.com/Protogen187/Docs/blob/main/docs/en/FAQ/Clearing-mods.md) .) Das BeamMP-Supportteam kann keinen Support für Probleme im Zusammenhang mit Raubkopien, veralteten oder anderweitig modifizierten Versionen von BeamNG.drive leisten.
--- ---
### **Funktioniert BeamMP unter Linux?** ### **Funktioniert BeamMP unter Linux?**
Der BeamMP-Launcher wird unter Linux nicht offiziell unterstützt. Du kannst jedoch unserer [Anleitung zur Verwendung von BeamMP unter Linux](../game/getting-started/#2b-linux-installation) folgen. Der BeamMP-Launcher wird unter Linux nicht offiziell unterstützt. Du kannst jedoch unserer [Anleitung zur Verwendung von BeamMP unter Linux](../../game/getting-started.md#2b-linux-installation) folgen.
--- ---
### **Warum wird der Launcher von meinem Antivirenprogramm oder Windows Defender als Virus erkannt?** ### **Warum wird der Launcher von meinem Antivirenprogramm oder Windows Defender als Virus erkannt?**
Einige Antivirus Programme Melden BeamMP möglicherweise als Bedrohung, weil es mit dem Netzwerk und anderen Komponenten interagiert. Es gibt **keine Schadsoftware** im Code. Der Code für den Launcher, Server und Lua Client können auf unserem [GitHub](https://github.com/BeamMP) gefunden werden. Manche Antivirenprogramme könnten BeamMP aufgrund von Netzwerkinteraktionen und anderen Faktoren als Bedrohung einstufen. Der Code enthält jedoch **keine Viren** . Den Code für Launcher, Server und Lua-Client findst du auf unserem [GitHub-Repository](https://github.com/BeamMP) .
--- ---
+12 -6
View File
@@ -8,19 +8,19 @@ Liste häufig gestellter Fragen und bekannter Probleme.
--- ---
#### **Wie kann ich meine eigenen Server einrichten?** ### **Wie kann ich meine eigenen Server einrichten?**
Alle Informationen um einen eigenen Server zu erstellen findest du [hier](https://docs.beammp.com/server/create-a-server/). Alle Informationen um einen eigenen Server zu erstellen findest du [hier](https://docs.beammp.com/server/create-a-server/).
--- ---
#### **Kann man unter Linux einen Server erstellen?** ### **Kann man unter Linux einen Server erstellen?**
Wir bieten Binaries für mehrere Linux Distributionen [hier](https://github.com/BeamMP/BeamMP-Server/releases/latest) an. Wenn es keine Binaries für dein OS oder deine Distro gibt, kannst du diese selber bauen, indem du dir die Source von unserem [GitHub](https://github.com/BeamMP/BeamMP-Server) runter lädst. Ein Tutorial kannst du [hier](https://github.com/BeamMP/BeamMP-Server#build-instructions) finden. Wir bieten Binaries für mehrere Linux Distributionen [hier](https://github.com/BeamMP/BeamMP-Server/releases/latest) an. Wenn es keine Binaries für dein OS oder deine Distro gibt, kannst du diese selber bauen, indem du dir die Source von unserem [GitHub](https://github.com/BeamMP/BeamMP-Server) runter lädst. Ein Tutorial kannst du [hier](https://github.com/BeamMP/BeamMP-Server#build-instructions) finden.
--- ---
#### **Was sind die Hardware Mindestanforderungen für einen BeamMP-Server?** ### **Was sind die Hardware Mindestanforderungen für einen BeamMP-Server?**
- RAM: 50+ MiB nutzbar (ohne Betriebssystem puffer) - RAM: 50+ MiB nutzbar (ohne Betriebssystem puffer)
- CPU: &gt;1GHz, multicore bevorzugt - CPU: &gt;1GHz, multicore bevorzugt
@@ -31,7 +31,7 @@ Wir bieten Binaries für mehrere Linux Distributionen [hier](https://github.com/
--- ---
### **Spieler außerhalb meines Netzwerks können meinem selbst gehosteten Server nicht beitreten** ## **Spieler außerhalb meines Netzwerks können meinem selbst gehosteten Server nicht beitreten**
Lies die Anleitung für das weiterleiten von Ports in [diesem Artikel](https://docs.beammp.com/server/port-forwarding/). Unten findest du die wichtigsten Schritte. Wenn andere Spieler versuchen deinen Server beizutreten, erhalten aber Fehlercodes wie 10060, 10061 oder 10038 in ihrem BeamMP-Launcher, dann beachte folgende Schritte. Lies die Anleitung für das weiterleiten von Ports in [diesem Artikel](https://docs.beammp.com/server/port-forwarding/). Unten findest du die wichtigsten Schritte. Wenn andere Spieler versuchen deinen Server beizutreten, erhalten aber Fehlercodes wie 10060, 10061 oder 10038 in ihrem BeamMP-Launcher, dann beachte folgende Schritte.
@@ -67,7 +67,7 @@ Wenn der Server auf demselben Computer wie das Spiel läuft, du selbst musst in
--- ---
#### **Wo kann ich den Code finden?** ### **Wo kann ich den Code finden?**
Der Source Code kann auf unserem [GitHub](https://github.com/BeamMP) gefunden werden. Bevor du etwas damit anstellst, vergiss nicht, dass der Code unseren [Nutzungsbedingungen](https://forum.beammp.com/t/terms-of-use-v1-0/43) und Lizenzen unterliegt: Der Source Code kann auf unserem [GitHub](https://github.com/BeamMP) gefunden werden. Bevor du etwas damit anstellst, vergiss nicht, dass der Code unseren [Nutzungsbedingungen](https://forum.beammp.com/t/terms-of-use-v1-0/43) und Lizenzen unterliegt:
@@ -79,7 +79,7 @@ Client Lua | [LIZENZ](https://github.com/BeamMP/BeamMP/blob/development/LICENSE.
--- ---
#### **Ich habe einen Bug oder Exploit gefunden. Was soll ich tun?** ### **Ich habe einen Bug oder Exploit gefunden. Was soll ich tun?**
Wenn das Problem auf den Code zurückzuführen ist, erstelle eine neue "Issue" im korrekten Repository auf [GitHub](https://github.com/BeamMP). Wir nutzen einen issue-basierten Workflow. Wenn du einen Fix für das Problem gefunden hast, erstelle am besten trotzdem eine "Issue", dann erstelle einen "Pull Request" der deine "Issue" löst. Weitere Informationen zum mitmachen findest du [hier](https://github.com/BeamMP/BeamMP/blob/development/CONTRIBUTING.md). Wenn das Problem auf den Code zurückzuführen ist, erstelle eine neue "Issue" im korrekten Repository auf [GitHub](https://github.com/BeamMP). Wir nutzen einen issue-basierten Workflow. Wenn du einen Fix für das Problem gefunden hast, erstelle am besten trotzdem eine "Issue", dann erstelle einen "Pull Request" der deine "Issue" löst. Weitere Informationen zum mitmachen findest du [hier](https://github.com/BeamMP/BeamMP/blob/development/CONTRIBUTING.md).
@@ -87,3 +87,9 @@ Wenn du keinen GitHub account hast oder nicht weißt, wie man GitHub nutzt, kann
- Wenn etwas nicht Empfindlich ist, kannst du es auf dem [BeamMP Forum](https://forum.beammp.com) posten, oder du kannst es auf unserem [Offiziellen Discord Server](https://discord.gg/beammp) melden. - Wenn etwas nicht Empfindlich ist, kannst du es auf dem [BeamMP Forum](https://forum.beammp.com) posten, oder du kannst es auf unserem [Offiziellen Discord Server](https://discord.gg/beammp) melden.
- Wenn die Information empfindlich ist, melde diese direkt an ein Teammitglied auf unserem [Discord Server](https://discord.gg/beammp). - Wenn die Information empfindlich ist, melde diese direkt an ein Teammitglied auf unserem [Discord Server](https://discord.gg/beammp).
---
### **Mein Authentifizierungsschlüssel wurde kompromittiert, was soll ich tun?**
Falls du glaubst, dass einer deiner Authentifizierungsschlüssel kompromittiert wurde, erstelle bitte ein **Support** -Ticket über unseren [Discord-Server](https://discord.gg/beammp) .
+7 -6
View File
@@ -5,13 +5,10 @@ hide:
!!! warning "Diese Seite befindet sich im Aufbau!" !!! warning "Diese Seite befindet sich im Aufbau!"
``` Diese Seite steht unter aktiver Bearbeitung.
Diese Seite steht unter aktiver Bearbeitung. Denkst du, dass du helfen könntest? Das kannst du tun, indem du auf das Editier Symbol auf der rechten Seite klickst!
Das trifft auch auf alle anderen Seiten zu.
Denkst du, dass du helfen könntest? Das kannst du tun, indem du auf das Editier Symbol auf der rechten Seite klickst!
Das trifft auch auf alle anderen Seiten zu.
```
# Willkommen bei BeamMP Docs! :tada: # Willkommen bei BeamMP Docs! :tada:
@@ -30,3 +27,7 @@ Du möchtest deinen eigenen BeamMP-Server erstellen? Unsere umfassende Anleitung
Erfahre alles Wissenswerte zur Erstellung von Ressourcen für den BeamMP-Server in unserer [Anleitung zur Ressourcenentwicklung](../guides/mod-creation/server/getting-started.md). Erfahre alles Wissenswerte zur Erstellung von Ressourcen für den BeamMP-Server in unserer [Anleitung zur Ressourcenentwicklung](../guides/mod-creation/server/getting-started.md).
Aufregende Updates stehen bevor, einschließlich einer brandneuen Homepage, die entwickelt wurde, um dein Browsing-Erlebnis zu verbessern. Bleib dran für weitere Neuigkeiten! :slight_smile: Aufregende Updates stehen bevor, einschließlich einer brandneuen Homepage, die entwickelt wurde, um dein Browsing-Erlebnis zu verbessern. Bleib dran für weitere Neuigkeiten! :slight_smile:
## Community Regeln
Lies dir die [Community-Regeln](https://docs.beammp.com/community/rules/) von BeamMP durch und informiere dich darüber, wie du gegen Bans Einspruch einlegen kannst.
+79 -54
View File
@@ -2,7 +2,7 @@
## **Einen Server erstellen** ## **Einen Server erstellen**
Die Grundlagen für das Erstellen eines Servers Grundlagen der Serveranwendungseinrichtung. Diese Anleitung beschreibt die vollständige Einrichtung zum Hosten eines Servers **zu Hause** . Eine Kurzanleitung für deinen VPS-Server findest du unter [„So erstellt man einen Server“.](https://docs.beammp.com/server/setup-vps/)
--- ---
@@ -28,20 +28,20 @@ Das Aufsetzen besteht aus folgenden Schritten. Du solltest alle davon durchgehen
!!! info !!! info
Wenn du auf einem VPS (Virtual Private Server), Rotoserver bist, oder planst einen Server lokal zu hosten (mit Spielern im selben Haus wie du), kannst du diesen Schritt überspringen. Wenn du einen VPS (Virtual Private Server), einen Rootserver nutzt oder planst, diesen Server lokal zu hosten (mit Spielern im selben Haus wie du), kannst du diesen Schritt überspringen.
Dieser Schritt ist jedoch notwendig, wenn Spieler **außerhalb** deines Haushaltes deinem heim-gehosteten Server beitreten sollen (außerhalb von deinem lokalen Netzwerk) Dieser Schritt ist notwendig, wenn, jemand **außerhalb** des Haushalts einem selbst gehosteten Server beitreten soll (außerhalb Ihres lokalen Netzwerks).
!!! danger ":material-scale-balance: ACHTUNG:" !!! danger :material-scale-balance: HAFTUNGSAUSSCHLUSS:"
**Port forwarding ist ein Risiko**. **Portweiterleitung birgt Risiken.**
Wenn du Ports weiterleitest, sind dir die Risiken beim öffnen von Ports von deinem Heimnetz ins öffentliche Netz bewusst und verlierst das Recht, BeamMP für **jegliche Schäden**, welche deinem Haushalt passieren könnten, Haften zu lassen. Mit der Portweiterleitung erklären Sie sich mit den Risiken einverstanden, Ports in Ihrem Heimnetzwerk für die Öffentlichkeit zu öffnen, und verzichten daher auf das Recht, BeamMP für **jegliche** Schäden haftbar zu machen, die Ihnen oder Ihrem Haushalt entstehen könnten.
Wir übernehmen keine Haftung für jegliche extern gelinkten Dienste oder Webseiten. Wir übernehmen keine Verantwortung für Inhalte auf extern verlinkten Diensten oder Websites.
Es wird daher empfohlen, BeamMP Server mit einen unserer Partner Hosting Services zu hosten. Es wird daher empfohlen, einen Server bei einem unserer Partnerdienste zu hosten!
*Sieh dir [diese Anleitung zum Port weiterleiten](port-forwarding.md) an* *Bitte lese [diese Anleitung zur Portweiterleitung](port-forwarding.md)*
#### Partner Hosting Services (bezahlt): #### Partner Hosting Services (bezahlt):
@@ -49,13 +49,16 @@ Das Aufsetzen besteht aus folgenden Schritten. Du solltest alle davon durchgehen
- [RackGenius](https://rackgeni.us/beammp-plans) - [RackGenius](https://rackgeni.us/beammp-plans)
- [Connect Hosting](https://connecthosting.net/beammp) - [Connect Hosting](https://connecthosting.net/beammp)
- [Assetto Hosting](https://assettohosting.com/en/games/beamng) - [Assetto Hosting](https://assettohosting.com/en/games/beamng)
- [Zap Hosting](https://zap-hosting.com/en/beammp-server-hosting/) - [ZAP-Hosting](https://zap-hosting.com/itsbeammp)
- [HostHavoc](https://hosthavoc.com/) - [HostHavoc](https://hosthavoc.com/)
- [PedalHost](https://pedal.host/) - [PedalHost](https://pedal.host/)
- [Vyper Hosting](https://vyperhosting.com/r/beammp) - [Vyper Hosting](https://vyperhosting.com/r/beammp)
- [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting) - [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting)
- [Four Seasons Hosting](https://fourseasonshosting.com) - [Four Seasons Hosting](https://fourseasonshosting.com)
- [Vertuo Hosting](https://vertuohosting.com) - [Vertuo Hosting](https://vertuohosting.com)
- [Winheberg](https://winheberg.fr/offres/gaming/beammp?lang=en)
- [Wabbanode](https://wabbanode.com/partner/beammp)
- [Iceline Hosting](https://iceline-hosting.com/games/beammp)
#### 1.1 Firewall #### 1.1 Firewall
@@ -63,7 +66,7 @@ Abhängig von deinem Setup musst du den BeamMP-Server möglicherweise durch die
Dort lässt du den BeamMP-Server durch die Firewall, **sowohl eingehende als auch ausgehende Verbindungen** sowie **TCP und UDP** . Falls die Firewall stattdessen nach einem Port fragt, muss dieser derselbe sein, den du in Schritt „1. Portweiterleitung“ verwendet hast (standartmäßig 30814). Dort lässt du den BeamMP-Server durch die Firewall, **sowohl eingehende als auch ausgehende Verbindungen** sowie **TCP und UDP** . Falls die Firewall stattdessen nach einem Port fragt, muss dieser derselbe sein, den du in Schritt „1. Portweiterleitung“ verwendet hast (standartmäßig 30814).
Solltest du Probleme haben, frage auf unserem [Forum](https://forum.beammp.com) oder auf unserem [Discord server](https://discord.gg/beammp) im `#support` Kanal. Eine detailliertere Anleitung findest du unter [dieser Dokumentationsseite](https://docs.beammp.com/FAQ/Defender-exclusions/) . Bei Problemen kannst du dich an unser [Forum](https://forum.beammp.com) oder auf unseren [Discord-Server](https://discord.gg/beammp) im Kanal `#support` an uns wenden.
### **2. Authentifizierungsschlüssel** ### **2. Authentifizierungsschlüssel**
@@ -71,42 +74,42 @@ Der Authentifizierungsschlüssel, auch “Authentication Key” oder “AuthKey
!!! warning "WARNUNG" !!! warning "WARNUNG"
TEILE ODER ZEIGE DEN SCHLÜSSEL NICHT. BEHANDLE IHN WIE EIN PASSWORT. TEILE ODER ZEIGE DEN SCHLÜSSEL NICHT. BEHANDLE IHN WIE EIN PASSWORT.
Um einen Schlüssel zu erwerben ist ein [Discord](https://discord.com) Konto erforderlich. Das ist wichtig um gegen Spam zu schützen. Um einen Schlüssel zu erwerben ist ein [Discord](https://discord.com) Konto erforderlich. Das ist wichtig um gegen Spam zu schützen.
#### 2.1. Die Schlüssel-Übersicht öffnen #### 2.1. Die Schlüssel-Übersicht öffnen
Melde dich mit Discord beim [Keymaster](https://beammp.com/keymaster) an. Klicke auf der Keymaster-Homepage links auf dem Bildschirm auf „Keys“: Melde dich mit Discord bei [Keymaster](https://keymaster.beammp.com) an. Klicke auf der Keymaster-Startseite links auf „Schlüssel“.
<figure markdown>![](../../assets/content/keymaster_homepage.png)</figure> <figure markdown="">![](../../assets/content/keymaster_homepage.png)</figure>
#### 2.2. Einen Schlüssel erstellen #### 2.2. Einen Schlüssel erstellen
Um einen Schlüssel zu erstellen, klicke das grüne ,,+" oben rechts. Um einen Schlüssel zu erstellen, klicke das grüne ,,+" oben rechts.
<figure markdown>![](../../assets/content/keymaster_new_key.png)</figure> <figure markdown="">![](../../assets/content/keymaster_new_key.png)</figure>
#### 2.3. Schlüssel-Informationen eingeben #### 2.3. Schlüssel-Informationen eingeben
Als nächstes, fülle das Feld für den Servernamen (das ist lediglich der Name des Schlüssels, nicht der Name vom Server in der Liste), dann klick ,,Create".<br>Beispiel: Als nächstes, fülle das Feld für den Servernamen (das ist lediglich der Name des Schlüssels, nicht der Name vom Server in der Liste), dann klick ,,Create".<br>Beispiel:
<figure class="image image_resized" style="width:44.84%;" markdown>![](../../assets/content/keymaster_server_name.png)</figure> <figure class="image image_resized" style="width:44.84%;" markdown="">![](../../assets/content/keymaster_server_name.png)</figure>
es sollte am Ende wie folgt aussehen: es sollte am Ende wie folgt aussehen:
<figure markdown>![](../../assets/content/keymaster_key_done.png)</figure> <figure markdown="">![](../../assets/content/keymaster_key_done.png)</figure>
#### 2.4. Den Schlüssel kopieren #### 2.4. Den Schlüssel kopieren
Kopiere den Text im “Key” Feld. In diesem Beispiel wäre das `3173a2e-6az0-4542-a3p0-ddqq5ff95558`. Klicke das ,,Klemmbrett Symbol" neben dem Schlüssel um diesen zu kopieren. Kopiere den Text im “Key” Feld. In diesem Beispiel wäre das `3173a2e-6az0-4542-a3p0-ddqq5ff95558`. Klicke das ,,Klemmbrett Symbol" neben dem Schlüssel um diesen zu kopieren.
<figure markdown>![](../../assets/content/keymaster_copy_key.png)</figure> <figure markdown="">![](../../assets/content/keymaster_copy_key.png)</figure>
### **3. Installation** ### **3. Installation**
@@ -140,7 +143,7 @@ Dieser Schritt funktioniert auf allen Distributionen für die wir Binaries anbie
6. Start den Server mittels `./BeamMP-Server-xxx`. Der Server erstellt automatisch die benötigten Dateien. <br>Wenn Text im Server Feld erscheint, kannst du diesen wieder schließen. Du solltest eine `ServerConfig.toml` neben dem `BeamMP-Server.exe` sehen. 6. Start den Server mittels `./BeamMP-Server-xxx`. Der Server erstellt automatisch die benötigten Dateien. <br>Wenn Text im Server Feld erscheint, kannst du diesen wieder schließen. Du solltest eine `ServerConfig.toml` neben dem `BeamMP-Server.exe` sehen.
7. (optional) Es wird empfohlen einen User namens `beammpserver` (oder ähnlich) zu erstellen, da wir empfehlen, NICHT den Server als root, sudo oder mit dem persönlichen Useraccount auszuführen. Du solltest dann die nötigen Schritte tätigen um den Server als den Server-user zu starten. 7. (optional) Es wird empfohlen einen User namens `beammpserver` (oder ähnlich) zu erstellen, da wir empfehlen, NICHT den Server als root, sudo oder mit dem persönlichen Useraccount auszuführen. Du solltest dann die nötigen Schritte tätigen um den Server als den Server-user zu starten.
Nun springe zu Schritt "4. Konfiguration". Fahre nun mit Schritt 4. Konfiguration“ fort.
##### Binary selbst erstellen ##### Binary selbst erstellen
@@ -153,31 +156,39 @@ Führe zum Abschluss den Server unbedingt einmal mit `./BeamMP-Server` aus und f
Nachdem der Server einmal gestartet wurde, sollte er die nötigen Dateien erstellt haben und einen oder zwei Fehler in die Konsole schreiben. Das ist normal, da wir noch nicht fertig sind.<br>Es sollten nun folgende Dateien vorhanden sein: Nachdem der Server einmal gestartet wurde, sollte er die nötigen Dateien erstellt haben und einen oder zwei Fehler in die Konsole schreiben. Das ist normal, da wir noch nicht fertig sind.<br>Es sollten nun folgende Dateien vorhanden sein:
<figure markdown>![](../../assets/content/after-running-once.png)</figure> <figure markdown="">![](../../assets/content/after-running-once.png)</figure>
Genannt ,,ServerConfig.toml”, ,,Server.log” und ,,BeamMP-Server.exe”! (Je nach deinen Einstellungen, siehst du möglicherweise die [.toml] [.log] [.exe] Erweiterungen nicht) Genannt ,,ServerConfig.toml”, ,,Server.log” und ,,BeamMP-Server.exe”! (Je nach deinen Einstellungen, siehst du möglicherweise die [.toml] [.log] [.exe] Erweiterungen nicht)
Öffne die `ServerConfig.toml` mit einem Texteditor wie zum Beispiel `Notepad` . Dies kannst du mit **[Rechtsklick] → „Öffnen mit…“** und anschließender Auswahl eines Texteditors tun. Öffne die `ServerConfig.toml` mit einem Texteditor wie zum Beispiel `Notepad` . Dies kannst du mit **[Rechtsklick] → „Öffnen mit…“** und anschließender Auswahl eines Texteditors tun.
Die Datei sollte ungefähr so aussehen Hier ist eine Beispielkonfiguration:
```TOML ```TOML
[General] [General]
AuthKey = ''
Debug = false
Description = 'BeamMP Default Description'
Map = '/levels/gridmap_v2/info.json'
MaxCars = 1
MaxPlayers = 10
Name = 'BeamMP Server'
Port = 30814 Port = 30814
Private = false AuthKey = "auth-key"
ResourceFolder = 'Resources' AllowGuests = false
LogChat = false
Debug = false
IP = "::"
Private = true
InformationPacket = true
Name = "Test Server"
Tags = "Freeroam,Modded,Racing,Police"
MaxCars = 2
MaxPlayers = 10
Map = "/levels/ks_nord/info.json"
Description = "Total Random Beam MP Server"
ResourceFolder = "Resources"
``` ```
Dies ist deine Konfigurationsdatei. Diese verwendet das Format TOML. Weitere Informationen zu dieser Datei findest du im Abschnitt [Serverwartung](server-maintenance.md) . !!! info
Als erstes kümmern wir uns um den `AuthKey`. Dazu muss der Schlüssel zwischen die Anführungszeichen `" "` eingefügt werden. Dies ist deine Konfigurationsdatei. Sie verwendet das Format TOML. Weitere Informationen zu dieser Datei und den Variablen findest du im Abschnitt [Serverwartung](server-maintenance.md).
Der Server wird **NICHT** in der Serverliste angezeigt, solange `Private = true` eingestellt ist. _Wenn_ er in der Liste angezeigt werden soll, setze die Einstellung auf **`Private = false`**.
Fürs Erste ist nur das Feld `AuthKey` relevant. Zwischen den Anführungszeichen `''` fügt man den AuthKey ein, den du im ersten Schritt kopiert hast.
Für unser Beispiel sollte der Eintrag so aussehen: Für unser Beispiel sollte der Eintrag so aussehen:
@@ -185,31 +196,33 @@ Für unser Beispiel sollte der Eintrag so aussehen:
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558' AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'
``` ```
Vergib deinem Server einen Namen im `Name` Feld. Du kannst diesen mit Farben und mehr formatieren. Siehe [diese Sesktion](server-maintenance.md#customize-the-look-of-your-server-name) auf der Server-Wartungsseite. Gib dem Server im Feld `Name` ebenfalls einen Namen. Du kannst diesen mit Farben und weiteren Optionen formatieren. Weitere Informationen findest du [im Abschnitt „Namensanpassung“](server-maintenance.md#customize-the-look-of-your-server-name) auf der Serververwaltungsseite.
Wenn du einen anderen **Port** als **30814** ausgewählt hast, achte darauf, ihn hier unter `Port` zu ersetzen. Wenn du einen anderen **Port** als **30814** ausgewählt hast, achte darauf, ihn hier unter `Port` zu ersetzen.
!!! info #### **4.1. Überprüfung**
Dein Server wird **NICHT** in der Serverliste erscheinen, solange `Private = true` ist. _Wenn_ du ihn gelistet haben willst, stell den Parameter auf **`Private = false`**.
### **5. Validierung**
Nun führe den Server erneut aus und sieh nach, ob weitere `[ERROR]` oder `[WARN]` Meldungen erscheinen. Der Server sollte nun offen bleiben. In den folgenden Schritten (6.) erfährst du, wie man dem Server beitritt. Nun führe den Server erneut aus und sieh nach, ob weitere `[ERROR]` oder `[WARN]` Meldungen erscheinen. Der Server sollte nun offen bleiben. In den folgenden Schritten (6.) erfährst du, wie man dem Server beitritt.
--- ---
#### 5.1 Wie man dem Server Mods hinzufügt ### 5. Wie man Mods dem Server hinzufügt
Fahrzeug und Map Mods werden unterschiedlich im Server installiert, müssen aber beide im Ordner (`Resources/Client`) abelegt werden. Alle Mods die hinzugefügt werden sollen kommen in diesen Ordner. Fahrzeug- und Karten-Mods werden unterschiedlich installiert, müssen aber beide im Serverordner ( `Resources/Client` ) abgelegt werden. Ziehe einfach die gewünschten Mods in diesen Ordner.
#### 5.2 Allgemeine Mods !!! warning
Mods können mit BeamNG, BeamMP oder anderen Mods inkompatibel sein oder werden. Falls Probleme auftreten, solltest du beginnen, Mods zu entfernen.
Solltest du beim Versuch, deinem Server nach dem Hinzufügen von Mods beizutreten, die Meldung „Fertig“ oder „Start“ erhalten, hast du wahrscheinlich eine inkompatible oder fehlerhafte Mod zu deinem Server hinzugefügt.
Inkompatibilitäten zwischen zwei oder mehr Mods können ebenfalls auftreten. Falls du Client-Mods installiert hast, lies bitte [diese Anleitung](../../FAQ/How-to-deactivate-mods.md) zum Entfernen von Mods aus deinem Spiel.
#### 5.1 Allgemeine Mods
Wenn du nur modifizierte Fahrzeuge hinzufügen möchtest, lege die Zip-Datei der Mods einfach in den Ordner `Resources/Client`. Diese werden automatisch von jedem heruntergeladen, der dem Server beitritt. Wenn du nur modifizierte Fahrzeuge hinzufügen möchtest, lege die Zip-Datei der Mods einfach in den Ordner `Resources/Client`. Diese werden automatisch von jedem heruntergeladen, der dem Server beitritt.
#### 5.3 Karten #### 5.2 Karten
Alle Standardkarten (Karten, die keine Mods sind) funktionieren sofort und müssen nicht installiert werden. Ändere einfach die `Map` in der `ServerConfig.toml` Datei auf eine der [folgenden Optionen](server-maintenance.md#all-vanilla-maps-names) . Für alle anderen modifizierten Karten geht man wie folgt vor: Alle Standardkarten (Karten, die keine Mods sind) funktionieren sofort und müssen nicht installiert werden. Ändere einfach die `Map` in der Datei `ServerConfig.toml` auf eine der [folgenden Optionen](server-maintenance.md#all-vanilla-maps-names) . Für alle anderen modifizierten Karten gehe wie folgt vor:
1. Legen die `.zip` Datei der Karte in den Ordner `Resources/Client` des Servers. 1. Legen die `.zip` Datei der Karte in den Ordner `Resources/Client` des Servers.
2. Sieh dir als Nächstes in die Zip-Datei der Karte (entpacke sie nicht) und öffne den Ordner „ `levels` “. In diesem Ordner sollte sich lediglich ein weiterer Ordner mit dem Namen der Karte befinden, zum Beispiel „myawesomedriftmap2021“. Achte darauf, diesen Namen *genau so zu kopieren oder zu merken, wie er im Namen dieses Ordners geschrieben ist.* 2. Sieh dir als Nächstes in die Zip-Datei der Karte (entpacke sie nicht) und öffne den Ordner „ `levels` “. In diesem Ordner sollte sich lediglich ein weiterer Ordner mit dem Namen der Karte befinden, zum Beispiel „myawesomedriftmap2021“. Achte darauf, diesen Namen *genau so zu kopieren oder zu merken, wie er im Namen dieses Ordners geschrieben ist.*
@@ -243,19 +256,31 @@ Du musst anderen Spielern die öffentliche IP Adresse des Servers geben. Sei jed
#### 6.c. Andere Spieler treten deinem öffentlichen Server bei #### 6.c. Andere Spieler treten deinem öffentlichen Server bei
Um deinem öffentlichen Server beizutreten, gehe zur Server Liste und gib den Namen des Servers ein und klicke ,,Connect". Wenn du dir nicht sicher über den Namen des Server bist, es wird der Name sein, welchen du in der `ServerConfig.toml` festlegst. Stelle sicher dass Suchfilter deaktiviert sind und dass die Karte auf "Any" gesetzt ist, wenn du ihn nicht findest. Du kannst auch die [Keymaster](https://beammp.com/keymaster) Webseite für die IP des Servers prüfen. Um einem öffentlichen Server beizutreten, können Benutzer einfach die Serverliste aufrufen, den Servernamen eingeben und auf „Verbinden“ klicken. Falls du/sie den Servernamen nicht kennen, findest du ihn in der Datei `ServerConfig.toml` . Sollte niemand den Server nicht finden, stelle sicher, dass die Suchfilter deaktiviert und die Zuordnung auf „Beliebig“ eingestellt ist. Die IP-Adresse des Servers findest du auch auf der Website von [Keymaster](https://keymaster.beammp.com/) .
Sollten du oder deine Freunde einen ,,Verbindung Fehlgeschlagen!" Fehler bekommen, prüfe das Launcher Fenster auf Codes wie 10060, 10061 oder 10030. Das bedeutet, dass du entweder eine CGNAT IPv4 hast, oder du hast etwas bei Schritt **1 Port Forwarding** oder **1.1. Firewall** falsch gemacht. Um zu prüfen ob du eine CGNAT IPv4 hast, finde die WAN IP Adresse im Router Interface. Vergleiche diese mit deiner [öffentlichen IP](https://www.whatsmyip.org/). Wenn diese gleich sind, hast du keine CGNAT IP. IPv6 Support ist noch **NICHT** implementiert. Sollten du oder deine Freunde einen ,,Verbindung Fehlgeschlagen!" Fehler bekommen, prüfe das Launcher Fenster auf Codes wie 10060, 10061 oder 10030. Das bedeutet, dass du entweder eine CGNAT IPv4 hast, oder du hast etwas bei Schritt **1 Port Forwarding** oder **1.1. Firewall** falsch gemacht. Um zu prüfen ob du eine CGNAT IPv4 hast, finde die WAN IP Adresse im Router Interface. Vergleiche diese mit deiner [öffentlichen IP](https://www.whatsmyip.org/). Wenn diese gleich sind, hast du keine CGNAT IP. IPv6 Support ist noch **NICHT** implementiert.
### **7. So überprüft man die Verbindung deines BeamMP-Servers**
Gib unten die öffentliche IPv4-Adresse und den Port des Servers ein und klicke dann auf „CheckBeamMP“.
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP Adresse:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">Port:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
!!! warning "Ich möchte einen VPN wie RadminVPN, Hamachi oder ähnlich verwenden" !!! warning "Ich möchte einen VPN wie RadminVPN, Hamachi oder ähnlich verwenden"
BeamMP unterstützt diese VPNs nicht, weil diese oft Probleme verursachen. Eines davon ist das blockieren von UDP Verkehr. Um dies zu beheben, siehe Sektion 1. BeamMP unterstützt diese VPNs nicht, weil diese oft Probleme verursachen. Eines davon ist das Blockieren von UDP Verkehr. Um dies zu beheben, siehe Sektion 1.
!!! question "Aber warum hat es vorher funktioniert?" !!! question "Aber warum hat es vorher funktioniert?"
Das passiert, weil die Entwickler dieser Applikationen updaten und Änderungen implementiere, über welche BeamMP keine Kontroll hat. Das passiert, weil die Entwickler dieser Applikationen Updates durchführen und Änderungen implementieren, über welche BeamMP keine Kontrolle hat.
Es liegt an den Entwicklern diesen Applikationen, um Support für spezifische Fälle wie eines BeamMP-Servers zu unterstützen. Es liegt an den Entwicklern dieser Applikationen, um Support für spezifische Fälle wie die eines BeamMP-Servers zu unterstützen.
## Immer noch Probleme? ## Immer noch Probleme?
Öffne ein Post auf dem [Forum](https://forum.beammp.com) oder auf dem [Discord server](https://discord.gg/beammp) im `#support` Kanal. Öffne einen Thread im [Forum](https://forum.beammp.com) oder reiche ein **Server-Support-Ticket** auf unserem [Discord-Server](https://discord.gg/beammp) im Kanal `#support` ein.
+72 -100
View File
@@ -2,17 +2,17 @@
!!! danger ":material-scale-balance: ACHTUNG" !!! danger ":material-scale-balance: ACHTUNG"
**Das weiterleiten von Ports ist ein Risiko**. ```
Das weiterleiten von Ports ist ein Risiko. Durch die Portweiterleitung bist du dir den Risiken bewusst, die mit der Öffnung von Ports in das öffentliche Netz verbunden sind. Daher verlierst du das Recht, BeamMP für alle Schäden haftbar zu machen, die dir oder deinem Haushalt entstehen können. Wir übernehmen keine Verantwortung für Inhalte auf extern verlinkten Diensten oder Websites. Wenn du diese Anleitung nicht verstehst, ziehe die Nutzung eines unserer Hosting Partner in Betracht.
```
Durch die Portweiterleitung bist du dir den Risiken bewusst, die mit der Öffnung von Ports in das öffentliche Netz verbunden sind. Daher verlierst du das Recht, BeamMP für **alle** Schäden haftbar zu machen, die dir oder deinem Haushalt entstehen können. !!! warning
Wir übernehmen keine Verantwortung für Inhalte auf extern verlinkten Diensten oder Websites.
<u>**Wenn du diese Anleitung nicht verstehst, ziehe die Nutzung eines unserer Hosting Partner in Betracht.**</u>
```
!!! warning "Warnung" !!! warning "Warnung"
Bitte stelle sicher, dass dein Router kein 4G/5G-exklusives Gerät ist. Wenn es sich um ein Hybridgerät handelt, wähle später in Abschnitt 3 dieser Anleitung unbedingt den kabelgebundenen Adapter aus! Bitte stelle sicher, dass dein Router kein 4G/5G-exklusives Gerät ist. Wenn es sich um ein Hybridgerät handelt, wähle später in Abschnitt 3 dieser Anleitung unbedingt den kabelgebundenen Adapter aus!
```
## So richtest du die Portweiterleitung ein. ## So richtest du die Portweiterleitung ein.
@@ -23,41 +23,40 @@ Diese Anleitung besteht aus vier Hauptschritten.
## Eine Kurzanleitung. (Eine ausführlichere Anleitung findest du weiter unten.) ## Eine Kurzanleitung. (Eine ausführlichere Anleitung findest du weiter unten.)
<div class="grid cards" markdown> <div class="grid cards" markdown>
- :material-dns:{ .lg .middle } __Weisen Sie Ihrem Computer oder Ihren Geräten eine statische IP-Adresse zu__
---
ies ist erforderlich, um zu verhindern, dass sich die IP deines Geräts ändert und die Portweiterleitung funktioniert.
[:octicons-arrow-right-24: Informationen zu Ihrem Router anzeigen](https://portforward.com/router.htm#1)
- :material-router-wireless:{ .lg .middle } __Melde dich bei deinem Router an__
---
Dies kann normalerweise durch Suchen der IP des „Standard-Gateways“ erfolgen, die gefunden werden kann, wenn `ipconfig` in einer Eingabeaufforderung ausgeführt und in die Adressleiste eines Webbrowsers eingegeben wird.
- :material-lan-connect:{ .lg .middle } __Leite Ports an deinen Computer weiter__
---
Suche in der Weboberfläche Ihres Routers nach dem Abschnitt zur Portweiterleitung. Bei den meisten Routern findet man dies unter „Netzwerk“, „Erweitert“ oder „LAN“.
- :material-test-tube:{ .lg .middle } __Teste, ob dein Port richtig weitergeleitet wird__
---
Verwenden Sie ein Tool wie CheckBeamMP, um zu testen, ob die Regel funktioniert.
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP adress:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">Port:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
</div> </div>
<ul data-md-type="list" data-md-list-type="unordered" data-md-list-tight="false">
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-dns:{ .lg .middle } <strong data-md-type="double_emphasis">Weisen Sie Ihrem Computer oder Ihren Geräten eine statische IP-Adresse zu</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">ies ist erforderlich, um zu verhindern, dass sich die IP deines Geräts ändert und die Portweiterleitung funktioniert.</p>
<p data-md-type="paragraph"><a href="https://portforward.com/router.htm#1" data-md-type="link">:octicons-arrow-right-24: Informationen zu Ihrem Router anzeigen</a></p>
</li>
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-router-wireless:{ .lg .middle } <strong data-md-type="double_emphasis">Melde dich bei deinem Router an</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">Dies kann normalerweise durch Suchen der IP des „Standard-Gateways“ erfolgen, die gefunden werden kann, wenn <code data-md-type="codespan">ipconfig</code> in einer Eingabeaufforderung ausgeführt und in die Adressleiste eines Webbrowsers eingegeben wird.</p>
</li>
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-lan-connect:{ .lg .middle } <strong data-md-type="double_emphasis">Leite Ports an deinen Computer weiter</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">Suche in der Weboberfläche Ihres Routers nach dem Abschnitt zur Portweiterleitung. Bei den meisten Routern findet man dies unter „Netzwerk“, „Erweitert“ oder „LAN“.</p>
</li>
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-test-tube:{ .lg .middle } <strong data-md-type="double_emphasis">Teste, ob dein Port richtig weitergeleitet wird</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">Verwenden Sie ein Tool wie CheckBeamMP, um zu testen, ob die Regel funktioniert.</p>
<div data-md-type="block_html">
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP Adresse:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">Port:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
</div>
</li>
</ul>
<div data-md-type="block_html"></div>
## Die ausführliche Anleitung ## Die ausführliche Anleitung
@@ -73,18 +72,14 @@ Wenn du dies geschafft hast, fahre direkt mit [Schritt 2](port-forwarding.md#2-l
#### 1.1. Finde deine aktuelle IP-Adresse, Gateway und DNS-Server: #### 1.1. Finde deine aktuelle IP-Adresse, Gateway und DNS-Server:
Bevor wir eine statische IP-Adresse einrichten können, benötigen wir deine aktuellen Netzwerkeinstellungen. Bevor wir eine statische IP-Adresse einrichten können, benötigen wir deine aktuellen Netzwerkeinstellungen. Notiere diese, halte also ein Notepadfenster bereit. Für diesen Schritt verwenden wir die Eingabeaufforderung.
Notiere diese, halte also ein Notepadfenster bereit.
Für diesen Schritt verwenden wir die Eingabeaufforderung.
Öffne die Eingabeaufforderung. Die drei wichtigsten Möglichkeiten sind: Öffne die Eingabeaufforderung. Die drei wichtigsten Möglichkeiten sind:
- Drücke die Windows-Taste, gebe dann „cmd“ ein und drücke die Eingabetaste, wenn „Eingabeaufforderung“ hervorgehoben ist. - Drücke die Windows-Taste, gebe dann „cmd“ ein und drücke die Eingabetaste, wenn „Eingabeaufforderung“ hervorgehoben ist.
<figure class="image image_resized" style="width:62%;" markdown> <figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-open-cmd.png) </figure>
![](../../assets/content/win11-open-cmd.png)
</figure>
Sobald du dich in der Eingabeaufforderung befindest, führe den folgenden Befehl aus: Sobald du dich in der Eingabeaufforderung befindest, führe den folgenden Befehl aus:
@@ -92,31 +87,22 @@ Sobald du dich in der Eingabeaufforderung befindest, führe den folgenden Befehl
ipconfig /all ipconfig /all
``` ```
Du wirst eine Menge an Daten sehen. Du wirst eine Menge an Daten sehen. Wenn du virtuelle oder mehrere Netzwerkadapter verwendest, werden noch mehr Daten angezeigt. Bei der Installation von Hyper-V oder Docker werden häufig viele virtuelle Adapter angezeigt.
Wenn du virtuelle oder mehrere Netzwerkadapter verwendest, werden noch mehr Daten angezeigt.
Bei der Installation von Hyper-V oder Docker werden häufig viele virtuelle Adapter angezeigt.
<figure class="image image_resized" style="width:62%;" markdown>
![](../../assets/content/win11-command-prompt-ipconfig-highlighted.png)
</figure>
Es wird empfohlen, für den Betrieb dieses Servers eine kabelgebundene Netzwerkverbindung zu verwenden. Eine drahtlose Verbindung funktioniert jedoch auch. <figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-command-prompt-ipconfig-highlighted.png) </figure>
Suche in dieser Liste nach einem Adapter mit aktiver Internetverbindung. Scrolle durch die Liste und suche einen Adapter mit zugewiesenem Standard-Gateway.
Viele virtuelle Adapter verfügen über kein Standard-Gateway.
Nachfolgend findest du Beispiele für lokale IPv4-Adressen, die mindestens einer der Adapter haben sollte. Es wird empfohlen, für den Betrieb dieses Servers eine kabelgebundene Netzwerkverbindung zu verwenden. Eine drahtlose Verbindung funktioniert jedoch auch. Suche in dieser Liste nach einem Adapter mit aktiver Internetverbindung. Scrolle durch die Liste und suche einen Adapter mit zugewiesenem Standard-Gateway. Viele virtuelle Adapter verfügen über kein Standard-Gateway.
Notiere dir die Informationen deines Adapters.
Nachfolgend findest du Beispiele für lokale IPv4-Adressen, die mindestens einer der Adapter haben sollte. Notiere dir die Informationen deines Adapters.
- 192.168.xx - 192.168.xx
- 10.xxx - 10.xxx
- 172.16.xx 172.31.xx - 172.16.xx 172.31.xx
Subnetzmaske (höchstwahrscheinlich 255.255.255.0) Subnetzmaske (höchstwahrscheinlich 255.255.255.0) Standard-Gateway (höchstwahrscheinlich 192.168.0.1 oder 192.168.1.1)
</br>
Standard-Gateway (höchstwahrscheinlich 192.168.0.1 oder 192.168.1.1)
!!! Info „Beachte“ !!! Info „Beachte“ BeamMP unterstützt derzeit kein IPv6 zum Hosten eines Servers.
BeamMP unterstützt derzeit kein IPv6 zum Hosten eines Servers.
#### 1.2. Adaptereinstellungen ändern #### 1.2. Adaptereinstellungen ändern
@@ -127,24 +113,17 @@ Nun müssen wir die Einstellungen deines Netzwerkadapters ändern, damit dein P
- Drücke die Eingabetaste - Drücke die Eingabetaste
<figure class="image image_resized" style="width:62%;" markdown> <figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-start-menu-view-network-connections.png) </figure>
![](../../assets/content/win11-start-menu-view-network-connections.png)
</figure>
Du solltest eine Liste der Netzwerkverbindungen auf deinem Computer sehen. Du solltest eine Liste der Netzwerkverbindungen auf deinem Computer sehen. Wenn du einen Hyper-V oder Docker installiert hast, kann es viele davon geben. Suche nach Adaptern, die nicht „Hyper-V“ heißen.
Wenn du einen Hyper-V oder Docker installiert hast, kann es viele davon geben. Suche nach Adaptern, die nicht „Hyper-V“ heißen.
<figure class="image image_resized" style="width:62%;" markdown> <figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-network-connections.png) </figure>
![](../../assets/content/win11-network-connections.png)
</figure>
Klicke mit der rechten Maustaste auf deinen Adapter und wähle Eigenschaften. Wenn `Internet Protocol Version 4` nicht aktiviert ist, handelt es sich um den falschen Adapter. Wähle einen anderen. Klicke mit der rechten Maustaste auf deinen Adapter und wähle Eigenschaften. Wenn `Internet Protocol Version 4` nicht aktiviert ist, handelt es sich um den falschen Adapter. Wähle einen anderen.
<figure class="image image_resized" style="width:62%;" markdown> <figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-ethernet-properties-highlighted.png) </figure>
![](../../assets/content/win11-ethernet-properties-highlighted.png)
</figure>
Doppelklicken Sie auf `Internet Protocol Version 4` Ändern `Obtain an IP address automatically` beziehen in `Use the following IP address` . Doppelklicken Sie auf `Internet Protocol Version 4` Ändern `Obtain an IP address automatically` beziehen in `Use the following IP address` .
@@ -156,9 +135,7 @@ Alternativ kannst du anstelle deines DNS-Servers entweder die CloudFlare- oder G
- Google DNS: 8.8.8.8, 8.8.4.4 - Google DNS: 8.8.8.8, 8.8.4.4
<figure class="image image_resized" style="width:62%;" markdown> <figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-network-settings-static-ip.png) </figure>
![](../../assets/content/win11-network-settings-static-ip.png)
</figure>
Klicke auf „OK“ und dann erneut auf „OK“. Dein Adapter ist nun von DHCP auf statisch umgestellt. Surfe im Internet, um sicherzustellen, dass du weiterhin eine Internetverbindung hast. Falls nicht, ändere deine Einstellungen wieder auf „IP-Adresse automatisch beziehen“ und versuche die nächste Methode. Klicke auf „OK“ und dann erneut auf „OK“. Dein Adapter ist nun von DHCP auf statisch umgestellt. Surfe im Internet, um sicherzustellen, dass du weiterhin eine Internetverbindung hast. Falls nicht, ändere deine Einstellungen wieder auf „IP-Adresse automatisch beziehen“ und versuche die nächste Methode.
@@ -177,12 +154,12 @@ Du solltest nun den Anmeldebildschirm deines Routers sehen. Nicht alle Router er
Einige der gebräuchlichsten werkseitigen Benutzernamen und Passwörter sind hier aufgeführt: Einige der gebräuchlichsten werkseitigen Benutzernamen und Passwörter sind hier aufgeführt:
| Username | Passwort | Username | Passwort
| -------- | --- | --- | ---
| admin | admin | admin | admin
| admin | password | admin | password
| {leer} | admin | {leer} | admin
| {leer} | password | {leer} | password
Probiere verschiedene Kombinationen aus „Administrator“, „Passwort“ und lasse die Einträge leer. *Lasse den Wert bei „Leer“ leer.* Probiere verschiedene Kombinationen aus „Administrator“, „Passwort“ und lasse die Einträge leer. *Lasse den Wert bei „Leer“ leer.*
@@ -202,17 +179,11 @@ Suche den Abschnitt zur Portweiterleitung in der Weboberfläche deines Routers.
#### 3.2. Gebe die Details ein #### 3.2. Gebe die Details ein
Sobald du den Bereich für die Portweiterleitung gefunden hast, kannst du die erforderlichen Informationen eingeben. Sobald du den Bereich für die Portweiterleitung gefunden hast, kannst du die erforderlichen Informationen eingeben. Dein Router bietet dir die Möglichkeit, die weiterzuleitenden Ports und die Ziel-IP-Adresse für diese Portweiterleitung einzugeben. Wenn dein Router sowohl interne als auch externe Ports angibt, achte darauf, dass diese identisch sind.
Dein Router bietet dir die Möglichkeit, die weiterzuleitenden Ports und die Ziel-IP-Adresse für diese Portweiterleitung einzugeben. Wenn dein Router sowohl interne als auch externe Ports angibt, achte darauf, dass diese identisch sind.
BeamMP erfordert sowohl UDP- als auch TCP-Port 30814 (es sei denn, du hast diesen in deiner [ServerConfig.toml](create-a-server.md#4-configuration) geändert). BeamMP erfordert sowohl UDP- als auch TCP-Port 30814 (es sei denn, du hast diesen in deiner [ServerConfig.toml](create-a-server.md#4-configuration) geändert).
!!!! info "Hinweis" !!!! info "Hinweis" Der **Standardport** ist **30814.** Du kannst aber auch andere Ports größer als 1024 und kleiner als 65535 wählen. Notiere dir deine Wahl, falls diese nicht 30814 ist. Du musst sowohl **TCP** als auch **UDP** weiterleiten. Es wird empfohlen, den Standardport beizubehalten, da dieser höchstwahrscheinlich nicht von einem anderen Dienst auf Ihrem PC verwendet wird. Wenn du jedoch mehrere Server auf einem Rechner hostest, benötigt jeder Server einen anderen Port. Server 1: 30814, Server 2: 30815 zum Beispiel.
Der **Standardport** ist **30814.** Du kannst aber auch andere Ports größer als 1024 und kleiner als 65535 wählen. Notiere dir deine Wahl, falls diese nicht 30814 ist. Du musst sowohl **TCP** als auch **UDP** weiterleiten.
</br>
Es wird empfohlen, den Standardport beizubehalten, da dieser höchstwahrscheinlich nicht von einem anderen Dienst auf Ihrem PC verwendet wird.
</br>
Wenn du jedoch mehrere Server auf einem Rechner hostest, benötigt jeder Server einen anderen Port. Server 1: 30814, Server 2: 30815 zum Beispiel.
Auf einigen Routern muss man möglicherweise zwei Regeln erstellen, eine für UDP und eine für TCP, während andere praktisch sind und dir beides mit einer einzigen Regel ermöglichen! Auf einigen Routern muss man möglicherweise zwei Regeln erstellen, eine für UDP und eine für TCP, während andere praktisch sind und dir beides mit einer einzigen Regel ermöglichen!
@@ -225,7 +196,7 @@ Es gibt verschiedene Möglichkeiten, die Verbindung zu testen.
Wir empfehlen die Verwendung unseres Tools **CheckBeamMP**, da dieses auf BeamMP-spezifische Probleme und Protokolle testet. Wir empfehlen die Verwendung unseres Tools **CheckBeamMP**, da dieses auf BeamMP-spezifische Probleme und Protokolle testet.
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank"> <form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP adress:</label> <label for="ip">IP Adresse:</label>
<input type="text" id="ip" name="ip"><br> <input type="text" id="ip" name="ip"><br>
<label for="port">Port:</label> <label for="port">Port:</label>
<input type="text" id="port" name="port"><br> <input type="text" id="port" name="port"><br>
@@ -234,17 +205,18 @@ Wir empfehlen die Verwendung unseres Tools **CheckBeamMP**, da dieses auf BeamMP
Dies kann durch die Abfrage deiner öffentlichen IPv4-Adresse erfolgen. Auch hierfür gibt es verschiedene Möglichkeiten. Die häufigste Methode ist die Nutzung der Website [whatsmyip.org](https://whatsmyip.org/) . Diese einfache Website zeigt deine öffentliche IP-Adresse an. Du solltest nach einer IP-Adresse im Format xxx.xxx.xxx.xxx suchen. Dies kann durch die Abfrage deiner öffentlichen IPv4-Adresse erfolgen. Auch hierfür gibt es verschiedene Möglichkeiten. Die häufigste Methode ist die Nutzung der Website [whatsmyip.org](https://whatsmyip.org/) . Diese einfache Website zeigt deine öffentliche IP-Adresse an. Du solltest nach einer IP-Adresse im Format xxx.xxx.xxx.xxx suchen.
Besuche den folgenden Link und ersetzen Sie "IP" durch deine tatsächliche IPv4-Adresse und "Port" durch den Port deines Servers. Achte darauf, keine Leerzeichen zu hinterlassen. Besuche den folgenden Link und ersetzen Sie "IP" durch deine tatsächliche IPv4-Adresse und "Port" durch den Port deines Servers. Achte darauf, keine Leerzeichen zu hinterlassen. https://check.beammp.com/api/v2/beammp/ip/port
https://check.beammp.com/api/v2/beammp/ip/port
!!! success "status: ok" !!! success "status: ok"
Wenn du die obige Ausgabe erhältst, kannst du des jetzt deinem Server beitreten! ```
Es gibt zwei Möglichkeiten, beizutreten: entweder direkt mit den Daten, die du in probablyup eingegeben hast, oder, wenn dein Server auf „öffentlich“ eingestellt ist, über die Serverliste. Wenn du die obige Ausgabe erhältst, kannst du des jetzt deinem Server beitreten!
Da du einen Server vor Ort hostest, verwenden 127.0.0.1 (localhost), wenn der Server auf demselben PC läuft, auf dem du spielst, oder die LAN-IPv4 des lokalen Computers, auf dem der Server läuft. Es gibt zwei Möglichkeiten, beizutreten: entweder direkt mit den Daten, die du in probablyup eingegeben hast, oder, wenn dein Server auf „öffentlich“ eingestellt ist, über die Serverliste.
Da du einen Server vor Ort hostest, verwenden 127.0.0.1 (localhost), wenn der Server auf demselben PC läuft, auf dem du spielst, oder die LAN-IPv4 des lokalen Computers, auf dem der Server läuft.
```
!!! failure "status: error" !!! failure "status: error"
Wenn die Verbindung vollständig fehlschlägt, verwendet dein Anbieter möglicherweise CGNAT (Carrier Grade Network Address Translation). Weitere Informationen findest du unter [Wie kann ich auf CGNAT prüfen?](../FAQ/How-to-check-for-CGNAT.md), ```
oder öffne ein Server-Support-Ticket auf unserem [Discord-Server](https://discord.gg/beammp) im Kanal „#support“ und einer unserer Mitarbeiter wird sich um dein Ticket kümmern! Wenn die Verbindung vollständig fehlschlägt, verwendet dein Anbieter möglicherweise CGNAT (Carrier Grade Network Address Translation). Weitere Informationen findest du unter Wie kann ich auf CGNAT prüfen?, oder öffne ein Server-Support-Ticket auf unserem Discord-Server im Kanal „#support“ und einer unserer Mitarbeiter wird sich um dein Ticket kümmern! Wenn du nur siehst, dass TCP funktioniert und UDP fehlschlägt, überprüfe die Firewall- und Portweiterleitungsregeln erneut.
Wenn du nur siehst, dass TCP funktioniert und UDP fehlschlägt, überprüfe die Firewall- und Portweiterleitungsregeln erneut. ```
+1 -1
View File
@@ -22,7 +22,7 @@ BeamMP funktioniert nicht mit Raubkopien oder veralteten Versionen von BeamNG.dr
### **Funktioniert BeamMP unter Linux?** ### **Funktioniert BeamMP unter Linux?**
Der BeamMP-Launcher wird unter Linux nicht offiziell unterstützt. Du kannst jedoch unserer [Anleitung zur Verwendung von BeamMP unter Linux](../game/getting-started/#2b-linux-installation) folgen. Der BeamMP-Launcher wird unter Linux nicht offiziell unterstützt. Du kannst jedoch unserer [Anleitung zur Verwendung von BeamMP unter Linux](../../game/getting-started.md#2b-linux-installation) folgen.
--- ---
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,41 +1,41 @@
## Why do I need to deactivate my mods? ## Why do I have to deactivate/remove my mods?
In BeamMP, the Server you decide to connect to, provides the necessary mods. These get downloaded and activated automatically upon connecting. In BeamMP, the Server you decide to connect to, provides the necessary mods. These get downloaded and activated automatically upon connecting.
Having local mods installed and active often leads to BeamMP not functioning properly, even if you have just one additional mod besides BeamMP. Having local mods installed and active often leads to BeamMP not functioning properly, even if you have just one additional mod besides BeamMP.
!!! warning
Remove any mods you have placed in the BeamNG.Drive\content\ or sub-folders. That location is NOT meant for the installing mods and can lead to issues as stated in the `DO_NOT_INSTALL_MODS_HERE.txt` file, located in the same directory. There are 3 options to resolve possible issues caused by mods with using BeamMP.
!!! quote "DO_NOT_INSTALL_MODS_HERE.txt"
Do NOT copy mods into this folder: it can lead to broken mods, slower installation of updates, a broken mod manager, broken Safe Mode and others.
## How do I deactivate/remove my mods?
There are 3 options to resolve possible issues when using BeamMP.
### 1. Deactivate mods ### 1. Deactivate mods
Before joining any server, make sure you have no mods besides 'multiplayerbeammp' enabled. Before joining any server, make sure you have no mods besides 'multiplayerbeammp' enabled.
If the game freezes or you still have issues, refer to the next option If this method does not work, for example the game freezes / shows a blackscreen, or you still have issues, refer to the next option.
### 2. Creating a new Userfolder ### 2. Creating a new Userfolder
Open the BeamNG.Drive userfolder and rename the `current` folder to for example `current_old`. Close BeamNG.drive before renaming it. Open the BeamNG.Drive userfolder and rename the `current` folder to for example `current_old`. Close BeamNG.drive before renaming the folder.
The result should be a clean new userfolder.
![image](../../assets/content/new-userfolder.png) ![image](../../assets/content/new-userfolder.png)
### 3. Removing mods from the content folders. ??? question "My settings and configs are gone! How can I restore them?"
To access the Beamng.drive\content\ folder and clean the folder of any mods, open the installation location of BeamNG.drive.
Right click the `content` folder and delete it. Proceed to verify the game files via Steam or Epic Games. This is going to download the files again. If you have renamed the userfolder, you forced the game to create a new, clean userfolder. You may copy the 'settings' and 'vehicles' folder from the folder you renamed (e.g. `current_old`) to the new folder it created.
Make sure BeamNG.Drive is closed and replace all elements in the location you want to copy the folders to. You should now have all configs and settings as they were before.
!!! warning "Be careful when moving back files/folders to the new userfolder.
If you resolved any issues by renaming the userfolder, moving back the old files may cause any issues you had to possibly re-occur.
After you are done, start BeamNG.Drive via the BeamMP-Launcher and you should have 'multiplayerbeammp' as your only enabled mod available in the repository as well as the button on the Main Menu to enter BeamMP. After you are done, start BeamNG.Drive via the BeamMP-Launcher and you should have 'multiplayerbeammp' as your only enabled mod available in the repository as well as the button on the Main Menu to enter BeamMP.
If you still have issues joining modded server, they likely provide broken/outdated mods. If you still have issues joining modded server, they likely provide broken/outdated mods.
### 4. Cleaning up the BeamMP-Launcher cache ### 3. Cleaning up the BeamMP-Launcher cache.
To clean up cached mods from the BeamMP directories, go to the installation location of your BeamMP-Launcher. By default, the path would be 'C:\Users\AppData\BeamMP-Launcher\'. In there, you will find a 'Resources' folder. To clean up cached mods from the BeamMP directories, go to the installation location of your BeamMP-Launcher. By default, the path would be 'C:\Users\AppData\BeamMP-Launcher\'. In there, you will find a 'Resources' folder.
Delete the folder to delete all cached mods. This can be helpful if you need more space on your disk or want to clean out oudated BeamNG mods. Delete the folder to delete all cached mods. This can be helpful if you need more space on your disk or want to clean out oudated BeamNG mods.
!!! question "My settings and configs are gone! How can I restore them?" ### 4. Removing mods from the content folders.
If you have placed mods in the content folder, you should remove them.
To access the Beamng.drive\content\ folder and clean the folder of any mods, open the installation location of BeamNG.drive.
Right click the `content` folder and delete it. Proceed to verify the game files via Steam or Epic Games. This is going to download the base files again.
If you renamed the userfolder, you forced the game to create a new, clean userfolder. You may copy the 'settings' and 'vehicles' folder from the folder you renamed (e.g. `current_old`) to the new folder it created. ??? quote "DO_NOT_INSTALL_MODS_HERE.txt"
Make sure BeamNG.Drive is closed and replace all elements in the location you want to copy the folders to. You should now have all configs and settings as they were before.
Do NOT copy mods into this folder: it can lead to broken mods, slower installation of updates, a broken mod manager, broken Safe Mode and others.
+5 -4
View File
@@ -10,20 +10,21 @@ List of commonly asked questions.
There is a full guide on how to install BeamMP on Windows, you can find it [here](https://docs.beammp.com/game/getting-started/). There is a full guide on how to install BeamMP on Windows, you can find it [here](https://docs.beammp.com/game/getting-started/).
--- ---
### **Does BeamMP work on a cracked version of BeamNG?** ### **Does BeamMP work with pirated / modified versions of BeamNG?**
BeamMP will not work with pirated or outdated versions of BeamNG.drive. BeamMP will not work with pirated or outdated versions of BeamNG.drive.
The BeamMP support team does not offer support for issues with pirated / outdated copies. Modifications such as, but not limited to, 3rd party mods, may interfere with BeamMP. (See [How to clear mods](https://github.com/Protogen187/Docs/blob/main/docs/en/FAQ/Clearing-mods.md))
The BeamMP support team is unable to provide support for issues related to: pirated, outdated or otherwise modified versions of BeamNG.drive.
--- ---
### **Does BeamMP work on linux?** ### **Does BeamMP work on linux?**
The Client is not officially supported on Linux. However, you can follow our [guide on how to use BeamMP on Linux](../game/getting-started/#2b-linux-installation) The Client is not officially supported on Linux. However, you can follow our [guide on how to use BeamMP on Linux](../../game/getting-started.md#2b-linux-installation)
--- ---
### **Why is the launcher flagged by my antivirus or by Windows Defender** ### **Why is the launcher flagged by my antivirus or by Windows Defender**
Some antivirus programs may flag BeamMP as a threat, due to it interacting with the network and other stuff. There are **no viruses** in any of the code. The code for the launcher, server, and lua client can be found on our [GitHub](https://github.com/BeamMP). Some antivirus programs may flag BeamMP as a threat, due to it interacting with the network and other factors. There are **no viruses** in any of the code. The code for the launcher, server, and lua client can be found on our [GitHub](https://github.com/BeamMP).
--- ---
### **I have poor gameplay performance, what should I do?** ### **I have poor gameplay performance, what should I do?**
+1 -1
View File
@@ -7,7 +7,7 @@ Linking your Discord and BeamMP account is a new feature to BeamMP. To do this g
Early access (including the purple nametag and other benefits) can be obtained by supporting us financially on [Patreon](https://patreon.com/BeamMP) by buying a tier, donating, or by boosting the Discord Server. Early access (including the purple nametag and other benefits) can be obtained by supporting us financially on [Patreon](https://patreon.com/BeamMP) by buying a tier, donating, or by boosting the Discord Server.
Donating **x** amount US$ = **x** additional server key(s) including EA benefits. Donating **x** amount US$ = **x** additional server key(s) including EA benefits.
Boosting gives you +4 Server keys in addition to EA benefits. Boosting gives you +5 Server keys (in total, not accumulative per boost) in addition to EA benefits.
## I subscribed on Patreon. How do I get my perks? ## I subscribed on Patreon. How do I get my perks?
+6
View File
@@ -81,3 +81,9 @@ If you don't have a GitHub account or you don't know how to use GitHub you can g
- If it is not something sensitive, you can create a post on our [BeamMP Forum](https://forum.beammp.com) or you can report this on our [Official Discord](https://discord.gg/beammp). - If it is not something sensitive, you can create a post on our [BeamMP Forum](https://forum.beammp.com) or you can report this on our [Official Discord](https://discord.gg/beammp).
- If the information is sensitive you can directly report the issue to a Staff member on our [Discord](https://discord.gg/beammp). - If the information is sensitive you can directly report the issue to a Staff member on our [Discord](https://discord.gg/beammp).
---
### **My AuthKey was compromised, what should I do?**
If you believe that one of your AuthKeys are compromised, please create an **Account Support** ticket via our [Discord](https://discord.gg/beammp).
+11
View File
@@ -0,0 +1,11 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# BeamNG.drive CEF Code Snippets
to-do
+283
View File
@@ -0,0 +1,283 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# BeamNG.drive CSS Code Snippets
## Common variables
=== "BeamNG CEF Orange"
```css
var(--bng-orange) /*Common orange*/
var(--bng-orange-shade1) /*70% opacity*/
var(--bng-orange-shade2) /*40% opacity*/
var(--bng-orange-shade1opaque)
var(--bng-orange-shade2opaque)
```
=== "Monochrome"
```css
--- Monochrome
var(--bng-black-8) /*80% opacity (duplicate --bng-black-o8)*/
var(--bng-black-6) /*60% opacity (duplicate --bng-black-o6)*/
var(--bng-black-4) /*40% opacity (duplicate --bng-black-o4)*/
var(--bng-black-2) /*20% opacity (duplicate --bng-black-o2)*/
var(--dark-neutral-grey)
var(--neutral-grey)
var(--light-neutral-grey)
var(--dark-grey)
var(--dark-grey-alpha) /*80% opacity*/
var(--black-1) /*70% opacity*/
var(--black-2) /*40% opacity (duplicate --bng-black-o4)*/
var(--white-1) /*80% opacity*/
var(--white-2) /*40% opacity*/
var(--white-3) /*20% opacity*/
```
=== "BeamNG Vue UI Color Palette"
All of these support adding `-rgb` to the end of the variable name to convert them to raw red, green, blue values. Use -rgb like so: `rgba(var(--bng-orange-500-rgb), 0.5)` for 50% opacity bng-orange-500.
=== "Add Red"
```css
var(--bng-add-red-50)
var(--bng-add-red-100)
var(--bng-add-red-200)
var(--bng-add-red-300)
var(--bng-add-red-400)
var(--bng-add-red-500)
var(--bng-add-red-550)
var(--bng-add-red-600)
var(--bng-add-red-650)
var(--bng-add-red-700)
var(--bng-add-red-750)
var(--bng-add-red-800)
var(--bng-add-red-850)
var(--bng-add-red-900)
```
=== "Orange"
```css
var(--bng-orange-50)
var(--bng-orange-100)
var(--bng-orange-200)
var(--bng-orange-300)
var(--bng-orange-400)
var(--bng-orange-500)
var(--bng-orange-550)
var(--bng-orange-600)
var(--bng-orange-650)
var(--bng-orange-700)
var(--bng-orange-750)
var(--bng-orange-800)
var(--bng-orange-850)
var(--bng-orange-900)
```
=== "Ter Peach"
```css
var(--bng-ter-peach-50)
var(--bng-ter-peach-100)
var(--bng-ter-peach-200)
var(--bng-ter-peach-300)
var(--bng-ter-peach-400)
var(--bng-ter-peach-500)
var(--bng-ter-peach-550)
var(--bng-ter-peach-600)
var(--bng-ter-peach-650)
var(--bng-ter-peach-700)
var(--bng-ter-peach-750)
var(--bng-ter-peach-800)
var(--bng-ter-peach-850)
var(--bng-ter-peach-900)
```
=== "Ter Yellow"
```css
var(--bng-ter-yellow-50)
var(--bng-ter-yellow-100)
var(--bng-ter-yellow-200)
var(--bng-ter-yellow-300)
var(--bng-ter-yellow-400)
var(--bng-ter-yellow-500)
var(--bng-ter-yellow-550)
var(--bng-ter-yellow-600)
var(--bng-ter-yellow-650)
var(--bng-ter-yellow-700)
var(--bng-ter-yellow-750)
var(--bng-ter-yellow-800)
var(--bng-ter-yellow-850)
var(--bng-ter-yellow-900)
```
=== "Add Green"
```css
var(--bng-add-green-50)
var(--bng-add-green-100)
var(--bng-add-green-200)
var(--bng-add-green-300)
var(--bng-add-green-400)
var(--bng-add-green-500)
var(--bng-add-green-550)
var(--bng-add-green-600)
var(--bng-add-green-650)
var(--bng-add-green-700)
var(--bng-add-green-750)
var(--bng-add-green-800)
var(--bng-add-green-850)
var(--bng-add-green-900)
```
=== "Baby Blue"
```css
var(--bng-add-babyblue-50)
var(--bng-add-babyblue-100)
var(--bng-add-babyblue-200)
var(--bng-add-babyblue-300)
var(--bng-add-babyblue-400)
var(--bng-add-babyblue-500)
var(--bng-add-babyblue-550)
var(--bng-add-babyblue-600)
var(--bng-add-babyblue-650)
var(--bng-add-babyblue-700)
var(--bng-add-babyblue-750)
var(--bng-add-babyblue-800)
var(--bng-add-babyblue-850)
var(--bng-add-babyblue-900)
```
=== "Add Blue"
```css
var(--bng-add-blue-50)
var(--bng-add-blue-100)
var(--bng-add-blue-200)
var(--bng-add-blue-300)
var(--bng-add-blue-400)
var(--bng-add-blue-500)
var(--bng-add-blue-550)
var(--bng-add-blue-600)
var(--bng-add-blue-650)
var(--bng-add-blue-700)
var(--bng-add-blue-750)
var(--bng-add-blue-800)
var(--bng-add-blue-850)
var(--bng-add-blue-900)
```
=== "Indigo Blue"
```css
var(--bng-add-indigoblue-50)
var(--bng-add-indigoblue-100)
var(--bng-add-indigoblue-200)
var(--bng-add-indigoblue-300)
var(--bng-add-indigoblue-400)
var(--bng-add-indigoblue-500)
var(--bng-add-indigoblue-550)
var(--bng-add-indigoblue-600)
var(--bng-add-indigoblue-650)
var(--bng-add-indigoblue-700)
var(--bng-add-indigoblue-750)
var(--bng-add-indigoblue-800)
var(--bng-add-indigoblue-850)
var(--bng-add-indigoblue-900)
```
=== "Add Magenta"
```css
var(--bng-add-magenta-50)
var(--bng-add-magenta-100)
var(--bng-add-magenta-200)
var(--bng-add-magenta-300)
var(--bng-add-magenta-400)
var(--bng-add-magenta-500)
var(--bng-add-magenta-550)
var(--bng-add-magenta-600)
var(--bng-add-magenta-650)
var(--bng-add-magenta-700)
var(--bng-add-magenta-750)
var(--bng-add-magenta-800)
var(--bng-add-magenta-850)
var(--bng-add-magenta-900)
```
=== "Ter Blue Gray"
```css
var(--bng-ter-blue-gray-50)
var(--bng-ter-blue-gray-100)
var(--bng-ter-blue-gray-200)
var(--bng-ter-blue-gray-300)
var(--bng-ter-blue-gray-400)
var(--bng-ter-blue-gray-500)
var(--bng-ter-blue-gray-550)
var(--bng-ter-blue-gray-600)
var(--bng-ter-blue-gray-650)
var(--bng-ter-blue-gray-700)
var(--bng-ter-blue-gray-750)
var(--bng-ter-blue-gray-800)
var(--bng-ter-blue-gray-850)
var(--bng-ter-blue-gray-900)
```
=== "Cool Gray"
```css
var(--bng-cool-gray-50)
var(--bng-cool-gray-100)
var(--bng-cool-gray-200)
var(--bng-cool-gray-300)
var(--bng-cool-gray-400)
var(--bng-cool-gray-500)
var(--bng-cool-gray-550)
var(--bng-cool-gray-600)
var(--bng-cool-gray-650)
var(--bng-cool-gray-700)
var(--bng-cool-gray-750)
var(--bng-cool-gray-800)
var(--bng-cool-gray-850)
var(--bng-cool-gray-900)
```
=== "Other"
```css
var(--bng-off-black) /*Used in Vue for buttons and some headers*/
var(--bng-off-white) /*Used in Vue for interactable elements*/
var(--bng-off-white-brighter) /*Used in Vue for headers*/
```
=== "Extra color presets"
```css
var(--bng-filter-orange) /*Filter preset to force SVGs to use bng-orange*/
var(--bng-black-o8) /*80% opacity*/
var(--bng-black-o6) /*60% opacity*/
var(--bng-black-o4) /*40% opacity*/
var(--bng-black-o2) /*20% opacity*/
```
=== "Corner rounding presets"
```css
var(--bng-corners-1) /*0.25rem*/
var(--bng-corners-2) /*0.50rem*/
var(--bng-corners-3) /*1.00rem*/
```
@@ -0,0 +1,89 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# Creating an ImGui Window
This page covers how to create a basic ImGui window.
## Setup
Before using ImGui, some setup is required:
```lua
local im = ui_imgui -- shortcut to prevent lookups all the time. should help with optimization
local imguiExampleWindowOpen = im.BoolPtr(true)
```
`imguiExampleWindowOpen` will be used to determine when this example window should be rendered.
## Window Rendering
ImGui windows and their contents must be recreated for every frame they should be displayed. This means that some form of onUpdate function is necessary to use ImGui.
```lua
local function onUpdate()
if worldReadyState == 2 then
if imguiExampleWindowOpen[0] == true then
imguiExample()
end
end
end
M.onUpdate = onUpdate
```
This will run a function to create this example's window, so long as the level is fully loaded, and that the example window should be displaying.
## Window Content
If you're new to writing ImGui, think of it as a distant cousin of HTML:
* `im.SetNextWindowSize(im.ImVec2(x, y), im.Cond_FirstUseEver)` defines your viewport size if it hasn't already been defined
* `im.Begin()` and `im.End()` is your `<body>` and `</body>`
* `im.Text()` is your `<p></p>`
```lua
local buttonPresses = 0
local function imguiExample()
im.SetNextWindowSize(im.ImVec2(366, 100), im.Cond_FirstUseEver) -- prepare our window
im.Begin("Hello World, I am a window") -- create a window with the title of "Hello World, I am a window"
im.Indent() -- a... padding element
im.Text("Hello World, I am text.") -- add a line of text, somewhat like a <p> element
im.SameLine() -- Not really HTML. This appends the following element to the same line as the previous element.
if im.Button("The Hello World Button") then -- Like <button>. This runs Lua when pressed.
buttonPresses = buttonPresses + 1
end
if buttonPresses > 0 then
im.Text("The Hello World Button has been pressed " .. buttonPresses .. " times!")
else
im.Text("The Hello World Button has not been pressed.")
end
im.Unindent() -- end the "padding element"
im.End() -- complete our "canvas" so it can be drawn
end
```
You can add the following function to easily toggle visibility of the window:
```lua
local function toggleExampleImgui()
imguiExampleWindowOpen[0] = not imguiExampleWindowOpen[0]
end
```
## Result
<figure class="image image_resized" style="width:100%" markdown>
![The ImGui example code demonstrated ingame](../../../../assets/content/imguiExample.png)
</figure>
When the The Hello World Button button is pressed, the counter below it will update to display the amount of times the The Hello World Button button has been pressed.
## Download
This tutorial is almost entirely based off of [StanleyDudek](https://github.com/StanleyDudek)'s ImGui example mod. You can download this example mod [here](../../../../assets/content/imguiExample.zip).
@@ -1,2 +1,10 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# imgui-windows.md # imgui-windows.md
This page needs creating This page needs creating
+8
View File
@@ -1,2 +1,10 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# lua-mods.md # lua-mods.md
This page needs creating This page needs creating
+8
View File
@@ -1,3 +1,11 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# UI-App Creation # UI-App Creation
In order to make a UI-App you will need some knowledge of the AngularJS framework, the main documentation can be found here: [AngularJS docs](https://docs.angularjs.org/guide) In order to make a UI-App you will need some knowledge of the AngularJS framework, the main documentation can be found here: [AngularJS docs](https://docs.angularjs.org/guide)
+77
View File
@@ -0,0 +1,77 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# BeamNG.drive ImGui Code Snippets
## Setup
### Setup ImGui
```lua
local im = ui_imgui
```
### Setup Window
```lua
im.SetNextWindowSize(im.ImVec2(366, 100), im.Cond_FirstUseEver)
```
### Create window
```lua
im.Begin("Window Title") -- Create window
im.End()
```
## General
=== "Basic Formatting"
```lua
im.Text("")
im.TextWrapped("") -- automatic word wrap
im.TextColored(im.ImVec4(0,1,0,1), "") -- R,G,B,A
im.TextDisabled("") -- predefined style for disabled text
im.LabelText("", "")
im.BulletText("") -- Bullet point with text
im.SeparatorText("") -- Separator with centered text
im.Separator() -- might want a NewLine before these
im.SameLine() -- horizontally append the following element to the previous element
im.NewLine()
im.Spacing() -- small padding
im.Indent()
im.Unindent()
```
=== "Inputs"
```lua
im.Button("", im.ImVec2(0,0)) -- 0 = fit to content
im.SmallButton("") -- Fit to content and slightly less padding
im.ArrowButton("", 0) -- arg 1: string is not actually used? arg 2: 0 = left, 1 = right, 2 = up, 3 = down
im.InvisibleButton("", im.ImVec2(0,0), ...) -- used for imgui cursor positioning?
im.Checkbox("", im.BoolPtr(false))
im.RadioButton1("", im.BoolPtr(false))
im.RadioButton2("", im.IntPtr(), 0) -- arg. 3: 0 or 1 for disabled or enabled
```
=== "Other"
```lua
im.Bullet()
im.ProgressBar(0.5, im.ImVec2(0,0), "") -- arg 2: 0 for default width and/or height
im.TextUnformatted("", "") -- Second argument seems to crash the game
```
+1 -2
View File
@@ -4,7 +4,6 @@ This documentation is unofficial and produced by the BeamMP Mod Team and the Bea
## Understanding The File Structure ## Understanding The File Structure
... ...
## Snippets ## Snippets
Helpful code snippets can be found here: [Snippets](snippets.md) Helpful code snippets can be found here: [Lua Snippets](lua-snippets.md)
+381
View File
@@ -0,0 +1,381 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# BeamNG.drive Lua Code Snippets
## World
### Drawing a marker & Vehicle detection
Drawing markers in the map can be one of the best ways to indicate to the user that there is some form of interaction that they can do there.
Drawing a marker is fairly easy. Here is an example of how the bus route marker is drawn:
```lua
local function createBusMarker(markerName)
local marker = createObject('TSStatic')
marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae")
marker:setPosition(vec3(0, 0, 0))
marker.scale = vec3(1, 1, 1)
marker:setField('rotation', 0, '1 0 0 0')
marker.useInstanceRenderData = true
marker:setField('instanceColor', 0, '1 1 1 0')
marker:setField('collisionType', 0, "Collision Mesh")
marker:setField('decalType', 0, "Collision Mesh")
marker:setField('playAmbient', 0, "1")
marker:setField('allowPlayerStep', 0, "1")
marker:setField('canSave', 0, "0")
marker:setField('canSaveDynamicFields', 0, "1")
marker:setField('renderNormals', 0, "0")
marker:setField('meshCulling', 0, "0")
marker:setField('originSort', 0, "0")
marker:setField('forceDetail', 0, "-1")
marker.canSave = false
marker:registerObject(markerName)
scenetree.MissionGroup:addObject(marker)
return marker
end
-- this can then be called in a loop to setup your markers.
-- NOTE: You should only do this once as part of your setup and not called on each frame.
if #markers == 0 then
for k,v in pairs(nameMarkers) do
local mk = scenetree.findObject(v)
if mk == nil then
log('I', logTag,'Creating marker '..tostring(v))
mk = createBusMarker(v)
ScenarioObjectsGroup:addObject(mk.obj)
end
table.insert(markers, mk)
end
end
```
Here is a custom marker example from [BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master):
```lua
local stations = [
{ "location": [ -778.813, 485.973, 23.46 ], "type":"gas" },
{ "location": [ 617.164, -192.107, 53.2 ], "type":"ev" },
]
local function IsEntityInsideArea(pos1, pos2, radius)
return pos1:distance(pos2) < radius
end
local onUpdate = function (dt)
for k, spot in pairs(stations) do -- loop through all spots on the current map
local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])
local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)
local spotInRange = false -- is this spot in range? used for color
local spotCompatible = false -- is this spot compatible?
if activeVeh then -- we have a car and its ours (if in mp)
local vehPos = activeVeh:getPosition()
spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)
spotCompatible = activeFuelType == "any" or spot.type == "any" or activeFuelType == spot.type
end
local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)
debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color
end
end
```
## User Interface
### Toast Notifications, Top right of screen
<figure class="image image_resized" style="width:75%" markdown>
![image](https://github.com/StanleyDudek/Docs/assets/49531350/c8a87842-b95a-4eca-84dc-93072ecc9158)
</figure>
```lua
--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})
guihooks.trigger('toastrMsg', {type = "info", title = "Info Message:", msg = "Info Message Text Here", config = {timeOut = 5000}})
guihooks.trigger('toastrMsg', {type = "warning", title = "Warning Message:", msg = "Warning Message Text Here", config = {timeOut = 5000}})
guihooks.trigger('toastrMsg', {type = "error", title = "Error Message:", msg = "Error Message Text Here", config = {timeOut = 5000}})
```
### Message notifications, top left of screen by default in Messages app
This requires the 'Messages' or 'Messages & Tasks' UI app. Icons can be found at `ui\ui-vue\src\assets\fonts\bngIcons\svg\`
<figure class="image image_resized" style="width:75%" markdown>
![image](https://github.com/StanleyDudek/Docs/assets/49531350/6baef813-50cb-43c3-9c59-0de550b014b6)
</figure>
```lua
--guihooks.trigger('Message', {msg, ttl, category, icon})
--ui_message(msg, ttl, category, icon)
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check", icon = "check"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check_circle", icon = "check_circle"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "warning", icon = "warning"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "error", icon = "error"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "directions_car", icon = "directions_car"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "star", icon = "star"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "timeline", icon = "timeline"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "save", icon = "save"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "settings", icon = "settings"})
```
### Center large or small display flash
<figure class="image image_resized" style="width:75%" markdown>
![image](https://github.com/StanleyDudek/Docs/assets/49531350/d0cf754f-83f8-4d15-9159-27350da127de)
</figure>
<figure class="image image_resized" style="width:75%" markdown>
![image](https://github.com/StanleyDudek/Docs/assets/49531350/1df6fc9b-756f-484e-b8d9-5df346dc4c26)
</figure>
```lua
--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app
guihooks.trigger('ScenarioFlashMessage', {{"Message", 5.0, 0, true}} )
guihooks.trigger('ScenarioFlashMessage', {{"Message Text Here", 5.0, 0, false}} )
--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires
guihooks.trigger('ScenarioFlashMessage', {{"3", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"2", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"1", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"GO!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')", true}})
--another sound example
guihooks.trigger('ScenarioFlashMessage', {{"Teleported!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')", false}})
```
### Center mid-size persistent display
This requires the 'Race Realtime Display' UI app.
<figure class="image image_resized" style="width:75%" markdown>
![image](https://github.com/StanleyDudek/Docs/assets/49531350/6290e018-6b3d-4674-98f2-34282a723258)
</figure>
```lua
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app
guihooks.trigger('ScenarioRealtimeDisplay', {msg = "Message Text Here"} )
--these messages persist, clear with a blank string
--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)
guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} )
```
### Confirmation Dialog
ConfirmationDialog is a simplistic popup with up to two buttons.
```lua
-- Open a ConfirmationDialog with a title, body text, and up to two buttons
guihooks.trigger("ConfirmationDialogOpen",
"Example Title",
"Example Body Text",
"Okay",
"", --gelua. empty string
"Cancel",
"" --gelua
)
-- Close any open ConfirmationDialog with the provided title
guihooks.trigger("ConfirmationDialogClose", "Example Title")
```
<figure class="image image_resized" style="width:75%" markdown>
![Example of a ConfirmationDialog](../../assets/content/ConfirmationDialog.png)
</figure>
Both fields of a button must be strings in order for the button to appear.
If the Okay button is provided, pressing the *OK / Primary action* action is equivalent to pressing the Okay button.
If the Cancel button is provided, pressing the *Menu* action is equivalent to pressing the Cancel button.
HTML is supported and can be used to add images/icons, for example.
Multiple can be displayed at once, displayed sequentially.
!!! bug
Providing no buttons prevents the player from escaping the dialog without using the console.
!!! bug
The SDF parts of the Minimap UI app remain visible while a ConfirmationDialog is active.
`#!lua guihooks.trigger('ShowApps', false)` to hide UI apps can be used as a hacky workaround.
<figure class="image image_resized" style="width:75%" markdown>
![ConfirmationDialog being used for an inactivity kick system](../../assets/content/ConfirmationDialog_Example.png)
</figure>
### introPopupTutorial
introPopupTutorial is a highly customizable popup that is largely defined with embedded HTML. It is standard to load from a standalone HTML file located in `/gameplay/tutorials/pages/*/content.html`.
```lua
guihooks.trigger("introPopupTutorial", {
{
content = readFile("/gameplay/tutorials/pages/template/content.html"):gsub("\r\n",""),
flavour = "onlyOk"
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown>
![The introPopupTutorial snippet displayed in BeamNG.drive](../../assets/content/introPopupTutorial.png)
</figure>
`flavour` controls which buttons are displayed. Four flavours exist:
* `withLogbook`
* Buttons: Career Logbook, Okay
* `onlyOk`
* Buttons: Okay
* `onlyLogbook`
* Buttons: Career Logbook
* `noButtons`
* Provides no buttons
!!! warning
When using the noButtons flavour on the page, providing no extra JavaScript in the page content to close the popup causes a softlock. Pages are not combined into one popup in this flavour. It is not recommended to use this flavour.
If multiple pages are provided, or the hook is triggered multiple times, then the pages are combined into the same popup. If the hook is triggered while a introPopup is active, or when a different introPopup type has already been triggered, then it is displayed in a separate popup after the existing popup is closed.
### introPopupCareer
introPopupCareer is an easy to use, but open ended popup that supports embedding HTML, if needed.
Flavours control which buttons are displayed and the default image aspect ratio. Four flavours exist:
* `default`
* Default image aspect ratio: 16x9
* Buttons: Later, Okay
* `welcome`
* Default image aspect ratio: 16x9
* Buttons: Career Logbook, Okay
* `branch-info`
* Default image aspect ratio: 16x9
* Buttons: Career Logbook, Okay
* `garage`
* Buttons: Later, Okay
```lua
guihooks.trigger("introPopupCareer", {
{
title = "Example title",
text = "Example text",
image = "/gameplay/tutorials/pages/template/image.jpg",
ratio = "16x9",
flavour = "default"
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown>
![The introPopupCareer snippet displayed in BeamNG.drive](../../assets/content/introPopupCareer.png)
</figure>
If multiple pages are provided, or the hook is triggered multiple times, then the pages are combined into the same popup. If the hook is triggered while a introPopup is active, or when a different introPopup type has already been triggered, then it is displayed in a separate popup after the existing popup is closed.
!!! bug
The background blur has a minimum height, causing popups with short content to have excess blur below its window. Two main workarounds exist:
* Repeat `\n` and end with `#!html <div />` until the window covers the blur
* Use an empty or missing `image` path and adjust the aspect ratio until the window covers the blur
### introPopupMission
introPopupMission is almost identical to introPopupCareer, but needs buttons to be defined rather than picking a preset for buttons.
Button styles are combined as *bng-button-*`style`. Built-in button styles are:
* `main` - orange
* `secondary` - cyan
* `attention` - red
* `white` - white
* `link` - translucent
* `outline` - orange outline
```lua
guihooks.trigger('introPopupMission', {
title = "introPopupMission title",
text = "introPopupMission description",
image = "/gameplay/tutorials/pages/template/image.jpg",
ratio = "16x9",
buttons = {
{ default=true, class="main", label="main button", clickLua="" },
{ default=false, class="secondary", label="secondary button", clickLua="" },
{ default=false, class="attention", label="attention button", clickLua="" },
{ default=false, class="white", label="white button", clickLua="" },
{ default=false, class="link", label="link button", clickLua="" },
{ default=false, class="outline", label="outline button", clickLua="" }
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown>
![The introPopupMission snippet displayed in BeamNG.drive](../../assets/content/introPopupMission.png)
</figure>
If multiple pages are provided, or the hook is triggered multiple times, then the pages are combined into the same popup. If the hook is triggered while a introPopup is active, or when a different introPopup type has already been triggered, then it is displayed in a separate popup after the existing popup is closed.
!!! bug
The background blur has a minimum height, causing popups with short content to have excess blur below its window. Two main workarounds exist:
* Repeat `\n` and end with `#!html <div />` until the window covers the blur
* Use an empty or missing `image` path and adjust the aspect ratio until the window covers the blur
### Dialogue
Dialogue is used in the *A Rocky Start* campaign to display information about a mission. It is a centered, vertically aligned popup with a specific layout. It does not support embedding HTML.
```lua
ui_missionInfo.openDialogue({
title = "Dialogue title",
type = "Custom", -- isn't actually displayed
typeName = "typeName",
data = {
{label = "objective", value = "reward"}
-- add more...
},
buttons = {
{action = "accept", text = "Accept", cmd = ""},
{action = 'decline',text = "Decline", cmd = ""}
-- add more...
}
})
ui_missionInfo.closeDialogue()
```
<figure class="image image_resized" style="width:75%" markdown>
![The Dialogue snippet displayed in BeamNG.drive](../../assets/content/Dialogue.png)
</figure>
Only one Dialogue can be displayed at once. Any existing Dialogue is overridden.
!!! info
`#!lua ui_missionInfo.closeDialogue()` must be used to close a dialogue.
Make sure you call this function when any button is pressed.
-154
View File
@@ -1,154 +0,0 @@
!!! warning "This site is under construction!"
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
# BeamNG.drive Snippets
## Lua Code Snippets
### Drawing a marker & Vehicle detection
Drawing markers in the map can be one of the best ways to indicate to the user that there is some form of interaction that they can do there.
Drawing a marker is fairly easy. Here is an example of how the bus route marker is drawn:
```Lua
local function createBusMarker(markerName)
local marker = createObject('TSStatic')
marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae")
marker:setPosition(vec3(0, 0, 0))
marker.scale = vec3(1, 1, 1)
marker:setField('rotation', 0, '1 0 0 0')
marker.useInstanceRenderData = true
marker:setField('instanceColor', 0, '1 1 1 0')
marker:setField('collisionType', 0, "Collision Mesh")
marker:setField('decalType', 0, "Collision Mesh")
marker:setField('playAmbient', 0, "1")
marker:setField('allowPlayerStep', 0, "1")
marker:setField('canSave', 0, "0")
marker:setField('canSaveDynamicFields', 0, "1")
marker:setField('renderNormals', 0, "0")
marker:setField('meshCulling', 0, "0")
marker:setField('originSort', 0, "0")
marker:setField('forceDetail', 0, "-1")
marker.canSave = false
marker:registerObject(markerName)
scenetree.MissionGroup:addObject(marker)
return marker
end
-- this can then be called in a loop to setup your markers.
-- NOTE: You should only do this once as part of your setup and not called on each frame.
if #markers == 0 then
for k,v in pairs(nameMarkers) do
local mk = scenetree.findObject(v)
if mk == nil then
log('I', logTag,'Creating marker '..tostring(v))
mk = createBusMarker(v)
ScenarioObjectsGroup:addObject(mk.obj)
end
table.insert(markers, mk)
end
end
```
Here is a custom marker example from [BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master):
```Lua
local stations = [
{ "location": [ -778.813, 485.973, 23.46 ], "type":"gas" },
{ "location": [ 617.164, -192.107, 53.2 ], "type":"ev" },
]
local function IsEntityInsideArea(pos1, pos2, radius)
return pos1:distance(pos2) < radius
end
local onUpdate = function (dt)
for k, spot in pairs(stations) do -- loop through all spots on the current map
local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])
local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)
local spotInRange = false -- is this spot in range? used for color
local spotCompatible = false -- is this spot compatible?
if activeVeh then -- we have a car and its ours (if in mp)
local vehPos = activeVeh:getPosition()
spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)
spotCompatible = activeFuelType == "any" or spot.type == "any" or activeFuelType == spot.type
end
local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)
debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color
end
end
```
### guihooks examples
#### Toast Notifications, Top right of screen
![image](https://github.com/StanleyDudek/Docs/assets/49531350/c8a87842-b95a-4eca-84dc-93072ecc9158)
```lua
--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})
guihooks.trigger('toastrMsg', {type = "info", title = "Info Message:", msg = "Info Message Text Here", config = {timeOut = 5000}})
guihooks.trigger('toastrMsg', {type = "warning", title = "Warning Message:", msg = "Warning Message Text Here", config = {timeOut = 5000}})
guihooks.trigger('toastrMsg', {type = "error", title = "Error Message:", msg = "Error Message Text Here", config = {timeOut = 5000}})
```
#### Message notifications, top left of screen by default in Messages app
![image](https://github.com/StanleyDudek/Docs/assets/49531350/6baef813-50cb-43c3-9c59-0de550b014b6)
```lua
--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check", icon = "check"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check_circle", icon = "check_circle"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "warning", icon = "warning"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "error", icon = "error"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "directions_car", icon = "directions_car"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "star", icon = "star"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "timeline", icon = "timeline"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "save", icon = "save"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "settings", icon = "settings"})
```
#### Center large or small display flash
![image](https://github.com/StanleyDudek/Docs/assets/49531350/d0cf754f-83f8-4d15-9159-27350da127de)
![image](https://github.com/StanleyDudek/Docs/assets/49531350/1df6fc9b-756f-484e-b8d9-5df346dc4c26)
```lua
--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app
guihooks.trigger('ScenarioFlashMessage', {{"Message", 5.0, 0, true}} )
guihooks.trigger('ScenarioFlashMessage', {{"Message Text Here", 5.0, 0, false}} )
--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires
guihooks.trigger('ScenarioFlashMessage', {{"3", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"2", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"1", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"GO!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')", true}})
--another sound example
guihooks.trigger('ScenarioFlashMessage', {{"Teleported!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')", false}})
```
#### Center mid-size persistent display
![image](https://github.com/StanleyDudek/Docs/assets/49531350/6290e018-6b3d-4674-98f2-34282a723258)
```lua
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app
guihooks.trigger('ScenarioRealtimeDisplay', {msg = "Message Text Here"} )
--these messages persist, clear with a blank string
--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)
guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} )
```
## IMGUI Code Snippets
## CEF UI Code Snippets
+48 -16
View File
@@ -10,18 +10,21 @@ However, both Linux and MacOS are secondary platforms, this means bugs are to be
BeamMP will not work with pirated or outdated versions of BeamNG.drive. BeamMP will not work with pirated or outdated versions of BeamNG.drive.
The BeamMP support team does not offer support for issues with pirated / outdated copies. The BeamMP support team does not offer support for issues with pirated / outdated copies.
---
## **2. Installation** ## **2. Installation**
### **2a. Windows Installation** ### **2a. Windows Installation**
1. Go to [beammp.com](https://beammp.com/) and click the "Download client" button.
2. Extract the `BeamMP_Installer.zip` archive. !!!note
3. Launch `BeamMP_Installer.exe` and follow the instructions.
4. The BeamMP Launcher icon should appear on your desktop. If not, just search for “BeamMP” in the windows search bar. As of April 1st, 2026, the MSI installer is an "unrecognized app" according to Windows Defender SmartScreen.
5. Once the launcher has started, you should see a terminal window, shortly after BeamNG.drive should automatically start. **Do not** close the terminal window.
6. After BeamNG launched, in the main menu, click the `Repository` button and make sure that `multiplayerbeammp` is **the only** enabled mod. To bypass this warning, click 'More info', then click 'Run anyway'.
7. Return to the main menu, click on 'More..' and the 'Multiplayer' button to start multiplayer.
8. You will be prompted to login or play as a guest (not all servers will allow guests). You can create an account on our [forum](https://forum.beammp.com) and then login to BeamMP with the same credentials. 1. Go to [beammp.com](https://beammp.com/) and click the 'Download Now' button.
9. Select any server you like, and press `Connect`. Enjoy! 2. Run the `BeamMP_Installer.msi` installer and follow the instructions.
3. The BeamMP Launcher icon should appear on your desktop. If not, just search for “BeamMP” in the Windows search bar.
!!!note !!!note
@@ -64,11 +67,10 @@ Clone the BeamMP-Launcher Repository to your system using `git`, for example:
`git clone https://github.com/BeamMP/BeamMP-Launcher.git` `git clone https://github.com/BeamMP/BeamMP-Launcher.git`
[Additional information about cloning a GitHub Repo](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) [Additional information about cloning a GitHub Repo](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
Checkout the tag that was used for the [latest release](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). For example, if `v2.6.4` is used in the latest release, then do `git checkout v2.6.4`
If you've used the example clone command we provided, you can use `cd BeamMP-Launcher` to go to the project's root directory. If you've used the example clone command we provided, you can use `cd BeamMP-Launcher` to go to the project's root directory.
Checkout the tag that was used for the [latest release](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). For example, if `v2.8.0` is used in the latest release, then do `git checkout v2.8.0`
In the root directory of the project, In the root directory of the project,
1. 1.
@@ -120,9 +122,9 @@ Change the userfolder location of Proton-BeamNG.drive to the location of Linux-B
This can be done for example by creating a symlink This can be done for example by creating a symlink
- Note the Linux-BeamNG.drive userfolder location (this is usually found in `~/.local/share/BeamNG.drive`) and rename it, for example to `BeamNG.drive_old` - Note the Linux-BeamNG.drive userfolder location (this is usually found in `~/.local/share/BeamNG/BeamNG.drive`) and rename it, for example to `BeamNG.drive_old`
- Note the Proton-BeamNG.drive userfolder location (this is usually found in `~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG.drive`) - Note the Proton-BeamNG.drive userfolder location (this is usually found in `~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG/BeamNG.drive`)
- Create a symlink between both userfolders `ln -s ~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG.drive ~/.local/share` - Create a symlink between both userfolders `ln -s ~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG/BeamNG.drive ~/.local/share/BeamNG`
With the symlink in place between the userfolders and the launcher compiled, you can have Steam run the game via Proton, while also automatically executing the launcher with the following replacement for your launch options for the vanilla game, found in the game's Properties window in its entry in Steam: With the symlink in place between the userfolders and the launcher compiled, you can have Steam run the game via Proton, while also automatically executing the launcher with the following replacement for your launch options for the vanilla game, found in the game's Properties window in its entry in Steam:
@@ -136,9 +138,39 @@ Note that this assumes you put the launcher's binary you compiled earlier into `
This can be done for example by adding the [Linux-port of the Windows Segoe-UI emoji font](https://github.com/mrbvrz/segoe-ui-linux) This can be done for example by adding the [Linux-port of the Windows Segoe-UI emoji font](https://github.com/mrbvrz/segoe-ui-linux)
### **2d. Updating the Launcher**
If you already built the launcher and want to update it:
```bash
export VCPKG_ROOT="$(pwd)/vcpkg"
cd BeamMP-Launcher
git fetch --tags
```
Checkout the tag that was used for the [latest release](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). For example, if `v2.8.0` is used in the latest release, then do `git checkout v2.8.0`
```
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux
cmake --build bin --parallel
cp bin/BeamMP-Launcher ~/beammp-launcher/
cd ~/beammp-launcher
./BeamMP-Launcher
```
--- ---
## **3. Known Issues** ## **3. Using BeamMP**
1. Once you have started the launcher, you should see a terminal window. Shortly after, the standard BeamNG launcher should start. **Do not** close the terminal window.
2. In the BeamNG.drive main menu, click the `Repository` button and check to make sure that `multiplayerbeammp` is **the only** enabled mod.
3. Return to the main menu, click on 'More..' and the 'Multiplayer' button to start multiplayer.
4. You will be prompted to login or play as a guest (not all servers will allow guests). You can create an account on our [forum](https://forum.beammp.com) and then login to BeamMP with the same credentials.
5. Select any server you like, and press `Connect`. Enjoy!
---
## **4. Known Issues**
- The native linux BeamMP-Launcher currently can only connect to a server once, after disconnecting you need to restart the launcher. You can do that without closing the game inbetween - The native linux BeamMP-Launcher currently can only connect to a server once, after disconnecting you need to restart the launcher. You can do that without closing the game inbetween
- If you dont see the “Multiplayer” button. Make sure that the BeamMP mod is present and activated in the “Mod Manager” then try pressing CTRL + L. - If you dont see the “Multiplayer” button. Make sure that the BeamMP mod is present and activated in the “Mod Manager” then try pressing CTRL + L.
- VPNs of any type may cause connection issues. - VPNs of any type may cause connection issues.
@@ -1171,14 +1171,419 @@ Triggered when a player sends a chat message. When cancelled, it will not show t
Arguments: `player_id: number`, `vehicle_id: number`, `data: string` Arguments: `player_id: number`, `vehicle_id: number`, `data: string`
Cancellable: YES Cancellable: YES
Triggered when a player spawns a new vehicle. The `data` argument contains the car's configuration and positional/rotational data for the vehicle as a json string. Triggered when a player spawns a new vehicle. Note that vehicle swaps/replacements instead fire [`onVehicleEdited`](#onvehicleedited). The `data` argument contains the car's configuration and positional/rotational data for the vehicle as a json string.
<details>
<summary>Example <code>data</code> value</summary>
The data string begins with a unique vehicle identifier, which is the player's ID, a hyphen, and then the vehicle ID. This is followed by a JSON object containing information about the vehicles configuration and positioning.
```
0-0: {
"abs": "realistic",
"ign": 3,
"jbm": "van",
"pid": 0,
"pos": [
907.93902587891,
773.50201416016,
238.87800598145
],
"pro": "0",
"rot": [
0,
0,
0.99999994039536,
0
],
"vcf": {
"licenseName": "H30 9VV",
"mainPartName": "van",
"mainPartPath": "/van",
"model": "van",
"paints": [
{
"baseColor": [
0.21999999880791,
0.37000000476837003,
0.33000001311302,
1.2000000476837
],
"clearcoat": 0,
"clearcoatRoughness": 0,
"metallic": 0,
"roughness": 0.070000000298023
},
{
"baseColor": [
0.62300002574921,
0.62300002574921,
0.62300002574921,
1.2000000476837
],
"clearcoat": 0.80000001192093,
"clearcoatRoughness": 0.070000000298023,
"metallic": 0.80000001192093,
"roughness": 0.64999997615814
},
{
"baseColor": [
0.21999999880791,
0.37000000476837003,
0.33000001311302,
1.2000000476837
],
"clearcoat": 0,
"clearcoatRoughness": 0,
"metallic": 0,
"roughness": 0.070000000298023
}
],
"partConfigFilename": "vehicles/van/h15_xt_passenger.pc",
"parts": {
"brakepad_F": "brakepad_F_premium",
"brakepad_R": "brakepad_R_premium",
"gps": "",
"licenseplate_design_2_1": "",
"linelock": "",
"load_seat_FR": "",
"n2o_system": "",
"paint_design": "van_skin_twotone",
"pickup_engine_v8_ecu": "pickup_engine_v8_ecu",
"pickup_engine_v8_internals": "pickup_engine_v8_internals",
"pickup_enginemounts": "pickup_enginemounts",
"pickup_oilpan_v8": "pickup_oilpan_v8",
"pickup_reversewarn": "",
"pickup_sparetire": "pickup_sparetire_5l",
"pickup_towhitch": "",
"skin_glass": "van_skin_glass_tint",
"skin_interior": "van_skin_interior_black",
"soundscape_horn": "soundscape_horn_115",
"tire_F_16x7_alt": "tire_F_225_75_16_alt_standard",
"tire_R_16x7_alt": "tire_R_225_75_16_alt_standard",
"van_ABS": "van_ABS",
"van_ESC": "",
"van_ac": "van_ac",
"van_body": "van_body_passenger",
"van_brake_F": "van_brake_F",
"van_brake_R": "van_brake_R_drum",
"van_bumper_F": "van_bumper_F_altb",
"van_bumper_F_lip": "",
"van_bumper_R": "van_bumper_R_altb",
"van_bumper_accessory_F": "",
"van_bumpersignal_FL": "van_bumpersignal_FL",
"van_bumpersignal_FR": "van_bumpersignal_FR",
"van_coilover_IFS": "van_coilover_IFS",
"van_converter": "van_converter",
"van_differential_F": "",
"van_differential_R": "van_differential_R",
"van_door_FL": "van_door_FL",
"van_door_FR": "van_door_FR",
"van_doordetent_FL": "van_doordetent_FL",
"van_doordetent_FR": "van_doordetent_FR",
"van_doordetent_RL": "van_doordetent_RL",
"van_doordetent_RR": "van_doordetent_RR",
"van_doorglass_L": "van_doorglass_L",
"van_doorglass_R": "van_doorglass_R",
"van_doorpanel_FL": "van_doorpanel_FL",
"van_doorpanel_FR": "van_doorpanel_FR",
"van_driveshaft_R": "van_driveshaft_R",
"van_engine": "van_engine_v8_4.5",
"van_exhaust_v8": "van_exhaust_v8",
"van_fascia_F": "van_fascia_F_high",
"van_fender_L": "van_fender_L",
"van_fender_R": "van_fender_R",
"van_fenderflare_FL": "",
"van_fenderflare_FR": "",
"van_fenderflare_RL": "",
"van_fenderflare_RR_sidedoor": "",
"van_finaldrive_R": "van_finaldrive_R_355",
"van_frame": "van_frame",
"van_fueltank": "van_fueltank",
"van_header": "van_exhmanifold",
"van_headlight_L_high": "van_headlight_L_high",
"van_headlight_R_high": "van_headlight_R_high",
"van_hood": "van_hood",
"van_hub_F": "van_hub_F_5",
"van_hub_R": "van_hub_R_5",
"van_intake_v8": "van_intake_v8",
"van_intcarpet_roof": "van_intcarpet_roof",
"van_interior": "van_interior",
"van_lettering_doors_F": "van_lettering_doors_F_h15",
"van_lettering_reardoor_L": "van_lettering_gavril_reardoor_L",
"van_lettering_reardoor_R": "van_lettering_h15_xt_reardoor_R",
"van_licenseplate_F": "van_licenseplate_F",
"van_licenseplate_R": "van_licenseplate_R",
"van_lightbar": "",
"van_mirror_L": "van_mirror_L",
"van_mirror_R": "van_mirror_R",
"van_mod": "",
"van_muffler": "van_muffler",
"van_power_steering": "",
"van_radiator": "van_radiator",
"van_radio": "van_radio",
"van_reardoor_L": "van_reardoor_L",
"van_reardoor_R": "van_reardoor_R",
"van_reardoorglass_L": "van_reardoorglass_L",
"van_reardoorglass_R": "van_reardoorglass_R",
"van_reardoorpanel_L": "van_reardoorpanel_L",
"van_reardoorpanel_R": "van_reardoorpanel_R",
"van_rollcage": "",
"van_roof": "van_roof",
"van_roof_accessory": "",
"van_runningboard": "",
"van_seat_1R": "van_seat_1R",
"van_seat_2R": "van_seat_2R",
"van_seat_3R": "van_seat_3R",
"van_seat_FL": "van_seat_FL",
"van_seat_FR": "van_seat_FR",
"van_shifter": "van_shifter_A",
"van_shock_R": "van_shock_R",
"van_sidedoor_FR": "van_sidedoor_FR_alt",
"van_sidedoor_RR": "van_sidedoor_RR_alt",
"van_sidedoorglass_FR": "van_sidedoorglass_FR",
"van_sidedoorglass_RR": "van_sidedoorglass_RR",
"van_sidedoorpanel_FR": "van_sidedoorpanel_FR",
"van_sidedoorpanel_RR": "van_sidedoorpanel_RR",
"van_sideglass_FL": "van_sideglass_FL",
"van_sideglass_ML": "van_sideglass_ML",
"van_sideglass_RL": "van_sideglass_RL",
"van_sideglass_RR": "van_sideglass_RR",
"van_snorkel": "",
"van_spring_R": "van_spring_R",
"van_steer": "van_steer",
"van_steering": "van_steering",
"van_suspension_F": "van_IFS",
"van_suspension_R": "van_axle_R",
"van_swaybar_F": "van_swaybar_F",
"van_swaybar_R": "",
"van_taillight_L": "van_taillight_L",
"van_taillight_R": "van_taillight_R",
"van_taillightguard_L": "",
"van_taillightguard_R": "",
"van_transfer_case": "van_transfer_case_RWD",
"van_transmission": "van_transmission_4A",
"van_tubs": "van_tubs",
"van_valance_F": "van_valance_F",
"van_wheeldata_F": "van_wheeldata_F",
"van_wheeldata_R": "van_wheeldata_R",
"van_windshield": "van_windshield",
"wheel_F_5": "wheel_25a_16x7_5_F",
"wheel_R_5": "wheel_25a_16x7_5_R"
},
"vars": {}
},
"vid": 29339
}
```
</details>
##### `onVehicleEdited` ##### `onVehicleEdited`
Arguments: `player_id: number`, `vehicle_id: number`, `data: string` Arguments: `player_id: number`, `vehicle_id: number`, `data: string`
Cancellable: YES Cancellable: YES
Triggered when a player edits their vehicle and applies the edit. The `data` argument contains the car's updated configuration as a json string but does **not** include positional or rotational data. You can use [MP.GetPositionRaw](#mpgetpositionrawpid-number-vid-number-tablestring) to get positional and rotational data. Triggered when a player edits or replaces their vehicle. The `data` argument contains the car's updated configuration as a json string but does **not** include positional or rotational data. You can use [MP.GetPositionRaw](#mpgetpositionrawpid-number-vid-number-tablestring) to get positional and rotational data.
<details>
<summary>Example <code>data</code> value</summary>
The data string begins with a unique vehicle identifier, which is the player's ID, a hyphen, and then the vehicle ID. This is followed by a JSON object containing information about the vehicles configuration.
```
0-0: {
"abs": "realistic",
"ign": 3,
"jbm": "van",
"pid": 0,
"pro": "0",
"vcf": {
"licenseName": "P60 1EP",
"mainPartName": "van",
"mainPartPath": "/van",
"model": "van",
"paints": [
{
"baseColor": [
0.40000000596046,
0.050000000745058,
0.050000000745058,
1.2000000476837
],
"clearcoat": 0,
"clearcoatRoughness": 0,
"metallic": 0,
"roughness": 0.070000000298023
},
{
"baseColor": [
0.40000000596046,
0.050000000745058,
0.050000000745058,
1.2000000476837
],
"clearcoat": 0,
"clearcoatRoughness": 0,
"metallic": 0,
"roughness": 0.070000000298023
},
{
"baseColor": [
0.40000000596046,
0.050000000745058,
0.050000000745058,
1.2000000476837
],
"clearcoat": 0,
"clearcoatRoughness": 0,
"metallic": 0,
"roughness": 0.070000000298023
}
],
"partConfigFilename": "vehicles/van/h15_passenger.pc",
"parts": {
"brakepad_F": "brakepad_F_premium",
"brakepad_R": "brakepad_R_premium",
"gps": "",
"hubcap_F_16": "hubcap_09c_F_altd",
"hubcap_R_16": "hubcap_09c_R_altd",
"licenseplate_design_2_1": "",
"linelock": "",
"load_seat_FR": "",
"n2o_system": "",
"paint_design": "",
"pickup_engine_v8_ecu": "pickup_engine_v8_ecu_late",
"pickup_engine_v8_internals": "pickup_engine_v8_internals",
"pickup_enginemounts": "pickup_enginemounts",
"pickup_oilpan_v8": "pickup_oilpan_v8",
"pickup_reversewarn": "",
"pickup_sparetire": "pickup_sparetire_6l",
"pickup_towhitch": "",
"skin_glass": "",
"skin_interior": "van_skin_interior_ivory",
"soundscape_horn": "soundscape_horn_115",
"tire_F_16x7_alt": "tire_F_225_75_16_alt_standard",
"tire_R_16x7_alt": "tire_R_225_75_16_alt_standard",
"trimring_F_16x7": "",
"trimring_R_16x7": "",
"van_ABS": "van_ABS",
"van_ac": "van_ac",
"van_body": "van_body_passenger",
"van_brake_F": "van_brake_F",
"van_brake_R": "van_brake_R",
"van_bumper_accessory_F_late": "",
"van_bumper_F": "van_bumper_F_late_alt",
"van_bumper_F_lip_late": "",
"van_bumper_R": "van_bumper_R_late_alt",
"van_coilover_IFS": "van_coilover_IFS",
"van_converter": "van_converter",
"van_differential_F": "",
"van_differential_R": "van_differential_R",
"van_door_FL": "van_door_FL",
"van_door_FR": "van_door_FR",
"van_doordetent_FL": "van_doordetent_FL",
"van_doordetent_FR": "van_doordetent_FR",
"van_doordetent_RL": "van_doordetent_RL",
"van_doordetent_RR": "van_doordetent_RR",
"van_doorglass_L": "van_doorglass_L",
"van_doorglass_R": "van_doorglass_R",
"van_doorpanel_FL": "van_doorpanel_FL",
"van_doorpanel_FR": "van_doorpanel_FR",
"van_driveshaft_R": "van_driveshaft_R",
"van_engine": "van_engine_v8_4.5",
"van_ESC": "van_ESC",
"van_exhaust_v8": "van_exhaust_v8",
"van_fascia_F": "van_fascia_F_late",
"van_fender_L": "van_fender_L",
"van_fender_R": "van_fender_R",
"van_fenderflare_FL": "",
"van_fenderflare_FR": "",
"van_fenderflare_RL": "",
"van_fenderflare_RR_sidedoor": "",
"van_finaldrive_R": "van_finaldrive_R_355",
"van_frame": "van_frame",
"van_fueltank": "van_fueltank",
"van_grille_F_late": "van_grille_F_late",
"van_header": "van_exhmanifold",
"van_headlight_L_late": "van_headlight_L_late",
"van_headlight_R_late": "van_headlight_R_late",
"van_hood": "van_hood_late",
"van_hub_F": "van_hub_F_6",
"van_hub_R": "van_hub_R_6",
"van_intake_v8": "van_intake_v8_late",
"van_intcarpet_roof": "van_intcarpet_roof",
"van_interior": "van_interior",
"van_lettering_doors_F": "van_lettering_doors_F_h15",
"van_lettering_reardoor_L": "van_lettering_gavril_reardoor_L",
"van_lettering_reardoor_R": "van_lettering_h15_reardoor_R",
"van_licenseplate_F_late": "van_licenseplate_F_late",
"van_licenseplate_R_late": "van_licenseplate_R_late",
"van_lightbar": "",
"van_mirror_L": "van_mirror_L",
"van_mirror_R": "van_mirror_R",
"van_mod": "",
"van_muffler": "van_muffler",
"van_power_steering": "",
"van_radiator": "van_radiator",
"van_radio": "van_radio",
"van_reardoor_L": "van_reardoor_L",
"van_reardoor_R": "van_reardoor_R",
"van_reardoorglass_L": "van_reardoorglass_L",
"van_reardoorglass_R": "van_reardoorglass_R",
"van_reardoorpanel_L": "van_reardoorpanel_L",
"van_reardoorpanel_R": "van_reardoorpanel_R",
"van_rollcage": "",
"van_roof": "van_roof",
"van_roof_accessory": "",
"van_runningboard": "",
"van_seat_1R": "van_seat_1R",
"van_seat_2R": "van_seat_2R",
"van_seat_3R": "van_seat_3R",
"van_seat_FL": "van_seat_FL",
"van_seat_FR": "van_seat_FR",
"van_shifter": "van_shifter_A",
"van_shock_R": "van_shock_R",
"van_sidedoor_FR": "van_sidedoor_FR_alt",
"van_sidedoor_RR": "van_sidedoor_RR_alt",
"van_sidedoorglass_FR": "van_sidedoorglass_FR",
"van_sidedoorglass_RR": "van_sidedoorglass_RR",
"van_sidedoorpanel_FR": "van_sidedoorpanel_FR",
"van_sidedoorpanel_RR": "van_sidedoorpanel_RR",
"van_sideglass_FL": "van_sideglass_FL",
"van_sideglass_ML": "van_sideglass_ML",
"van_sideglass_RL": "van_sideglass_RL",
"van_sideglass_RR": "van_sideglass_RR",
"van_snorkel": "",
"van_spring_R": "van_spring_R",
"van_steer": "van_steer_facelift",
"van_steering": "van_steering",
"van_suspension_F": "van_IFS",
"van_suspension_R": "van_axle_R",
"van_swaybar_F": "van_swaybar_F",
"van_swaybar_R": "",
"van_taillight_L": "van_taillight_L",
"van_taillight_R": "van_taillight_R",
"van_taillightguard_L": "",
"van_taillightguard_R": "",
"van_transfer_case": "van_transfer_case_RWD",
"van_transmission": "van_transmission_4A",
"van_tubs": "van_tubs",
"van_valance_F": "van_valance_F_late",
"van_wheeldata_F": "van_wheeldata_F",
"van_wheeldata_R": "van_wheeldata_R",
"van_windshield": "van_windshield",
"wheel_F_6": "steelwheel_02b_16x7_F",
"wheel_R_6": "steelwheel_02b_16x7_R"
},
"vars": {}
}
}
```
</details>
##### `onVehicleDeleted` ##### `onVehicleDeleted`
+18 -8
View File
@@ -2,6 +2,8 @@
## **Creating a Server** ## **Creating a Server**
Basics of setting up the server application Basics of setting up the server application
This guide covers the full setup to host a server **at home**.
For a quick-start guide for your VPS hosted server, visit [How to create a server](https://docs.beammp.com/server/setup-vps/)
--- ---
### **Overview** ### **Overview**
@@ -82,7 +84,7 @@ You will need a [Discord](https://discord.com) account for this step. This is ne
#### 2.1. Accessing the keys page #### 2.1. Accessing the keys page
Login with Discord to the [Keymaster](https://beammp.com/keymaster). Login with Discord to the [Keymaster](https://keymaster.beammp.com).
From the Keymaster homepage click on "Keys" on the left of the screen: From the Keymaster homepage click on "Keys" on the left of the screen:
<figure markdown> <figure markdown>
@@ -207,26 +209,27 @@ Give your server a name, too, in the `Name` field. You can format this with colo
If you picked a different **Port** other than **30814**, make sure to replace it here under `Port`. If you picked a different **Port** other than **30814**, make sure to replace it here under `Port`.
### **5. Validation** #### **4.1. Validation**
Now run your server again, and see if it spits out any more `[ERROR]` or `[WARN]` messages. The server should stay open now. In the following steps (6.) below you can find out how to join the server. Now run your server again, and see if it spits out any more `[ERROR]` or `[WARN]` messages. The server should stay open now. In the following steps (6.) below you can find out how to join the server.
--- ---
#### 5.1 How to add mods to your server ### 5. How to add mods to your server
Vehicle mods and map mods are different to install, but both require you to put them in your server's (`Resources/Client`) folder. Simply slide any mod you want to add in that folder. Vehicle mods and map mods are different to install, but both require you to put them in your server's (`Resources/Client`) folder. Simply slide any mod you want to add in that folder.
!!! warning !!! warning
Mods can be, and/or become incompatible with BeamNG, BeamMP or even other mods. Start removing mods if you are encountering issues.
Should you receive a "done" or "start" message when trying to join your server after adding mods, you likely added an incompatible or broken mod to your server. Should you receive a "done" or "start" message when trying to join your server after adding mods, you likely added an incompatible or broken mod to your server.
Mod incompatibilities can also occur between 2 or more mods. If you have client mods installed, check [this guide](../../FAQ/How-to-deactivate-mods.md) about removing mods from your game. Mod incompatibilities can also occur between 2 or more mods. If you have client mods installed, check [this guide](../../FAQ/How-to-deactivate-mods.md) about removing mods from your game.
#### 5.2 General Mods #### 5.1 General Mods
If you only wanted to add modded vehicles, you simply put the zip file of the mod in the `Resources/Client` folder. They will automatically be downloaded by anyone who joins your server. If you only wanted to add modded vehicles, you simply put the zip file of the mod in the `Resources/Client` folder. They will automatically be downloaded by anyone who joins your server.
#### 5.3 Maps #### 5.2 Maps
All default maps (maps which aren't mods) work out-of-the-box and do not have to be installed. You simply change the `Map` setting in the `ServerConfig.toml` file to any of [these](server-maintenance.md#all-vanilla-maps-names). For any other modded maps, do this: All default maps (maps which aren't mods) work out-of-the-box and do not have to be installed. You simply change the `Map` setting in the `ServerConfig.toml` file to any of [these](server-maintenance.md#all-vanilla-maps-names). For any other modded maps, do this:
@@ -244,6 +247,13 @@ Now, when someone joins your server, it should download the map automatically an
That's it! Your modded map should now be available to join! That's it! Your modded map should now be available to join!
#### 5.4 Protecting mods from download (Paid/Private Mods)
You can now protect mods! This will allow you to host a server with protected or restricted content without actually redistributing the content.
This is ideal for if you have what is frequently referred to as "Paid Mods" or you are a mod creator and wish to have a limited access to your latest work.
Just run `protectmod <filename with .zip> <true/false>` in the server console to protect a mod. Users that join a server with protected mods will need to obtain the file themselves from another source such as direct from the creator or via platforms like Patreon. Once obtained they need to put it in their launcher's resources folder.
The launcher will inform the user about this if the file is missing additionally the user will also see a notification in-game that shows the missing file and how to fix it
### **6. How to join your server** ### **6. How to join your server**
How you and other players can join your server. How you and other players can join your server.
@@ -254,7 +264,7 @@ If your server is hosted on the same PC as the game runs on, you must join your
If your server is hosted on another PC in your local network, you must find the local IP of that machine and direct connect using this local IP. If your server is hosted on another PC in your local network, you must find the local IP of that machine and direct connect using this local IP.
If your server is hosted outside of your house (e.g. VPS) you must find the [public IP](https://whatismyipaddress.com/) of that machine and direct connect that way. If your server is hosted outside of your house (e.g. VPS) you must find the public IP of that machine and direct connect that way.
#### 6.b. Other people joining your private server #### 6.b. Other people joining your private server
@@ -264,7 +274,7 @@ You have to give other users the public IP Address of your Server. However, be c
To join your public server they can simply go to the server list, type the name of the server, and click connect. If you are unsure of what your server name is, it will be the name you put in the `ServerConfig.toml`. To join your public server they can simply go to the server list, type the name of the server, and click connect. If you are unsure of what your server name is, it will be the name you put in the `ServerConfig.toml`.
Make sure search filters are disabled and the Map set to "Any" if you can't find it. Make sure search filters are disabled and the Map set to "Any" if you can't find it.
You can also check the [Keymaster](https://beammp.com/keymaster) Website for the Servers IP Address. You can also check the [Keymaster](https://keymaster.beammp.com/) Website for the Servers IP Address.
Should you or your friends experience a "Connection Failed!" Error, check the Launcher Window for codes like 10060, 10061, 10030. Should you or your friends experience a "Connection Failed!" Error, check the Launcher Window for codes like 10060, 10061, 10030.
This means you eihter have a CGNAT IPv4, or you have done something wrong during Step **1 Port Forwarding** or **1.1. Firewall**. This means you eihter have a CGNAT IPv4, or you have done something wrong during Step **1 Port Forwarding** or **1.1. Firewall**.
@@ -293,4 +303,4 @@ Enter the servers public IPv4 and Port below, then click "CheckBeamMP".
## Still facing issues? ## Still facing issues?
Open a Thread on the [Forum](https://forum.beammp.com) or on our [Discord server](https://discord.gg/beammp) in the `#support` channel. Open a Thread on the [Forum](https://forum.beammp.com) or file a **Server Support Ticket** on our [Discord server](https://discord.gg/beammp) in the `#support` channel.
+72 -58
View File
@@ -21,6 +21,7 @@ The config has one section by default, called `[General]`, which holds the follo
| AllowGuests | true/false | Determines wether guests are allowed to join the server or not. | | AllowGuests | true/false | Determines wether guests are allowed to join the server or not. |
| LogChat | true/false | When enabled (true), chat messages are logged in the server.log file. | | LogChat | true/false | When enabled (true), chat messages are logged in the server.log file. |
| Debug | true /false | When enabled (true), will show more messages in the log and provide more information. Enable this if you run into issues. Enabling this will drastically increase the size of the log file. | | Debug | true /false | When enabled (true), will show more messages in the log and provide more information. Enable this if you run into issues. Enabling this will drastically increase the size of the log file. |
| IP | A local class address of one of the NICs connected to the host. (Default: "0.0.0.0" or "::" | The server will try to bind to the supplied IP. Please do not mess with the IP field unless you know what you are doing. This value does not need to be changed in order for the server to work. |
| Private | true/false | When enabled (true), your server will not be shown in the server list. Anyone with the correct IP and port can still connect. | | Private | true/false | When enabled (true), your server will not be shown in the server list. Anyone with the correct IP and port can still connect. |
| InformationPacket | true/false | When enabled (true), the server is going to allow unauthenticated clients to get the same info as on the server listing but directly via the server. | | InformationPacket | true/false | When enabled (true), the server is going to allow unauthenticated clients to get the same info as on the server listing but directly via the server. |
| Name | Any "text" | Shown as the name / title of your server in the server list. You can use special characters to format this with colors and styles. | | Name | Any "text" | Shown as the name / title of your server in the server list. You can use special characters to format this with colors and styles. |
@@ -94,74 +95,87 @@ You can add multiple tags separated by comma `Tags = "Events,Offroad,lang:englis
You can choose from the following list: You can choose from the following list:
- Age/Content: === "Age/Content"
- `Mature/18+`
- Gameplay Types: - `Mature/18+`
- `Freeroam`
- `Roleplay`
- `Economy`
- `Traffic`
- Racing Categories: === "Gameplay Types"
- `Racing`
- `Racing:NASCAR`
- `Racing:Track`
- `Racing:Drag`
- `Racing:Rally`
- `Touge`
- Off-Roading and Challenges: - `Freeroam`
- `Offroad` - `Roleplay`
- `Crawling` - `Economy`
- `Dakar` - `Traffic`
- `Challenge` - `Challenge`
- `Drift`
- Destruction Events: === "Racing Categories"
- `Derby`
- `Arena`
- Weather and Time Conditions: - `Racing`
- `Snow/Ice` - `Racing:NASCAR`
- `Rain` - `Racing:Track`
- `Night` - `Racing:Drag`
- `Weather` - `Racing:Rally`
- `Touge`
- Gamemodes: === "Off-Roading"
- `Gamemode`
- `Gamemode:Racing`
- `Gamemode:Rally`
- `Gamemode:Drag`
- `Gamemode:Derby`
- `Gamemode:Infection`
- `Gamemode:Cops-Robbers`
- `Gamemode:Delivery`
- `Gamemode:Sumo`
- Community and Events: - `Offroad`
- `Scenarios` - `Crawling`
- `Events` - `Rally`
- `Leaderboard` - `Dakar`
- Mods: === "Destruction Events"
- `Modded`
- `Mod:BeamPaint`
- `Mod:BeamJoy`
- `Mod:CEI`
- Languages: - `Derby`
- `Lang:English` - `Arena`
- `Lang:Russian`
- `Lang:French`
- `Lang:Spanish`
- `Lang:Portuguese`
- `Lang:German`
- `Lang:Polish`
- `Lang:Arabic`
- Other: === "Weather and Time Conditions"
- `Vanilla`
- `Moderated` - `Snow/Ice`
- `Rain`
- `Night`
- `Weather`
=== "Gamemodes"
- `Gamemode`
- `Gamemode:Racing`
- `Gamemode:Rally`
- `Gamemode:Drag`
- `Gamemode:Derby`
- `Gamemode:Infection`
- `Gamemode:Cops-Robbers`
- `Gamemode:Delivery`
- `Gamemode:Sumo`
=== "Community and Events"
- `Scenarios`
- `Events`
- `Leaderboard`
=== "Mods"
- `Modded`
- `Mod:BeamPaint`
- `Mod:BeamJoy`
- `Mod:CEI`
=== "Languages"
- `Lang:English`
- `Lang:Russian`
- `Lang:French`
- `Lang:Spanish`
- `Lang:Portuguese`
- `Lang:German`
- `Lang:Polish`
- `Lang:Arabic`
=== "Other"
- `Vanilla`
- `Moderated`
Should a tag be missing from this list, you can submit a request for it to be added [here](https://forum.beammp.com/t/introducing-server-tags/1320081) Should a tag be missing from this list, you can submit a request for it to be added [here](https://forum.beammp.com/t/introducing-server-tags/1320081)
+160
View File
@@ -0,0 +1,160 @@
# Server Setup on VPS
## **Setting up a server**
Basics of setting up the server application
This guide assumes you are hosting a server **on a VPS with a Management panel**
For an in-depth guide regarding hosting a server at home, visit [How to create a aserver](https://docs.beammp.com/server/create-a-server/).
### **Overview**
**Creating a Home Server is free, hosting one with a VPS is easier and more secure**
Servers are an integral part of BeamMP; players are connected to each other through the server. They run natively on Windows and Linux.
You can make private servers, which only people you invite can join, or public servers, which will show in our official server list.
Getting a server up and running is a process of a few steps! If you run into any issues, feel free to ask on our [Forum](https://forum.beammp.com) or on our [Discord server](https://discord.gg/beammp) in the `#support` channel. Also refer to the [Server Maintenance](server-maintenance.md) section for more info.
Please make sure to read the [LICENSE](https://raw.githubusercontent.com/BeamMP/BeamMP-Server/master/LICENSE) of the server before use.
!!! Info
Hosting a server using a VPS, does not require any firewall or port forwarding changes to your router.
If you haven't chosen a VPS to host your server on yet, check out our **Partnered Hosting Services (paid)**:
??? Abstract "Partnered hosting services"
* [Horizon Hosting](https://hrzn.link/beammp)
* [RackGenius](https://rackgeni.us/beammp-plans)
* [Connect Hosting](https://connecthosting.net/beammp)
* [Assetto Hosting](https://assettohosting.com/en/games/beamng)
* [ZAP-Hosting](https://zap-hosting.com/itsbeammp)
* [HostHavoc](https://hosthavoc.com/)
* [PedalHost](https://pedal.host/)
* [Vyper Hosting](https://vyperhosting.com/r/beammp)
* [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting)
* [Four Seasons Hosting](https://fourseasonshosting.com)
* [Vertuo Hosting](https://vertuohosting.com)
* [Winheberg](https://winheberg.fr/offres/gaming/beammp?lang=en)
* [Wabbanode](https://wabbanode.com/partner/beammp)
* [Iceline Hosting](https://iceline-hosting.com/games/beammp)
(We take no responsibility for any content on any externally linked services or websites.)
### **1. Setting up the VPS**
First, you need to make sure that your Server management page is reachable.
Once you verified that the Server is ready for operation, proceed to step 2.
### **2. Obtaining an Authentication Key**
The “Authentication Key”, often called “AuthKey”, is necessary for making a **public** server accessible by the serverlist. Though it is recommended to add the authkey to private servers as well.
You have a limited number of keys. One key can be used on one server at a time, so you cannot start two servers at the same time with the same key.
More keys can be obtained by supporting the project. Read [this article](https://docs.beammp.com/support/player-faq/) for more information.
!!! warning
DO NOT EVER SHARE THIS KEY OR SHOW IT TO ANYONE. TREAT THIS LIKE A PASSWORD.
You will need a [Discord](https://discord.com) account for this step. This is necessary to prevent spam.
#### 2.1. Accessing the keys page
Login with Discord to the [Keymaster](https://keymaster.beammp.com).
From the Keymaster homepage click on "Keys" on the left of the screen:
<figure markdown>
![](../../assets/content/keymaster_homepage.png)
</figure>
#### 2.2. Creating a key
To create your key, click on the green "+" button in the top right. 
<figure markdown>
![](../../assets/content/keymaster_new_key.png)
</figure>
#### 2.3. Filling out the key information
Next, fill out the Server Name field (this is just the keys name and not the actual name of the server on the list), then click "Create". Example:
<figure class="image image_resized" style="width:44.84%;" markdown>
![](../../assets/content/keymaster_server_name.png)
</figure>
It should, in the end, look something like this:
<figure markdown>
![](../../assets/content/keymaster_key_done.png)
</figure>
#### 2.4. Copying the key
Now copy the text in the “Key” field, in this example that is `3173a2e-6az0-4542-a3p0-ddqq5ff95558` and hold onto it for the next step. You can do this by clicking the clipboard on the right of the key:
<figure markdown>
![](../../assets/content/keymaster_copy_key.png)
</figure>
!!! warning
You will not be able to edit the ServerConfig.toml file directly in the File Manager. This is intentional to enforce e.g. player limits by the hosting company.
### **3. Populating the fields**
The hosting panel will feature a few fields to enter something into. Some fields may be marked with "*", which means they are mandatory to fill out.
With the authkey in your clipboard, find the "Authkey" field on the management panel to paste the key into.
Give your Server a Name and description as well! For customization of such in the form of colors and more, refer to [this section on Name customization](server-maintenance.md#customize-the-look-of-your-server-name) on the maintenance page.
#### **3.1. Validation**
Now run your server, and see if it spits out any more `[ERROR]` or `[WARN]` messages. The server should stay up now. In the following steps below you can find out how to join the server and add mods.
### **4. Adding mods to your server**
You may add mods to your server using the provided file manager.
Vehicle mods and map mods are different to install, but both require you to put them in your server's (`Resources/Client`) folder. Simply slide any mod you want to add in that folder.
!!! warning
Mods can be, and/or become incompatible with BeamNG, BeamMP or even other mods. Start removing mods if you are encountering issues.
Should you receive a "done" or "start" message when trying to join your server after adding mods, you likely added an incompatible or broken mod to your server.
Mod incompatibilities can also occur between 2 or more mods. If you have client mods installed, check [this guide](../../FAQ/How-to-deactivate-mods.md) about removing mods from your game.
#### 4.1 General Mods
If you only wanted to add modded vehicles, you simply put the zip file of the mod in the `Resources/Client` folder. They will automatically be downloaded by anyone who joins your server.
#### 4.2 Maps
All default maps (maps which aren't mods) work out-of-the-box and do not have to be installed. You simply change the `Map` path in the Map field of the management panel to any of [these](server-maintenance.md#all-vanilla-maps-names). For any other modded maps, do this:
1. Place your map's `.zip` file in your server's (`Resources/Client`) folder.
2. Next, have a look inside the map's zip file (don't extract it) and open the `levels` folder. In this folder there should be simply one other folder with the name of the map, for example “myawesomedriftmap2021”. Make sure to copy or remember this name _exactly as it is written in that folder's name._
3. Open your management panel. In the `Map` field, you should see `/levels/MAPNAME/info.json`, where `MAPNAME` is likely something like `gridmap_v2`. You want to now replace this `MAPNAME` with the name of the folder from the last step, in that example it was `myawesomedriftmap2021`. In the end it should look like this (for this example) and _**should**_ have `/info.json` at the end.
Now, when someone joins your server, it should download the map automatically and work as expected. 
**If this does NOT work**, install the map in your singleplayer BeamNG.drive, launch it and enter the map. Then, open the Console by pressing the `~` (_tilde_) key (if you're on a non-US keyboard, look at the **Toggle System Console** action in the **Options > Controls > Bindings** menu, under the **General Debug** section), and run `print(getMissionFilename())`. This should then show you the name to use. 
That's it! Your modded map should now be available to join!
### **5. How to join your server**
How you and other players can join your server.
#### 6. Joining your own server (both private and public)
You can direct connect to the pubblic IP and Port of the server, found on the management panel. The same IP and Port have to be entered by any other users trying to connect to this server.
You can also check the [Keymaster](https://keymaster.beammp.com/) Website for the Servers IP Address.
To join your public server they can simply go to the server list, type the name of the server, and click connect. If you are unsure of what your server name is, it will be the name you put in the `ServerConfig.toml`.
Make sure search filters are disabled and the Map set to "Any" if you can't find it.
Should you or your friends experience a "Connection Failed!" Error, check the Launcher Window for codes like 10060, 10061, 10030.
This means the server is unreachable, or you entered incorrect parameters into the IP and Port field on your client.
IPv6 Support is **NOT** yet implemented.
## Still facing issues?
Open a Thread on the [Forum](https://forum.beammp.com) or file a **Server Support Ticket** on our [Discord server](https://discord.gg/beammp) in the `#support` channel.
+1 -1
View File
@@ -27,7 +27,7 @@ Nota: *Si te estás uniendo a un mapa con múltiples vehículos cargados, tardar
### **Instalación en Linux** ### **Instalación en Linux**
Consulte la [documentación en inglés](https://docs.beammp.com/game/getting-started/#2b-linux-installation). Consulte la [documentación en inglés](/game/getting-started#2b-linux-installation).
--- ---
+38
View File
@@ -0,0 +1,38 @@
## Pourquoi dois-je désactiver mes mods ?
Dans BeamMP, le serveur auquel vous vous connectez fournit les mods nécessaires. Ceux-ci sont téléchargés et activés automatiquement lors de la connexion. L'installation et l'activation de mods locaux peuvent souvent entraîner un dysfonctionnement de BeamMP, même avec un seul mod supplémentaire.
!!! warning
Supprimez tous les mods placés dans le dossier BeamNG.Drive\content\ ou ses sous-dossiers. Cet emplacement n'est PAS destiné à l'installation de mods et peut entraîner des problèmes, comme indiqué dans le fichier « DO_NOT_INSTALL_MODS_HERE.txt », situé dans le même répertoire.
!!! quote 'DO_NOT_INSTALL_MODS_HERE.txt"
NE copiez PAS les mods dans ce dossier : cela peut entraîner des mods cassés, une installation plus lente des mises à jour, un gestionnaire de mods cassé, un mode sans échec cassé et autres.
## Comment désactiver/supprimer mes mods ?
Il existe 3 options pour résoudre les problèmes possibles lors de l'utilisation de BeamMP.
### 1. Désactiver les mods
Avant de rejoindre un serveur, assurez-vous qu'aucun mod autre que « multiplayerbeammp » n'est activé. Si le jeu se bloque ou si vous rencontrez toujours des problèmes, reportez-vous à l'option suivante.
### 2. Création d'un nouveau dossier utilisateur
Ouvrez le dossier utilisateur BeamNG.Drive et renommez le dossier de la dernière version (par exemple 0.35) en 0.xx_OLD (0.35_OLD). Fermez BeamNG.drive avant de le renommer. ![image](../../assets/content/new-userfolder.png)
### 3. Suppression des mods des dossiers de contenu.
Pour accéder au dossier Beamng.drive\content\ et le vider de tout mod, ouvrez l'emplacement d'installation de BeamNG.drive. Faites un clic droit sur le dossier `content` et supprimez-le. Procédez à la vérification des fichiers du jeu via Steam ou Epic Games. Les fichiers seront alors à nouveau téléchargés.
Une fois terminé, lancez BeamNG.Drive via le lanceur BeamMP. Le seul mod activé dans le dépôt devrait être « multiplayerbeammp », ainsi que le bouton d'accès à BeamMP dans le menu principal. Si vous rencontrez toujours des difficultés pour rejoindre un serveur moddé, il est probable que des mods défectueux ou obsolètes soient disponibles.
### 4. Nettoyage du cache de BeamMP-Launcher
Pour nettoyer les mods en cache des répertoires BeamMP, accédez à l'emplacement d'installation de votre lanceur BeamMP. Par défaut, le chemin est « C:\Users\AppData\BeamMP-Launcher ». Vous y trouverez un dossier « Resources ». Supprimez ce dossier pour supprimer tous les mods en cache. Cela peut être utile si vous avez besoin de plus d'espace disque ou si vous souhaitez supprimer des mods BeamNG obsolètes.
!!! question "Mes paramètres et configurations ont disparu ! Comment puis-je les restaurer ?"
Si vous avez renommé le dossier utilisateur, vous avez forcé le jeu à créer un nouveau dossier utilisateur propre. Vous pouvez copier les dossiers « paramètres » et « véhicules » du dossier renommé (par exemple, 0.34_OLD) vers le nouveau dossier créé.
Assurez-vous que BeamNG.Drive est fermé et remplacez tous les éléments à l'emplacement où vous souhaitez copier les dossiers. Toutes les configurations et tous les paramètres devraient maintenant être identiques.
+1 -1
View File
@@ -18,7 +18,7 @@ L'équipe de soutient de BeamMP n'offre pas de soutient pour les versions pirat
--- ---
### **Est-ce que BeamMP fonction sur linux?** ### **Est-ce que BeamMP fonction sur linux?**
Le client n'est pas officiellement supporté sur linux, cependant, vous pouvez suivre notre [guide qui explique comment utiliser BeamMP sur Linux](../game/getting-started/#2b-linux-installation) Le client n'est pas officiellement supporté sur linux, cependant, vous pouvez suivre notre [guide qui explique comment utiliser BeamMP sur Linux](../../game/getting-started.md#2b-installation-sur-linux)
--- ---
### **Pourquoi le lanceur est détecté comme un virus par mon antivuris ou par Windows Defender** ### **Pourquoi le lanceur est détecté comme un virus par mon antivuris ou par Windows Defender**
+19 -10
View File
@@ -16,22 +16,31 @@ La configuration comporte une section par défaut, appelée `[General]` , qui co
Key | Type de valeur | Description Key | Type de valeur | Description
--- | --- | --- --- | --- | ---
AuthKey | Format AuthKey `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` où tous les x sont des caractères alphanumériques (chiffres et lettres) | Utilisé pour identifier votre serveur auprès du backend. Vous devriez en avoir obtenu un en suivant les instructions d'installation. Port | 1024-65535 | Le port réseau sur lequel le serveur sera accessible. (Il doit être unique et ne pas être utilisé par un autre service sur le même hôte).
AuthKey | Format AuthKey `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` où tous les x sont des caractères alphanumériques (chiffres et lettres) | Permet d'identifier un serveur de set public avec le backend.
AllowGuests | true/false | Détermine si les invités sont autorisés à se connecter au serveur ou non.
LogChat | true /false | Lorsque cette option est activée (true), les messages de chat sont enregistrés dans le fichier server.log.
Debug | true /false | Si cette option est activée (true), davantage de messages seront affichés dans le journal et des informations supplémentaires seront fournies. Activez-la en cas de problème. L'activation de cette option augmentera considérablement la taille du fichier journal. Debug | true /false | Si cette option est activée (true), davantage de messages seront affichés dans le journal et des informations supplémentaires seront fournies. Activez-la en cas de problème. L'activation de cette option augmentera considérablement la taille du fichier journal.
IP | Adresse de classe locale d'une des cartes réseau connectées à l'hôte. (Par défaut : « 0.0.0.0 » ou « :: ») | Le serveur tentera de se connecter à l'adresse IP fournie. Veuillez ne pas modifier ce champ sauf si vous savez ce que vous faites. Il n'est pas nécessaire de modifier cette valeur pour que le serveur fonctionne.
Private | true/false | Si cette option est activée (true), votre serveur n'apparaîtra pas dans la liste des serveurs. Toute personne disposant de l'adresse IP et du port corrects pourra se connecter. Private | true/false | Si cette option est activée (true), votre serveur n'apparaîtra pas dans la liste des serveurs. Toute personne disposant de l'adresse IP et du port corrects pourra se connecter.
Description | Tout « texte » | Affiché comme description du serveur dans la liste des serveurs (si le serveur est public). Vous pouvez utiliser des caractères spéciaux pour le formater avec des couleurs et des styles. InformationPacket | true/false | Lorsque cette option est activée (true), le serveur autorisera les clients non authentifiés à obtenir les mêmes informations que celles figurant sur la liste des serveurs, mais directement via le serveur.
Name | Tout « texte » | Affiché comme nom/titre de votre serveur dans la liste des serveurs. Vous pouvez utiliser des caractères spéciaux pour le formater avec des couleurs et des styles. Name | Tout « texte » | Affiché comme nom/titre de votre serveur dans la liste des serveurs. Vous pouvez utiliser des caractères spéciaux pour le formater avec des couleurs et des styles.
Map | Un emplacement de carte valide, tel que `/levels/gridmap_v2/info.json` | La carte que votre serveur hébergera. Elle doit être installée soit par défaut (liste ci-dessous), soit en tant que mod de serveur. Tags | Voir la liste des tags autorisés ci-dessous. | Mots clés pour la recherche, par exemple : Police, Racing, etc.
MaxCars | Tout nombre ≥ 1 | Nombre maximal de voitures par joueur. Toute voiture supplémentaire qu'un joueur tentera de faire apparaître sera supprimée instantanément. MaxCars | Tout nombre ≥ 1 | Nombre maximal de voitures par joueur. Toute voiture supplémentaire qu'un joueur tentera de faire apparaître sera supprimée instantanément.
Port | 1024-65535 | Le port réseau sur lequel le serveur sera accessible. Pour qu'un joueur puisse se connecter directement à votre serveur, il aura besoin de votre adresse IP et de ce port. MaxPlayers | Tout nombre ≥ 1 | Le nombre maximal de joueurs par serveur. Cela n'a aucune incidence sur le nombre de véhicules.
Map | Un emplacement de carte valide, tel que `/levels/gridmap_v2/info.json` | La carte que votre serveur hébergera. Elle doit être installée soit par défaut (liste ci-dessous), soit en tant que mod de serveur.
Description | Tout « texte » | Affiché comme description du serveur dans la liste des serveurs (si le serveur est public). Vous pouvez utiliser des caractères spéciaux pour le formater avec des couleurs et des styles.
ResourceFolder | Un chemin d'accès valide vers un dossier, tel que « D:\Server\BeamMP\Resources » | Utile pour stocker séparément le serveur et le dossier de ressources.
ImScaredOfUpdates | true/false | Cette option permet de définir si le serveur doit se mettre à jour automatiquement ou non lorsqu'une nouvelle version est disponible.
UpdateReminderTime | Tout nombre suivi de s, min, h, d. (30s) | Définit l'intervalle du message de rappel de mise à jour affiché dans le terminal.
D'autres sections peuvent et doivent être utilisées par les plugins du serveur (API Lua à venir), comme ceci : `[MyMod]` . D'autres sections peuvent et doivent être utilisées par les plugins du serveur (API Lua à venir), comme ceci : `[MyMod]` .
Vous **devez** définir la clé d'authentification. Elle est vide par défaut et doit être renseignée avec la clé d'authentification obtenue lors de l'installation précédente. Ne la partagez avec personne et floutez-la complètement sur les captures d'écran. La clé d'authentification DOIT être définie par vous. Elle est vide par défaut et la clé utilisé doit être celle obtenue lors des étapes précédente. Ne la partagez avec personne et floutez-la complètement sur les captures d'écran.
### Tous les noms de cartes vanilla ### Tous les noms de cartes vanilla
Voici toutes les cartes en stock : Voici toutes les cartes disponibles par défault:
- /levels/gridmap_v2/info.json - /levels/gridmap_v2/info.json
- /levels/johnson_valley/info.json - /levels/johnson_valley/info.json
@@ -203,7 +212,7 @@ Pour recevoir des nouvelles des mises à jour dès leur sortie, suivez le canal
### Comment mettre à jour ### Comment mettre à jour
#### Si vous utilisez un fournisseur d'hébergement partenaire BeamMP #### Si vous utilisez un fournisseur d'hébergement en partenariat avec BeamMP
Si vous utilisez un hébergeur partenaire de BeamMP, les instructions ci-dessous ne fonctionneront probablement pas. Nous vous recommandons d'attendre plus d'informations de votre hébergeur ou de le contacter pour obtenir de l'aide. Si vous utilisez un hébergeur partenaire de BeamMP, les instructions ci-dessous ne fonctionneront probablement pas. Nous vous recommandons d'attendre plus d'informations de votre hébergeur ou de le contacter pour obtenir de l'aide.
@@ -213,15 +222,15 @@ La mise à jour du serveur se fait en remplaçant l'ancien exécutable par le no
Si vous avez compilé à partir des sources, il vous suffit de reconstruire. Assurez-vous d'exécuter `git submodule update --init --recursive` avant de reconstruire. Si vous avez compilé à partir des sources, il vous suffit de reconstruire. Assurez-vous d'exécuter `git submodule update --init --recursive` avant de reconstruire.
#### On Windows #### Sur Windows
1. Assurez-vous davoir installé les fichiers [redistribuables de Visual C++](https://aka.ms/vs/17/release/vc_redist.x64.exe) afin dexécuter le serveur. 1. Assurez-vous davoir installé les fichiers [redistribuables de Visual C++](https://aka.ms/vs/17/release/vc_redist.x64.exe) afin dexécuter le serveur.
2. Accédez à [BeamMP.com](https://beammp.com/) et cliquez sur le bouton « Télécharger le serveur ». 2. Accédez à [BeamMP.com](https://beammp.com/) et cliquez sur le bouton « Télécharger le serveur ».
3. Une fois téléchargé, vous devriez voir un fichier nommé `BeamMP-Server.exe` . Nous l'appellerons « nouvel exécutable ». 3. Une fois téléchargé, vous devriez voir un fichier nommé `BeamMP-Server.exe` . Nous l'appellerons « nouvel exécutable ».
4. Accédez au dossier où se trouve votre exécutable `BeamMP-Server.exe` actuel (généralement le même dossier que votre fichier `ServerConfig.toml` ). Nous l'appellerons « ancien exécutable ». 4. Accédez au dossier où se trouve votre exécutable `BeamMP-Server.exe` actuel (généralement le même dossier que votre fichier `ServerConfig.toml` ). Nous l'appellerons « ancien exécutable ».
5. Replace the old executable with the new executable (for example by copying or moving the new executable into the folder). 5. Remplacez l'ancien exécutable par le nouveau (en copiant ou en déplaçant le nouveau dans le fichier, par example).
#### Sous Linux #### Sur Linux
1. Accédez à [BeamMP.com](https://beammp.com/) et cliquez sur le bouton « Télécharger le serveur », vous serez redirigé vers la page de publication Github du serveur. 1. Accédez à [BeamMP.com](https://beammp.com/) et cliquez sur le bouton « Télécharger le serveur », vous serez redirigé vers la page de publication Github du serveur.
2. Téléchargez la version adaptée à votre distribution. Par souci de simplicité, elle s'appellera désormais `BeamMP-Server-xxx` , où `xxx` désigne la version de la distribution que vous utilisez. 2. Téléchargez la version adaptée à votre distribution. Par souci de simplicité, elle s'appellera désormais `BeamMP-Server-xxx` , où `xxx` désigne la version de la distribution que vous utilisez.
+1 -1
View File
@@ -18,7 +18,7 @@ L'équipe de soutient de BeamMP n'offre pas de soutient pour les versions pirat
--- ---
### **Est-ce que BeamMP fonction sur linux?** ### **Est-ce que BeamMP fonction sur linux?**
Le client n'est pas officiellement supporté sur linux, cependant, vous pouvez suivre notre [guide qui explique comment utiliser BeamMP sur Linux](../game/getting-started/#2b-linux-installation) Le client n'est pas officiellement supporté sur linux, cependant, vous pouvez suivre notre [guide qui explique comment utiliser BeamMP sur Linux](../../game/getting-started.md#2b-installation-sur-linux)
--- ---
### **Pourquoi le lanceur est détecté comme un virus par mon antivuris ou par Windows Defender** ### **Pourquoi le lanceur est détecté comme un virus par mon antivuris ou par Windows Defender**
+1 -1
View File
@@ -22,7 +22,7 @@ BeamMP è nativamente compatibile solo con Windows al momento.
Nota: _Se ti connetti ad un server con molti giocatori potresti impiegare più tempo ad entrare in gioco._ Nota: _Se ti connetti ad un server con molti giocatori potresti impiegare più tempo ad entrare in gioco._
### **Installazione su Linux** ### **Installazione su Linux**
Consultare la [documentazione in inglese](https://docs.beammp.com/game/getting-started/#2b-linux-installation). Consultare la [documentazione in inglese](/game/getting-started#2b-linux-installation).
--- ---
+28 -16
View File
@@ -3,38 +3,50 @@
!!! информация !!! информация
``` ```
Before tampering with the firewall, make sure that your network within the windows networking settings is set to private (assuming you are in a private network). Перед изменением настроек брандмауэра убедитесь, что ваша сеть в параметрах Windows настроена как частная (при условии, что вы действительно находитесь в частной сети).
!!! danger ":material-scale-balance: DISCLAIMER:" !!! danger ":material-scale-balance: DISCLAIMER:"
**Firewall / Defender exclsuions are a risk**. **Исключения в Firewall / Defender представляют собой риск**.
By creating exclsuions, you understand the risks of allowing programs on your PC and opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for **any and all** damages that may happen to you or your household. Создавая исключения, вы осознаёте риски, связанные с разрешением программам на вашем ПК и открытием портов вашей домашней сети для публичного доступа, и, следовательно, лишаете себя права привлекать BeamMP к ответственности за **любые** возможные убытки или ущерб, которые могут возникнуть у вас или вашего домохозяйства.
We take no responsibility for any content on any externally linked services or websites. Мы не несём ответственности за любой контент, размещённый на внешних сервисах или сайтах, на которые ведут ссылки.
``` ```
## 1. Исключение брандмауэра для BeamMP-Launcher. ## 1. Исключение для BeamMP-Launcher в брандмауэре Защитника.
1. Откройте `Windows Defender Firewall with advanced setting` . 1. Откройте `Windows Defender Firewall with advanced setting`.
2. В окне нажмите `Inbound` , чтобы открыть вкладку исключений для входящих подключений. 2. В окне нажмите `Inbound`, чтобы открыть вкладку исключений для входящих подключений.
3. Нажмите `Create new rule` в правом верхнем углу, чтобы создать новое исключение. 3. Нажмите `Create new rule` в правом верхнем углу, чтобы создать новое исключение.
4. Выберите `Program` , чтобы создать исключение для конкретной программы. 4. Выберите `Program`, чтобы создать исключение для конкретной программы.
5. Введите полный путь к `BeamMP-Launcher.exe` . По умолчанию это будет `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe` без кавычек. 5. Введите полный путь к файлу `BeamMP-Launcher.exe`. По умолчанию это `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe` (без кавычек).
6. Обязательно разрешите подключение 6. Обязательно разрешите подключение
7. Дайте исключению имя (например, «BeamMP-Launcher») и сохраните его. 7. Дайте исключению имя (например, «BeamMP-Launcher») и сохраните его.
8. Перезагрузите компьютер. 8. Перезагрузите компьютер.
## 2. Исключение антивируса для BeamMP-Launcher. ## 1.1 Исключение сервера BeamMP из списка блокировки брандмауэра Защитника.
1. Откройте приложение `Windows Security` . 1. Откройте `Windows Defender Firewall with advanced setting`.
2. Нажмите на первый пункт `virus and threat protection` . 2. В окне нажмите `Inbound`, чтобы открыть вкладку «Исключения для входящих».
3. Нажмите `Create new rule` в правом верхнем углу, чтобы создать новое исключение.
4. Выберите`Port` чтобы создать исключение для конкретной программы.
5. Укажите тот же порт, что и в ServerConfig.toml.
6. Введите полный путь к файлу `BeamMP-Server.exe`. Файл находится в той папке, в которую вы его поместили после загрузки.
7. Убедитесь, что вы разрешили подключения
8. Дайте имя исключению (прим. "BeamMP-Server") и сохраните его.
9. Перезагрузите компьютер.
## 2. Исключение BeamMP-Launcher/Server из списка мониторинга Антивируса Защитника.
1. Откройте приложение `Windows Security`.
2. Нажмите на первый пункт `virus and threat protection`.
3. Нажмите `Manage settings` в разделе «Параметры защиты от вирусов и угроз». 3. Нажмите `Manage settings` в разделе «Параметры защиты от вирусов и угроз».
4. Прокрутите страницу вниз, чтобы перейти на вкладку `Exclusions` . 4. Прокрутите страницу вниз, чтобы перейти на вкладку `Exclusions`.
5. Там нажмите «Добавить исключение» и выберите `process` . 5. Там нажмите «Добавить исключение» и выберите `process`.
6. Введите `BeamMP-Launcher.exe` в поле и сохраните его. 6. Введите `BeamMP-Launcher.exe` или `BeamMP-Server.exe` в поле и сохраните.
7. Перезагрузите компьютер. 7. Перезагрузите компьютер.
## Все еще сталкиваетесь с проблемами? ## Все еще сталкиваетесь с проблемами?
Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support` . Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`.
+1 -1
View File
@@ -22,7 +22,7 @@ BeamMP не будет работать с пиратскими или уста
### **Работает ли BeamMP на Linux?** ### **Работает ли BeamMP на Linux?**
Клиент официально не поддерживается в Linux. Однако вы можете следовать нашему [руководству по использованию BeamMP в Linux](../game/getting-started/#2b-linux-installation) Клиент официально не поддерживается в Linux. Однако вы можете следовать нашему [руководству по использованию BeamMP в Linux](../../game/getting-started.md#2-linux)
--- ---
+25
View File
@@ -0,0 +1,25 @@
# 28 марта 2026 г. FAQ о сбоях BeamMP
Временный раздел часто задаваемых вопросов (FAQ) в связи с (текущим) сбоем в работе BeamMP, начавшимся 28 марта 2026 года.
**Последнее обновление: 1 апреля 2026 г.**
=== Помогите! Мой лаунчер BeamMP не работает! Попробуйте переустановить лаунчер BeamMP. Для этого выполните следующие действия: 1. Перейдите на [сайт beammp.com](https://beammp.com/) 2. Нажмите *«Скачать сейчас»* 3. Запустите установщик и следуйте инструкциям
```
!!! примечание
По состоянию на 1 апреля 2026 года, согласно Windows Defender SmartScreen, установщик MSI является «неопознанным приложением».
Чтобы обойти это предупреждение, нажмите *Подробнее*, а затем *Запустить в любом случае*.
```
=== Помогите! Мои ключи авторизации больше не работают! С 1 апреля 2026 года системы управления ключами и авторизации отключены. Это означает, что ваши ключи авторизации работать не будут. Чтобы обойти это, выполните следующие действия: 1. Откройте файл `ServerConfig.toml` или любой другой файл конфигурации вашего сервера. 2. Установите значение `Private` в `true` . Должно получиться примерно так: `Private = true` 3. Это должно решить проблему с ключами авторизации.
```
!!! примечание
С 1 апреля 2026 года системы аутентификации BeamMP отключены. Доступны только гостевые учетные записи.
Убедитесь, что ваш официант разрешает вход гостям.
```
+13
View File
@@ -0,0 +1,13 @@
!!! Внимание! "Сайт находится в стадии разработки!"
```
Работа над этим сайтом активно ведётся.
Считаете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с изображением карандаша справа!
Это можно сделать и на любой странице.
```
# Фрагменты кода CEF для BeamNG.drive
список дел(to-do)
+53
View File
@@ -0,0 +1,53 @@
---
hide:
- навигация
---
# Правила сообщества BeamMP
!!! info BeamMP Персонал не обязан строго модерировать эти правила и может действовать по своему усмотрению. В дополнение к этим правилам применяются и соблюдаются [Правила Сообщества](https://discord.com/guidelines/) и [Условия Обслуживания](https://discord.com/terms/) Discord.
## Общие Правила BeamMP (Применяются к Discord, Форуму и Игре)
1. Никакой Дискриминации (например, сексизма, расизма и т. д.) :material-information-outline:{ title="Сюда входит использование расовых/сексуальных оскорблений или другой лексики, направленной против отдельного человека или группы людей, как напрямую, так и с намерением сделать это." }
2. Никаких Издевательств или Притеснений :material-information-outline:{ title="Сюда входит нацеливание на отдельных лиц с использованием нежелательных действий, непрошеных личных сообщений или нацеливание на них с помощью сообщений, изображений или устного общения." }
3. Никакого NSFW, Оскорбительного или Вредоносного Контента :material-information-outline:{ title="Сюда входит контент, содержащий вредоносные ссылки, наготу, порнографию, чрезмерную ненормативную лексику или материалы, которые иным образом являются оскорбительными, вредоносными и/или иным образом не подходят для общественных мест." }
4. Запрет на Рассылку Спама в Текстовых/Голосовых Каналах или Сообщениях :material-information-outline:{ title="Сюда входит создание нескольких сообщений или тем, рассылка спама одинаковыми или похожими сообщениями, а также злоупотребление голосовыми каналами связи или другие действия, включающие спам-присоединение/выход из сообщества." }
5. Говорите по-Английски :material-information-outline:{ title="Вся коммуникация в BeamMP должна вестись на английском языке, где это возможно, за исключением отдельных областей, обозначенных иным образом." }
6. Никаких Ненадлежащих Профилей :material-information-outline:{ title="Сюда входят имена профилей, фотографии, биографии или другой контролируемый пользователем контент, который не соответствует правилам и условиям BeamMP/BeamNG/Discord." }
7. Запрет на Доксинг :material-information-outline:{ title="Запрет на публикацию личной информации («доксинг») (включая, помимо прочего, настоящие имена, адреса, адреса электронной почты, пароли, информацию о банковских счетах и кредитных картах и т. д.)" }
8. Никакой Политики :material-information-outline:{ title="Сюда входит обсуждение прошлых или текущих мировых событий за пределами BeamMP/BeamNG или игр в целом. Существуют места для обоснованного обсуждения этих тем, но BeamMP не входит в их число." }
9. Никакой Рекламы не Относящейся к BeamMP/BeamNG Контенту :material-information-outline:{ title="Сюда входят не относящиеся к BeamMP сообщества, каналы социальных сетей или другие внешние ссылки. Это относится к публикациям в сообществе BeamMP, а также к отправке пользователям незапрошенных DM в целях личной рекламы." }
10. Не Выдавайте Себя за Сотрудников :material-information-outline:{ title="Это включает в себя выдачу себя за сотрудника BeamMP или утверждение, что у вас есть способности, связанные с должностью сотрудника. Это также включает в себя имитацию сотрудников." }
11. Никакой Эксплуатации :material-information-outline:{ title="Это включает в себя эксплуатацию любых ошибок или упущений для личной выгоды или для оказания негативного влияния на опыт других." }
12. Категорически запрещается делиться ключами Authkey и использовать альтернативные учетные записи с целью увеличения количества ключей сверх установленного бесплатного лимита.
13. Соблюдайте Все Указанные TOS :material-information-outline:{ title="Это важно, поскольку для использования нашего сервера Discord также необходимо соблюдать такие ограничения, как возрастное ограничение Discord (13+)." }
14. Уважайте Всех :material-information-outline:{ title="Этого не стоит говорить, но вам нужно уважать всех вокруг вас и вести себя соответственно." }
15. Придерживайтесь темы категории или канала. :material-information-outline:{ title="Это не должно быть сказано, но ваш контент должен соответствовать теме области, в которой вы публикуете информацию. Например, канал поддержки должен помогать людям или использоваться при поиске помощи." }
16. Никаких излишних Заглавных Букв или Реакций/Эмодзи :material-information-outline:{ title="Пользователи должны воздерживаться от чрезмерного использования заглавных букв или эмодзи/реакций, чтобы не затемнять суть вопроса." }
17. Перед тем, как оставлять сообщение в разделах поддержки, ознакомьтесь с [Часто Задаваемыми Вопросами по BeamMP](../../support/player-faq.md) и [Часто Задаваемыми Вопросами по Сообществу BeamMP](https://forum.beammp.com/c/faq/35).
## Правила Discord
1. Все Вышеуказанные Правила Применяются Здесь :material-information-outline:{ title="Все правила, упомянутые в этом документе, применяются к голосовым чатам." }
2. Соблюдайте Условия и Правила Discord :material-information-outline:{ title="Соблюдайте все правила, изложенные Discord в Условиях и правилах" }
3. Никаких Аудио/Трансляций NSFW :material-information-outline:{ title="Players should not stream any content that violates BeamMP rules and Discord TOS." }
4. Вышеуказанное правило распространяется на игорные Сервисы/Веб-сайты.
5. Не Используйте Чрезмерный Звук :material-information-outline:{ title="Excessively using soundboards, playing loud music or other uses of audio channels to intentionally agitate or target others is prohibited." }
6. Не Спамьте Входами/Выходами :material-information-outline:{ title="Most users will have sound effects enabled, do not join and leave voice-chats rapidly." }
7. Не Приставайте к Другим (`@'ing`) :material-information-outline:{ title="Это включает в себя повторные просьбы к другим дать ответ после того, как вас проигнорировали или сказали "нет"." }
8. Держите команды для ботов в предназначенных для этого каналах.
9. Никакой Ролевой Игры :material-information-outline:{ title="Это сделано для предотвращения проблем, возникающих из-за отсутствия контекста, или для предотвращения обхода пользователями определенных правил." }
10. Не просите пользователей обращаться к вам в личные сообщения за помощью. Все вопросы, связанные с поддержкой, обсуждайте в специальном разделе поддержки на сервере BeamMP в Discord.
11. Не предлагайте подключиться к компьютеру другого пользователя и воздерживайтесь от отправки неоднозначных, потенциально вредоносных и/или опасных файлов или расширений.
12. Не давайте инструкций и/или ссылок о том, как скачивать пиратские версии, приобретать незаконные копии программного обеспечения, взламывать учетные записи (Beaming рус. "биминг") или использовать платные модификации.
13. Не рекламируйте контент, не связанный с BeamNG/BeamMP. Отправлять медиа с вашего собственного канала разрешается только в специально предназначенном [медиа-канале](https://discord.com/channels/601558901657305098/705427325646274680).
14. Следуйте указаниям сотрудников. Если вы считаете, что сотрудник злоупотребляет своей властью, отправьте личное сообщение их руководителю или менеджеру проекта.
## Как обжаловать действия против вас:
### Апелляции по запретам можно подавать на <a href="https://docs.google.com/forms/d/1MaTPKM-MHQU5lUtxeOKz3C7OoI6Xbu5RX5AJdX-UOz4" class="inline-onebox">Ban Appeal - BeamMP</a>.
Все апелляции на бан тщательно расследуются с участием как минимум двух (2) членов команды персонала/модераторов, которые не были вовлечены в рассматриваемое дело. Выдавший апелляцию сотрудник будет иметь право комментировать, но не будет иным образом участвовать в принятии решения по апелляции. Эти результаты апелляции являются окончательными. BeamMP оставляет за собой право разрешать или не разрешать членам, как они сочтут нужным, в соответствии с Правилами Сообщества BeamMP (см. выше), [Discord ToS](https://discord.com/terms) и другими факторами.
!!! warning В случае принятия мер против вас запрещено создавать новую учётную запись Discord или BeamMP для обхода бана.
+32 -18
View File
@@ -7,28 +7,32 @@ BeamMP полностью совместим с Windows и Linux, совмест
!!!предупреждение !!!предупреждение
``` ```
BeamMP will not work with pirated or outdated versions of BeamNG.drive. BeamMP не будет работать с пиратскими или устаревшими версиями BeamNG.drive.
The BeamMP support team does not offer support for issues with pirated / outdated copies. Служба поддержки BeamMP не оказывает помощь по вопросам, связанным с пиратскими/устаревшими копиями.
``` ```
---
## **2. Установка** ## **2. Установка**
### **2а. Установка Windows** ### **2а. Установка Windows**
1. Перейдите на сайт [beammp.com](https://beammp.com/) и нажмите кнопку «Загрузить клиент». !!!примечание
2. Распакуйте архив `BeamMP_Installer.zip`.
3. Запустите `BeamMP_Installer.exe` и следуйте инструкциям. ```
4. Значок BeamMP Launcher должен появиться на рабочем столе. Если нет, просто найдите «BeamMP» в строке поиска Windows. По состоянию на 1 апреля 2026 года, согласно Windows Defender SmartScreen, установщик MSI является «неопознанным приложением».
5. После запуска лаунчера вы должны увидеть окно терминала, вскоре после этого BeamNG.drive должен автоматически запуститься. **Не** закрывайте окно терминала.
6. После запуска BeamNG в главном меню нажмите кнопку `Repository` и убедитесь, что `multiplayerbeammp`**единственный** включенный мод. Чтобы проигнорировать это предупреждение, нажмите «Подробнее», а затем нажмите «Запустить в любом случае».
7. Выйдите в главное меню, нажмите «Ещё..», затем кнопку «Мультиплеер», чтобы начать игру по сети. ```
8. Вам будет предложено войти или играть в качестве гостя (не все серверы допускают гостей). Вы можете создать учетную запись на нашем [форуме](https://forum.beammp.com), а затем войти в BeamMP с теми же учетными данными.
9. Выберите любой понравившийся вам сервер и нажмите `Connect`. Наслаждайтесь! 1. Перейдите на [сайт beammp.com](https://beammp.com/) и нажмите кнопку «Скачать сейчас».
2. Запустите установщик `BeamMP_Installer.msi` и следуйте инструкциям.
3. Значок BeamMP Launcher должен появиться на рабочем столе. Если нет, просто введите «BeamMP» в строку поиска Windows.
!!!примечание !!!примечание
``` ```
As you are loading into a map with multiple vehicles spawned it might take longer than expected to join. Поскольку при загрузке на карту с множеством созданных транспортных средств подключение может занять больше времени, чем ожидалось.
``` ```
### **2б. Установка Linux** ### **2б. Установка Linux**
@@ -87,16 +91,16 @@ cmake --build bin --parallel
!!!примечание "" !!!примечание ""
``` ```
Should you run out of RAM while building, you can ommit the --parallel instruction, it will then use less RAM due to building only on one CPU thread. Если во время сборки не хватит оперативной памяти, можно исключить параметр --parallel — в этом случае сборка будет выполняться только в одном потоке процессора, что позволит сократить объем используемой оперативной памяти.
``` ```
!!!примечание "" !!!примечание ""
``` ```
By not specifying `-DCMAKE_BUILD_TYPE=Release` you are building a debug version, which is larger in filesize but does not contain the launcher-can-only-connect-to-a-server-once bug Не указывая `-DCMAKE_BUILD_TYPE=Release`, вы создаете отладочную версию, которая больше по размеру файла, но не содержит ошибки, из-за которой программа запуска может подключиться к серверу только один раз.
``` ```
!!!note "Пользователи Fedora" Если vcpkg выдаёт ошибку при компиляции OpenSSL из-за заголовков ядра, убедитесь, что все зависимости установлены: `bash sudo dnf install kernel-headers kernel-devel gcc gcc-c++ make perl` Затем очистите кэш vcpkg: `bash rm -rf $VCPKG_ROOT/buildtrees/openssl` И повторите команду конфигурации cmake. !!!примечание "Пользователи Fedora" Если vcpkg выдаёт ошибку при компиляции OpenSSL из-за заголовков ядра, убедитесь, что все зависимости установлены: `bash sudo dnf install kernel-headers kernel-devel gcc gcc-c++ make perl` Затем очистите кэш vcpkg: `bash rm -rf $VCPKG_ROOT/buildtrees/openssl` И повторите команду конфигурации cmake.
Переместите готовое приложение из папки `/bin` в отдельную папку и запустите его оттуда: Переместите готовое приложение из папки `/bin` в отдельную папку и запустите его оттуда:
@@ -132,14 +136,24 @@ cd ~/beammp-launcher
!!! совет "Добавление шрифта эмодзи для получения эмодзи в тексте" !!! совет "Добавление шрифта эмодзи для получения эмодзи в тексте"
``` ```
In order to get emojis to show up in either the serverlist (As part of a servers customised name) or in the ingame chat, you need to have a font that contains emojis. Для того чтобы эмодзи отображались в списке серверов (как часть пользовательского имени сервера) или во внутриигровом чате, вам нужен шрифт, содержащий эмодзи.
This can be done for example by adding the [Linux-port of the Windows Segoe-UI emoji font](https://github.com/mrbvrz/segoe-ui-linux) Это можно сделать, например, добавив [Linux-версию шрифта эмодзи Segoe-UI для Windows](https://github.com/mrbvrz/segoe-ui-linux)
``` ```
--- ---
## **3. Известные проблемы** ## **3. Использование BeamMP**
1. После запуска лаунчера вы увидите окно терминала. Вскоре после этого должен запуститься стандартный лаунчер BeamNG. **Не** закрывайте окно терминала.
2. В главном меню BeamNG.drive нажмите кнопку `Repository` и убедитесь, что включен <strong>только</strong> мод <code>multiplayerbeammp</code> .
3. Выйдите в главное меню, нажмите «Ещё..», затем кнопку «Мультиплеер», чтобы начать игру по сети.
4. Вам будет предложено войти или играть в качестве гостя (не все серверы допускают гостей). Вы можете создать учетную запись на нашем [форуме](https://forum.beammp.com), а затем войти в BeamMP с теми же учетными данными.
5. Выберите любой понравившийся вам сервер и нажмите `Connect`. Наслаждайтесь!
---
## **4. Известные проблемы**
- Нативный linux BeamMP-Launcher в настоящее время может подключиться к серверу только один раз, после отключения вам нужно перезапустить лаунчер. Вы можете сделать это, не закрывая игру между - Нативный linux BeamMP-Launcher в настоящее время может подключиться к серверу только один раз, после отключения вам нужно перезапустить лаунчер. Вы можете сделать это, не закрывая игру между
- Если вы не видите кнопку «Мультиплеер». Убедитесь, что мод BeamMP присутствует и активирован в «Менеджере модов», затем попробуйте нажать CTRL + L. - Если вы не видите кнопку «Мультиплеер». Убедитесь, что мод BeamMP присутствует и активирован в «Менеджере модов», затем попробуйте нажать CTRL + L.
+295
View File
@@ -0,0 +1,295 @@
# Установка Сервера
## **Создание Сервера**
Основы настройки серверного приложения
---
### **Обзор**
**Создание домашнего сервера бесплатно, размещение его на VPS проще и безопаснее**
Серверы являются неотъемлемой частью BeamMP; игроки подключаются друг к другу через сервер. Они работают нативно на Windows и Linux.
Вы можете создавать частные серверы, к которым смогут присоединиться только приглашенные вами люди, или публичные серверы, которые будут отображаться в нашем официальном списке серверов.
Запуск сервера — это процесс из нескольких шагов! Если у вас возникнут какие-либо проблемы, смело задавайте их на нашем [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`. Также обратитесь к разделу [«Обслуживание сервера»](server-maintenance.md) для получения дополнительной информации.
Перед использованием обязательно прочтите [ЛИЦЕНЗИЮ](https://raw.githubusercontent.com/BeamMP/BeamMP-Server/master/LICENSE) сервера.
Примечание: *сервер поддерживает только IPv4. Если вы не знаете, какой у вас IPv4, посмотрите на IP-адрес, который вы видите на [*whatsmyip.org*](https://www.whatsmyip.org/) — если он содержит* двоеточия `_:_` *, это **IPv6**. В этом случае вам следует дополнительно выяснить, есть ли у вас IPv4. Вы можете позвонить своему интернет-провайдеру, чтобы узнать это, или спросить кого-то, кто живет с вами (если они разбираются в технологиях, они могут знать!). Поддержка IPv6 планируется.*
## Настройка Сервера
Настройка состоит из следующих шагов, вам следует выполнить их все.
### **1. Переадресация портов**
!!! информация
```
Если вы используете VPS (виртуальный частный сервер), корневой сервер или планируете разместить этот сервер локально (с игроками в одном доме с вами), вы можете пропустить этот шаг.
Этот шаг необходим, если вы хотите, чтобы кто-то **вне** вашего домохозяйства присоединился к вашему домашнему серверу (за пределами вашей локальной сети).
!!! опасность ":material-scale-balance: ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:"
**Переадресация портов — это риск**.
Переадресуя порты, вы осознаете риски открытия портов в вашей домашней сети для публики и, следовательно, лишаете себя права привлекать BeamMP к ответственности за **любой** ущерб, который может быть причинен вам или вашему домохозяйству.
Мы не несем ответственности за какой-либо контент на любых внешних связанных сервисах или веб-сайтах.
Поэтому рекомендуется разместить сервер на одном из наших партнерских сервисов!
*Пожалуйста, ознакомьтесь с [этим руководством по переадресации портов](port-forwarding.md)*
```
#### Партнерские услуги хостинга (платные):
- [Хостинг Горизонта](https://hrzn.link/beammp)
- [RackGenius](https://rackgeni.us/beammp-plans)
- [Подключить хостинг](https://connecthosting.net/beammp)
- [Хостинг Assetto](https://assettohosting.com/en/games/beamng)
- [ZAP-Хостинг](https://zap-hosting.com/itsbeammp)
- [HostHavoc](https://hosthavoc.com/)
- [PedalHost](https://pedal.host/)
- [Хостинг Vyper](https://vyperhosting.com/r/beammp)
- [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting)
- [Хостинг Four Seasons](https://fourseasonshosting.com)
- [Vertuo Хостинг](https://vertuohosting.com)
- [Винхеберг](https://winheberg.fr/offres/gaming/beammp?lang=en)
- [Ваббанод](https://wabbanode.com/partner/beammp)
- [Айcлайн Хостинг](https://iceline-hosting.com/games/beammp)
#### 1.1 Брандмауэр
В зависимости от настроек вам может потребоваться разрешить BeamMP-Server проходить через ваш брандмауэр. Это касается Windows (отключение брандмауэра обычно **не** работает) и многих предустановленных серверов Linux.
Там вы хотите разрешить BeamMP-Server через брандмауэр, **как входящие, так и исходящие соединения**, и **как TCP, так и UDP**. Если ваш брандмауэр запрашивает порт вместо этого, это должен быть тот же порт, который вы использовали на шаге «1. Переадресация портов» (обычно 30814).
Для более детализированного руководства, обратитесь к [этой странице документации](https://docs.beammp.com/FAQ/Defender-exclusions/). Если у вас остались проблемы, вы можете спросить о них на [Форуме](https://forum.beammp.com) или нашем [Discord сервере](https://discord.gg/beammp) в `#support` канале.
### **2. Получение ключа аутентификации**
«Ключ аутентификации», часто называемый «AuthKey», необходим для того, чтобы сделать **общедоступный** сервер доступным для списка серверов. Хотя рекомендуется добавлять authkey и к частным серверам. У вас есть ограниченное количество ключей. Один ключ может использоваться на одном сервере одновременно, поэтому вы не можете запустить два сервера одновременно с одним и тем же ключом. Дополнительные ключи можно получить, поддержав проект. Прочитайте [эту статью](https://docs.beammp.com/support/player-faq/) для получения дополнительной информации.
!!! предупреждение
```
НИКОГДА НЕ ДЕЛИТЕСЬ ЭТИМ КЛЮЧОМ И НЕ ПОКАЗЫВАЙТЕ ЕГО НИКОМУ. ОТНОСИТЕСЬ К НЕМУ КАК К ПАРОЛЮ.
```
Для этого шага вам понадобится учетная запись [Discord](https://discord.com). Это необходимо для предотвращения спама.
#### 2.1. Доступ к странице ключей
Войдите в [Keymaster](https://beammp.com/keymaster) через Discord. На домашней странице Keymaster нажмите «Ключи» в левой части экрана:
<figure markdown="">![](../../assets/content/keymaster_homepage.png)</figure>
#### 2.2 Создание ключа
Чтобы создать свой ключ, нажмите на зеленую кнопку «+» в правом верхнем углу.
<figure markdown="">![](../../assets/content/keymaster_new_key.png)</figure>
#### 2.3. Заполнение ключевой информации
Далее заполните поле Имя сервера (это просто имя ключа, а не фактическое имя сервера в списке), затем нажмите «Создать». Пример:
<figure class="image image_resized" style="width:44.84%;" markdown="">![](../../assets/content/keymaster_server_name.png)</figure>
В конечном итоге это должно выглядеть примерно так:
<figure markdown="">![](../../assets/content/keymaster_key_done.png)</figure>
#### 2.4 Копирование ключа
Теперь скопируйте текст в поле «Ключ», в этом примере это `3173a2e-6az0-4542-a3p0-ddqq5ff95558` и сохраните его для следующего шага. Вы можете сделать это, щелкнув по буферу обмена справа от ключа:
<figure markdown="">![](../../assets/content/keymaster_copy_key.png)</figure>
### **3. Установка**
BeamMP-Server доступен для Windows и Linux. Следующие два раздела посвящены Windows и Linux.
#### 3.а. Установка на Windows
Для установки Linux см. следующий шаг.
Пожалуйста, убедитесь, что у вас перенаправлены порты, прежде чем пытаться разместить сервер дома! Без перенаправления портов вы не сможете разместить сервер для общественности!
1. Для запуска сервера убедитесь, что у вас установлены [Visual C++ Redistributables](https://aka.ms/vs/17/release/vc_redist.x64.exe).
2. Загрузите исполняемый файл сервера с [beammp.com](https://www.beammp.com/). У вас должен получиться исполняемый файл, который называется примерно так: `BeamMP-Server.exe`.
3. После загрузки создайте где-нибудь папку и поместите туда `BeamMP-Server.exe`. Это то место, где будет находиться ваш сервер.
4. Запустите сервер один раз, дважды щелкнув по нему. Это сгенерирует все необходимые файлы для вас, как только вы увидите текст, вы можете закрыть его и перейти к следующему шагу. Вы должны увидеть файл `ServerConfig.toml` рядом с вашим `BeamMP-Server.exe`.
5. (необязательно) Для быстрого доступа в будущем вы можете легко создать ярлык на рабочем столе для `BeamMP-Server.exe` используя **[Щелкните правой кнопкой мыши]** &gt; **Отправить на** &gt; **Рабочий стол (создать ярлык).**
Теперь перейдите к шагу [4. Конфигурация](#4-configuration).
#### 3.б. Установка на Linux
##### Использование нашей сборки (рекомендуется)
Этот шаг будет работать на всех дистрибутивах, для которых мы предоставляем [здесь](https://github.com/BeamMP/BeamMP-Server/releases/latest) файлы. Если у вас другой дистрибутив или архитектура, обратитесь к шагу «Сборка из исходного кода» ниже.
1. Убедитесь, что у вас установлены зависимости, перечисленные [здесь](https://github.com/BeamMP/BeamMP-Server#runtime-dependencies).
2. Перейдите на сайт [beammp.com](https://beammp.com/) и нажмите кнопку «Загрузить сервер», вы будете перенаправлены на страницу релиза сервера на GitHub.
3. Загрузите правильную версию для вашего дистрибутива. Для простоты с этого момента она будет называться `BeamMP-Server-xxx`, где `xxx` обозначает версию для используемого вами дистрибутива.
4. После загрузки вы должны увидеть один файл с именем `BeamMP-Server-xxx`, среди прочих, которые вы можете пока проигнорировать. Создайте где-нибудь папку и поместите туда `BeamMP-Server-xxx`. Это то место, где будет находиться ваш сервер.
5. Откройте терминал, перейдите в папку, в которую вы поместили `BeamMP-Server-xxx`, и выполните `chmod +x BeamMP-Server-xxx`. Это гарантирует, что у вас есть разрешения на его запуск.
6. Запустите сервер один раз, запустив его с помощью `./BeamMP-Server-xxx`. Это сгенерирует все необходимые файлы для вас, как только вы увидите текст, вы можете закрыть его и перейти к следующему шагу. Вы должны увидеть файл `ServerConfig.toml` рядом с вашим `BeamMP-Server-xxx`.
7. (необязательно) Настоятельно рекомендуется настроить пользователя с именем `beammpserver` (или похожим), поскольку мы НЕ рекомендуем запускать сервер как root, sudo или с вашей личной учетной записью пользователя. Затем вам следует предпринять шаги, чтобы убедиться, что вы запускаете сервер только как этот пользователь.
Теперь перейдите к шагу «4. Конфигурация».
##### Сборка из источника
Другие дистрибутивы в дополнение к тем, которые уже имеют [здесь](https://github.com/BeamMP/BeamMP-Server/releases/latest) двоичный файл, вероятно, тоже будут работать, но официально не поддерживаются. Если вы хотите собрать его самостоятельно, вы можете сделать это, загрузив исходный код на нашем [GitHub](https://github.com/BeamMP/BeamMP-Server), руководство можно найти [здесь](https://github.com/BeamMP/BeamMP-Server#build-instructions).
В конце обязательно запустите свой сервер один раз с помощью `./BeamMP-Server`, а затем переходите к следующему шагу.
### **4. Конфигурация**
Теперь, когда вы запустили сервер один раз, он должен был создать некоторые файлы и, вероятно, выдать одну или две ошибки. Это потому, что мы еще не закончили. В вашей папке должны быть эти файлы:
<figure markdown="">![](../../assets/content/after-running-once.png)</figure>
Они называются «ServerConfig.toml», «Server.log» и «BeamMP-Server.exe»! (В зависимости от ваших настроек вы можете не увидеть расширения [.toml] [.log] [.exe])
Откройте `ServerConfig.toml` с помощью текстового редактора, например `Notepad`. Это можно сделать с помощью [Правый клик] → «Открыть с помощью…» и выбора текстового редактора.
Вот пример конфигурации:
```TOML
[General]
Port = 30814
AuthKey = "auth-key"
AllowGuests = false
LogChat = false
Debug = false
IP = "::"
Private = true
InformationPacket = true
Name = "Test Server"
Tags = "Freeroam,Modded,Racing,Police"
MaxCars = 2
MaxPlayers = 10
Map = "/levels/ks_nord/info.json"
Description = "Total Random Beam MP Server"
ResourceFolder = "Resources"
```
!!! информация
```
Это ваш файл конфигурации. Он использует формат TOML. Дополнительную информацию об этом файле и переменных см. в разделе [Обслуживание сервера](server-maintenance.md).
Ваш сервер **НЕ** будет отображаться в списке серверов, пока установлено значение `Private = true`. _Если_ вы хотите, чтобы он отображался в списке, установите значение **`Private = false`**.
```
Пока что нас интересует только поле `AuthKey`. В кавычки `"` нужно вставить свой AuthKey, скопированный на первом шаге.
Для нашего примера ключ должен выглядеть следующим образом:
```TOML
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'
```
Присвойте своему серверу имя в поле `Name`. Вы можете форматировать его с помощью цветов и других средств; подробности см. в [этом разделе о настройке имени](server-maintenance.md#customize-the-look-of-your-server-name) на странице обслуживания сервера.
Если вы выбрали другой **порт**, отличный от **30814**, обязательно замените его здесь в разделе `Port`.
### **5. Проверка**
Теперь снова запустите сервер и посмотрите, выдает ли он еще сообщения `[ERROR]` или `[WARN]`. Теперь сервер должен оставаться открытым. В следующих шагах (6.) ниже вы можете узнать, как присоединиться к серверу.
---
#### 5.1 Как добавить моды на свой сервер
Моды транспортных средств и моды карт устанавливаются по-разному, но оба требуют, чтобы вы поместили их в папку вашего сервера (`Resources/Client`). Просто перетащите любой мод, который вы хотите добавить, в эту папку.
!!! предупреждение
```
Если вы получили сообщение «Готово» или «Начало» при попытке присоединиться к серверу после добавления модов, скорее всего, вы добавили на сервер несовместимый или сломанный мод.
Несовместимость модов может также возникнуть между 2 или более модами. Если у вас установлены клиентские моды, проверьте [это руководство](../../FAQ/How-to-deactivate-mods.md) об удалении модов из вашей игры.
```
#### 5.2 Общие моды
Если вы хотите добавить только модифицированные транспортные средства, вы можете поместить zip-файл мода в папку `Resources/Client`. Они будут автоматически загружены любым, кто присоединится к вашему серверу.
#### 5.3 Карты
Все стандартные карты (карты, которые не являются модами) работают сразу «из коробки» и не требуют установки. Вам нужно лишь изменить параметр `Map` в файле `ServerConfig.toml` на любое из [этих](server-maintenance.md#all-vanilla-maps-names). Для любых других, модифицированных карт, сделайте следующее:
1. Поместите `.zip`-файл вашей карты в папку вашего сервера (`Resources/Client`).
2. Далее, загляните в zip-файл карты (не извлекайте его) и откройте папку `levels`. В этой папке должна быть просто еще одна папка с названием карты, например, «myawesomedriftmap2021». Обязательно скопируйте или запомните это название *точно так, как оно написано в названии этой папки.*
3. Откройте `ServerConfig.toml`. В настройках `Map` вы должны увидеть `/levels/MAPNAME/info.json`, где `MAPNAME`, скорее всего, что-то вроде `gridmap_v2`. Теперь вам нужно заменить `MAPNAME` на имя папки из последнего шага, в том примере это было `myawesomedriftmap2021`. В итоге это должно выглядеть так (для этого примера) и ***должно*** иметь `/info.json` в конце.
```TOML
Map = '/levels/myawesomedriftmap2021/info.json'
```
Теперь, когда кто-то присоединится к вашему серверу, он должен автоматически загрузить карту и работать так, как и ожидалось.
**Если это НЕ работает**, установите карту в одиночную игру BeamNG.drive, запустите ее и войдите в карту. Затем откройте консоль, нажав клавишу `~` (*тильда*) (если у вас не американская раскладка клавиатуры, посмотрите на действие **Toggle System Console** в меню **Options &gt; Controls &gt; Bindings** в разделе **General Debug**), и запустите `print(getMissionFilename())`. Это должно показать вам имя для использования.
Вот и все! Ваша модифицированная карта теперь должна быть доступна для присоединения!
### **6. Как присоединиться к вашему серверу**
Как вы и другие игроки можете присоединиться к вашему серверу.
#### 6.a. Присоединение к собственному серверу (как частному, так и публичному)
Если ваш сервер размещен на том же ПК, на котором работает игра, вы должны присоединиться к серверу с помощью прямого подключения, для этого нажмите **вкладку Direct Connect** слева от списка серверов. Оставьте там информацию по умолчанию (должно быть 127.0.0.1 и соответствующий порт), затем нажмите Connect.
Если ваш сервер размещен на другом ПК в вашей локальной сети, вам необходимо найти локальный IP-адрес этой машины и напрямую подключиться, используя этот локальный IP-адрес.
Если ваш сервер размещен за пределами вашего дома (например, VPS), вам необходимо найти [публичный IP-адрес](https://whatismyipaddress.com/) этой машины и подключиться напрямую через него.
#### 6.б. Присоединение других людей к вашему приватному серверу
Вам необходимо предоставить другим пользователям публичный IP-адрес вашего сервера. Однако будьте осторожны, сообщая свой публичный IP-адрес незнакомцам! Чтобы присоединиться к вашему частному серверу, игроки должны перейти на **вкладку Direct Connect** в BeamMP, затем ввести свой IP и порт.
#### 6.c. Присоединение других людей к вашему публичному серверу
Чтобы присоединиться к вашему публичному серверу, они могут просто перейти к списку серверов, ввести имя сервера и нажать «подключиться». Если вы не уверены в имени своего сервера, это будет имя, которое вы указали в `ServerConfig.toml`. Убедитесь, что фильтры поиска отключены, а Карта установлена на «Любая», если вы не можете ее найти. Вы также можете проверить веб-сайт [Keymaster](https://beammp.com/keymaster) на предмет IP-адреса сервера.
Если вы или ваши друзья столкнулись с ошибкой «Сбой подключения!», проверьте окно запуска на наличие кодов вроде 10060, 10061, 10030. Это означает, что у вас либо есть CGNAT IPv4, либо вы сделали что-то неправильно на шаге **1 Переадресация портов** или **1.1. Межсетевой экран**. Чтобы проверить, есть ли у вас CGNAT IPv4, найдите WAN IP-адрес на интерфейсе маршрутизатора. Сравните его с вашим [публичным IP-адресом](https://www.whatsmyip.org/). Если они одинаковы, вы не находитесь за CGNAT. Поддержка IPv6 пока **НЕ** реализована.
### **7. Как проверить подключение вашего сервера BeamMP**
Введите публичный IPv4-адрес и порт сервера ниже, затем нажмите «CheckBeamMP».
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP-адрес:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">Порт:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
!!! предупреждение «Я хочу использовать VPN, например RadminVPN, Hamachi или аналогичный».
```
BeamMP не поддерживает эти VPN, так как они часто вызывают проблемы. Одна из этих проблем — непереадресация трафика UDP. Чтобы решить эту проблему, обратитесь к разделу 1.
!!! вопрос «Но почему это работало в прошлом?»
Это происходит из-за того, что разработчики этих приложений обновляют свое программное обеспечение и вносят изменения, которые BeamMP не контролирует.
Разработчики этих приложений должны обеспечить поддержку конкретных вариантов использования, таких как BeamMP-Server.
```
## Все еще сталкиваетесь с проблемами?
Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+25
View File
@@ -0,0 +1,25 @@
# 问题
启动器没有连接到游戏。这个快速指南解释了如何手动更改启动器端口。
# 手动修改端口
1. 启动 BeamNG
2. 在主菜单, 打开设置, 然后找到 “Multiplayer”
3. 在 “multiplayer” 设置, 启用 `显示高级选项`
4. 向下滚动
5. 在`启动端口号`中,将端口号更改为其他内容,例如4567
6. 关闭 BeamNG
7. 右键单击BeamMP-launcher快捷方式,并在上下文菜单中选择`“Open file location”`
8. 用文本编辑器打开`launcher.cfg`文件
9. 将`“port”:4444`的编号更改为与之前在游戏内选项中使用的相同,在本例中为4567
10. 保存设置并关闭文本编辑器
11. 启动 BeamMP-launcher
如果仍然没有连接,用另一个端口再试一次。在~2000到65535之间的任何数字都是有效的端口
## 还面临问题吗?
在我们的[Discord服务器](https://discord.gg/BeamMP)上创建一个支持票。
标签: Launcher, Connection Failed, Port Number
+42
View File
@@ -0,0 +1,42 @@
## 为什么我需要停用我的模组
在BeamMP中,您决定连接的服务器提供了必要的模块。这些会在连接时被下载并自动启用。安装本地模组并启用通常会导致BeamMP不能正常工作,即使您除了BeamMP之外只有一个额外的模组。
!!! 警告
```
移除你安装在BeamNG.Drive\content\或子文件夹的任何模组。这个位置不是用来安装mod的,可能会导致位于同一目录下的“DO_NOT_INSTALL_MODS_HERE.txt”文件中所述的问题。
!!! 引用“DO_NOT_INSTALL_MODS_HERE.txt”
不要复制mod到这个文件夹:它会导致损坏的mod,更新的安装速度变慢,损坏的mod管理器,损坏的安全模式和其他。
```
## 我如何停用/删除我的模组
在使用BeamMP时,有3个选项可以解决可能出现的问题。
### 1. 禁用模组
在加入任何服务器之前,请确保除了启用“multiplayerbeammp”之外没有其他mod。如果游戏死机或者你仍然有问题,请参考下一个选项
### 2. 创建一个新的用户文件夹
打开BeamNG.Drive的用户文件夹,并将`current`文件夹重命名为例如`current_old`。在重命名之前记得关闭BeamNG。![image](../../assets/content/new-userfolder.png)
### 3. 从内容文件夹中删除模组。
访问BeamNG.Drive\content\文件夹并删除文件夹中的任何模组,打开安装位置的BeamNG.Drive。右键单击`content`文件夹并删除它。继续通过Steam或Epic Games验证游戏文件。这将再次下载文件。
完成后,通过BeamMP- launcher启动BeamNG,您应该将“multiplayerbeammp”作为模组管理器中唯一启用的mod,然后点击主菜单上的按钮进入BeamMP。如果你在加入mod服务器时仍然有问题,他们可能提供了损坏/未更新的mod。
### 4. 清理BeamMP-Launcher缓存
要从BeamMP目录中清除缓存的模组,请转到BeamMP- launcher的安装位置。默认情况下,路径为“C:\Users\AppData\BeamMP-Launcher”。在那里,你会发现一个“Resources”文件夹。删除这个文件夹来删除所有缓存的mod。如果您需要更多磁盘空间或想要删除过时的BeamNG模组,这将非常有用。
!!! 问题 "我的设置和配置文件都不见了! 我怎样才能恢复呢?"
```
如果你重命名了用户文件夹,你就会让游戏创建一个新的、干净的用户文件夹。你可以从你重命名的文件夹中复制“settings”和“vehicles”文件夹。‘ current_old ’)到它创建的新文件夹。
确保BeamNG已关闭,并替换要复制文件夹到的位置中的所有要素。现在,您应该就会有与以前一样的所有配置和设置。
```
+52
View File
@@ -0,0 +1,52 @@
# 如何在Windows Defender防火墙和防病毒软件中创建白名单?
!!! info
```
在修改防火墙之前,请确保将windows网络设置中的网络设置为专用(假设您在私有网络中)。
!! 免责声明:"
**防火墙/防御器关闭具有风险**。
通过创建排除条款,您了解允许在PC上运行程序并向公众开放家庭网络端口的风险,从而使BeamMP对可能发生在您或您的家庭中的任何和所有损害负责的权利无效。
我们对任何外部链接服务或网站上的任何内容不承担任何责任。
```
## 为 BeamMP-Launcher 添加 Windows Defender 防火墙例外规则
1. 打开带有高级设置的`Windows Defender防火墙。`
2. 在窗口中,单击`入站`以打开入站规则选项卡。
3. 点击 `新建规则` 在右上方创建一个新的规则。
4. 选择`程序`以创建特定于程序的规则。
5. 请输入 `BeamMP-Launcher.exe` 的完整限定路径。<br>默认路径为 `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe`(请勿包含引号)。
6. 确保允许连接
7. 给排除项起一个名字(例如:“BeamMP-Launcher”)并保存它。
8. 重启电脑
## 1.1 为 BeamMP-Launcher 添加 Windows Defender 防火墙例外规则
1. 打开 `Windows Defender高级防火墙设置`.
2. 在窗口中,点击 `入站` 以打开入站规则选项卡。
3. 在右上角点击 `新建规则` 以创建一条新的规则。
4. 选择 `端口` 以创建针对特定程序的规则。
5. 输入与 ServerConfig.toml 中配置的相同的端口号。
6. 请输入 `BeamMP-Server.exe` 的完整限定路径。<br>该文件位于你下载后自行放置的位置。
7. 确保允许连接
8. 为该排除规则命名(例如 “BeamMP-Server”),然后保存规则。
9. 重启电脑
## 2. BeamMP-Launcher 与 BeamMP-Server 的 Windows Defender 病毒防护排除设置
1. 打开 `Windows 安全中心` 应用.
2. 单击第一个项目`病毒和威胁防护`
3. 单击“病毒和威胁防护设置”下方的`管理设置`
4. 向下滚动以导航到`排除项`选项卡。
5. 在那里,单击“添加排除项”并选择`进程`
6. 在字段中输入 `BeamMP-Launcher.exe``BeamMP-Server.exe`,然后保存。
7. 重启电脑。
## 还有问题吗?
在[论坛](https://forum.beammp.com)或我们的[Discord服务器](https://discord.gg/beammp) `#support`频道中打开一个频道。
+45
View File
@@ -0,0 +1,45 @@
如何检查CGNAT
## 问题
所有防火墙规则和端口转发规则设置正确,但没有人可以加入您的家庭托管服务器?
如果您有连接问题,并且您正在使用托管服务,请联系他们寻求帮助。如果您想使用VPS或无法在家中托管服务器,请查看我们的[合作托管服务列表](../../server/create-a-server/#partnered-hosting-services-paid)(服务器设置文档)。
# CGNAT是什么?
有关CGNAT是什么以及在尝试在家中托管服务器时为什么会出现问题的详细解释,请查看[这个页面](https://en.wikipedia.org/wiki/Carrier-grade_NAT)。
# 怎么检查CGNAT?
## 方法 1:
打开命令提示符,运行`tracert -4 beammp.com`。这将输出一系列网络跳数。等待操作完成(可能需要30跳)。检查路由器/调制解调器/网关IP后的前几个IP地址。如果有多个IP地址在`100.64.x.x``100.127.x。X ``10.xx.xx。xx`出现在第一跳之后,您很可能在CGNAT后面。
!!! 注意
```
第一跳将是你的路由器/调制解调器/网关,不同的设备不同。
本地网络的官方范围如下:‘ ’ 10.0.0。Xxx ' ' - ' ' 192.168.xxx. Xxx。Xxx ' ' - ' ' ' 172.16.xxx.xxx '
```
## 方法 2:
在路由器的接口上查找WAN IP。将其与发布在例如https://whatsmyip.org上的IP进行比较。如果它们不一样,你就落后于CGNAT。
## 方法 3/解决方案:
请致电互联网服务提供商寻求帮助。根据您的ISP,他们可能不提供专用的*动态* IP地址。请记住,静态IP不是必需的。
!!! 警告
```
互联网服务提供商可能只提供专用IP地址作为**付费选项**。
请检查我们的合作托管服务的价格,因为他们可能比这个费用便宜!
```
非CGNAT网络的示例:
![图像](https://github.com/user-attachments/assets/fee21a50-cbb0-4322-9c26-d9f04f88ae37)
标签: Server, 10060 10061, CGNAT, Connection Failed, Port Forward, Firewall
+42
View File
@@ -0,0 +1,42 @@
## 为什么我需要停用我的模组
在BeamMP中,您决定连接的服务器提供了必要的模块。这些会在连接时被下载并自动启用。安装本地模组并启用通常会导致BeamMP不能正常工作,即使您除了BeamMP之外只有一个额外的模组。
!!! 警告
```
移除你安装在BeamNG.Drive\content\或子文件夹的任何模组。这个位置不是用来安装mod的,可能会导致位于同一目录下的“DO_NOT_INSTALL_MODS_HERE.txt”文件中所述的问题。
!!! 引用“DO_NOT_INSTALL_MODS_HERE.txt”
不要复制mod到这个文件夹:它会导致损坏的mod,更新的安装速度变慢,损坏的mod管理器,损坏的安全模式和其他。
```
## 我如何停用/删除我的模组
在使用BeamMP时,有3个选项可以解决可能出现的问题。
### 1. 禁用模组
在加入任何服务器之前,请确保除了启用“multiplayerbeammp”之外没有其他mod。如果游戏死机或者你仍然有问题,请参考下一个选项
### 2. 创建一个新的用户文件夹
打开BeamNG.Drive的用户文件夹,并将`current`文件夹重命名为例如`current_old`。在重命名之前记得关闭BeamNG。![image](../../assets/content/new-userfolder.png)
### 3. 从内容文件夹中删除模组。
访问BeamNG.Drive\content\文件夹并删除文件夹中的任何模组,打开安装位置的BeamNG.Drive。右键单击`content`文件夹并删除它。继续通过Steam或Epic Games验证游戏文件。这将再次下载文件。
完成后,通过BeamMP- launcher启动BeamNG,您应该将“multiplayerbeammp”作为模组管理器中唯一启用的mod,然后点击主菜单上的按钮进入BeamMP。如果你在加入mod服务器时仍然有问题,他们可能提供了损坏/未更新的mod。
### 4. 清理BeamMP-Launcher缓存
要从BeamMP目录中清除缓存的模组,请转到BeamMP- launcher的安装位置。默认情况下,路径为“C:\Users\AppData\BeamMP-Launcher”。在那里,你会发现一个“Resources”文件夹。删除这个文件夹来删除所有缓存的mod。如果您需要更多磁盘空间或想要删除过时的BeamNG模组,这将非常有用。
!!! 问题 "我的设置和配置文件都不见了! 我怎样才能恢复呢?"
```
如果你重命名了用户文件夹,你就会让游戏创建一个新的、干净的用户文件夹。你可以从你重命名的文件夹中复制“settings”和“vehicles”文件夹。‘ current_old ’)到它创建的新文件夹。
确保BeamNG已关闭,并替换要复制文件夹到的位置中的所有要素。现在,您应该就会有与以前一样的所有配置和设置。
```
+20
View File
@@ -0,0 +1,20 @@
# 问题
启动器无法更新或显示空白屏幕?这个快速指南解释了如何手动更新启动器。
!!! 注意
```
请确保您已通过官网(https://beammp.com)提供的安装程序完成BeamMP的安装及运行,然后再继续后续操作。
```
# 下载并安装一个新的启动器
1. 直接从[GitHub仓库](https://github.com/BeamMP/BeamMP-Launcher/releases/latest/download/BeamMP-Launcher.exe)下载最新版启动器
2. 定位至BeamMP-Launcher.exe所在目录:默认安装路径:`C:\Users\<用户名>\AppData\Roaming\`(将 &lt;用户名&gt; 替换为您的Windows账户名称)<br>自定义安装路径:若您此前将BeamMP安装至其他位置(例如 `D:\BeamMP-Launcher`),请将新启动器文件放入对应文件夹
3. 在BeamMP-Launcher文件夹内,使用新启动器覆盖替换旧版本(如存在)
4. 按常规方式启动BeamMP-Launcher以验证运行状态
## 还面临问题?
请于我们的[Discord服务器](https://discord.gg/BeamMP)创建技术支持工单,标签标注:Launcher, download
+64
View File
@@ -0,0 +1,64 @@
# 常见问题解答
常见问题列表。
---
## **客户端**
---
### **如何安装 BeamMP**
关于如何在Windows上安装BeamMP的完整指南,您可以在[这里](https://docs.beammp.com/game/getting-started/)找到它。
---
### **BeamMP可以运行在盗版或者修改版的BeamNG吗?**
BeamMP 无法在盗版或旧版本的 BeamNG.drive 上运行。包括但不限于第三方插件在内的修改可能会干扰 BeamMP 的正常运行(请参阅[如何清理插件](https://github.com/Protogen187/Docs/blob/main/docs/en/FAQ/Clearing-mods.md))。<br>BeamMP 支持团队无法针对盗版、旧版本或其他经过修改的 BeamNG.drive 所产生的问题提供技术支持。
---
### **BeamMP 可以在 Linux 上运行吗?**
客户端在Linux上不被官方支持。但是,您可以查看我们的[指南来了解如何在Linux上使用BeamMP](../../game/getting-started.md#2b-linux)。
---
### **为什么启动器被我的杀毒软件或Windows Defender标记**
由于 BeamMP 需要与网络进行交互及其他因素,部分杀毒软件可能会将其标记为威胁。但请放心,所有代码中均不含任何病毒。启动器、服务器以及 Lua 客户端的源代码均可在我们的 [GitHub](https://github.com/BeamMP) 页面上找到。
---
### **我的游戏性能很差,我该怎么办?**
我们正在努力使多人游戏体验尽可能稳定。如果您已经降低了图形设置,但性能仍然很差,请考虑在玩家较少的服务器上进行游戏。当你和很多人一起玩游戏时,游戏主要是CPU受限的,所以旧的CPU(甚至是四核)在多人的情况下会受到影响。(一般经验法则:每个CPU线程1辆车)
---
## **其他**
---
### **我在哪里可以找到代码?**
所有源代码都可以在我们的[GitHub](https://github.com/BeamMP)上找到。在进行任何更改之前,请记住代码受我们的[使用条款](https://forum.beammp.com/t/terms-of-use-v1-0/43)和许可的约束:
代码 | 许可证
--- | :-:
服务器 | [许可证](https://github.com/BeamMP/BeamMP-Server/blob/master/LICENSE)
启动器 | [许可证](https://github.com/BeamMP/BeamMP-Launcher/blob/master/LICENSE)
客户端 Lua | [许可证](https://github.com/BeamMP/BeamMP/blob/development/LICENSE)
---
### **我发现了错误或漏洞,我该怎么办?**
如果问题与代码相关,并且您知道如何使用Github,请在[ Github ](https://github.com/BeamMP)上的相应存储库中打开一个新的“issue”。我们使用基于问题的工作流程,所以即使你已经修复了bug,也要考虑打开一个新的“Issue”,然后打开一个包含问题解决方案的“Pull Request”。更多关于贡献的信息可以在[中找到](https://github.com/BeamMP/BeamMP/blob/development/CONTRIBUTING.md)。
如果您没有GitHub帐户,或者您不知道如何使用GitHub,或者您有任何其他问题,您可以通过以下方式与我们联系:
- 如果不是敏感内容,您可以在我们的[BeamMP 论坛](https://forum.beammp.com)上创建帖子,或者您可以在我们[的官方 Discord](https://discord.gg/beammp)上报告此问题。
- 如果信息敏感,您可以直接向我们的[Discord](https://discord.gg/beammp)上的工作人员报告问题。
+25
View File
@@ -0,0 +1,25 @@
# 2026年3月28日 BeamMP 停机故障常见问题解答(FAQ)
针对 2026 年 3 月 28 日开始且目前仍在持续的BeamMP停机故障的临时常见问题解答(FAQ)。
**最后更新于2026年4月1日**
=== 我需要帮助!我的 BeamMP 启动器无法运行!<br>请尝试重新安装 BeamMP 启动器。具体操作步骤如下:<br><br>1. 访问 [beammp.com](https://beammp.com/)<br>2. 点击 *Download Now(立即下载)*<br>3. 运行安装程序并按照提示进行操作
```
!!! 注意
截至 2026 年 4 月 1 日,Windows Defender SmartScreen 会将该 MSI 安装程序识别为“未知应用”。
若要跳过此警告,请点击 *更多信息*,然后点击 *仍要运行*
```
=== 我需要帮助!我的授权密钥 (authkey) 失效了!<br><br>截至 2026 年 4 月 1 日,Keymaster 和认证系统处于离线状态。这意味着您的 authkeys 将无法正常工作。若要解决此问题,请按照以下步骤操作:<br><br>1. 打开您的 ``ServerConfig.toml`` 文件,或任何存放服务器配置的地方。<br>2. 将 ``Private`` 设置为 ``true``。设置后应如下所示:``Private = true``。<br>3. 这应该能解决 authkey 的失效问题。
```
!!! 注意
截至 2026 年 4 月 1 日,BeamMP 的认证系统处于离线状态。目前仅支持游客账号(Guest accounts)登录。
请确保您的服务器已开启游客访问权限。
```
+22
View File
@@ -0,0 +1,22 @@
# 面向玩家的疑难解答
## 我如何链接我的Discord帐户?
将你的 Discord 账号与 BeamMP 账号关联是 BeamMP 的一项新功能。<br>要进行此操作,请前往你的 [论坛账户偏好设置](https://forum.beammp.com/my/preferences/account),在 “关联账户(Associated Accounts)” 下连接你的 Discord 账号。(只有当论坛的双重验证(2FA)被禁用时,此选项才会显示。)
## 我如何获得抢先体验资格?
提前体验权限(包含紫色名牌及其他福利)可通过以下方式获取:在[Patreon](https://patreon.com/BeamMP)平台购买相应套餐、进行捐赠,或助力我们的Discord服务器。
## 我已订阅Patreon会员,如何领取专属福利?
请确保您完成以下操作以自动获得您的福利:
1. 在 [Patreon](https://www.patreon.com/settings/apps/discord) 上关联你的 Discord 账号,以在 Discord 服务器中获得相应的角色和访问权限。
2. 请确保您在Patreon上使用的电子邮件地址与您在[论坛](https://forum.beammp.com/)上使用的BeamMP帐户的电子邮件地址相同。
请耐心等待,系统同步可能需要几个小时,有时长达12个小时。如果您在完成上述步骤12小时后仍未收到专属福利,请联系BeamMP支持。
## 我有更多的问题!
如果您的提问或问题与游戏本体或游玩有关,请参阅[游戏常见问题解答](game-faq.md)。如果您的问题与运行服务器有关,请参阅[服务器常见问题解答](server-faq.md)。否则,请查看[论坛](https://forum.beammp.com/c/faq/35),在那里社区可以提出问题并获得答案。
+89
View File
@@ -0,0 +1,89 @@
# 常见问题和已知问题
常见问题和已知bug列表。
---
## **服务器**
---
### **我怎么设置自己的服务器**
设置您自己的服务器的所有信息可以在[中找到](https://docs.beammp.com/server/create-a-server/)。
---
### **服务器端兼容LINUX吗?**
我们在这里提供了许多Linux发行版的二进制文件[。如果您的操作系统/发行版没有二进制文件,您可以通过在](https://github.com/BeamMP/BeamMP-Server/releases/latest)[GitHub](https://github.com/BeamMP/BeamMP-Server)上下载源代码来自己编译它,教程可以在中找到[](https://github.com/BeamMP/BeamMP-Server#build-instructions)
---
### **运行BeamMP服务器的最低系统要求是什么?**
- 内存: 50+ MiB可用(不计算操作系统开销)
- CPU: &gt;1GHz, 最好是多核
- 操作系统: Windows、Linux(理论上兼容所有POSIX系统)
- GPU: 不需要
- 硬盘:10 MiB + 模组/插件
- 带宽:上传5 ~ 10m /s
---
## **局域网外的玩家无法加入我的自托管服务器**
请查阅[此处](https://docs.beammp.com/server/port-forwarding/)提供的端口转发指南,下文为其关键步骤摘要。若其他玩家通过BeamMP启动器连接您的服务器时出现错误代码10060、10061或10038,请按以下流程排查:
- 转发端口30814(或在ServerConfig.toml中配置的其他端口),需同时开放TCP与UDP协议。
- 请在Windows防火墙中为BeamMP放行入站与出站连接,直接关闭防火墙通常无法解决问题。
- 确认你现在没有在使用VPN (这可能是问题的原因).
- 确保服务器确实在运行,没有任何错误或警告。
您可以在服务器运行时使用CheckBeamMP检查您是否成功地进行了端口转发。
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP地址:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">端口:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
注意:
- 一些互联网提供商不为您的连接(CGNAT)提供专用的IPv4地址,因此端口转发可能不成功,尽管它在路由器中是可以的。
- 如果你使用的是移动(4G/5G)互联网连接,端口转发是不可能的。
---
### **我可以在服务器列表中看到我的自托管服务器,但我不能自己加入它**
若服务器与游戏运行于同一台设备,您需通过在直接连接中输入IP地址 127.0.0.1 和服务器端口来加入。若要通过服务器列表加入自托管服务器,您的路由器需支持NAT环回功能,但多数家用路由器未提供此功能。
---
## **其他**
---
### **我在哪里可以找到源码?**
所有源代码都可以在我们的[GitHub](https://github.com/BeamMP)上找到。在做任何事情之前,请记住代码受我们的[使用条款](https://forum.beammp.com/t/terms-of-use-v1-0/43)和许可的约束:
代码 | 许可证
--- | :-:
服务器 | [许可证](https://github.com/BeamMP/BeamMP-Server/blob/master/LICENSE)
启动器 | [许可证](https://github.com/BeamMP/BeamMP-Launcher/blob/master/README.md)
客户端 Lua | [许可证](https://github.com/BeamMP/BeamMP/blob/development/LICENSE.md)
---
### **我发现了一个bug或漏洞,我应该怎么做?**
如果问题与代码相关,并且您知道如何使用Github,请在[ Github ](https://github.com/BeamMP)上的适当存储库中创建一个新的“issue”。我们使用基于问题的工作流程,所以即使你已经修复了bug,也可以考虑打开一个新的“Issue”,然后请求一个“Pull Request”来解决你的“问题”。更多关于贡献的信息可以在[中找到](https://github.com/BeamMP/BeamMP/blob/development/CONTRIBUTING.md)。
如果您没有GitHub帐户或者您不知道如何使用GitHub,您可以通过以下方式与我们联系:
- 如果问题不涉及隐私或安全,您可以在我们的[BeamMP论坛](https://forum.beammp.com)发帖反馈,或前往[官方Discord服务器](https://discord.gg/beammp)提交报告。
- 如果信息敏感,您可以直接向我们的[Discord](https://discord.gg/beammp)上的工作人员报告问题。
+25
View File
@@ -0,0 +1,25 @@
# 我怎样才能找到我服务器的IP
## 对于VPS托管服务器
如果您使用的我们的合作托管服务之一的托管服务器,其IP地址将显示在对应服务商的服务器管理界面中。您还可以在[Keymaster](https://keymaster.beammp.com/login)网站上找到服务器的IP。
## 对于家庭托管服务器
对于家庭自托管服务器,请在浏览器中访问[whatsmyip.org](https://whatsmyip.org),该网站将显示互联网访问您时所使用的公网IPv4地址。
注意,127.0.0.1是本地主机地址,如果服务器托管在同一台计算机上,则只能由您自己使用。如果您与家庭托管服务器的连接仍然有问题,请检查[端口转发](https://docs.beammp.com/server/port-forwarding/)以及使用CheckBeamMP
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP地址:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">端口:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
## 怎么检查CGNAT?
请查看[这个页面](https://docs.beammp.com/FAQ/How-to-check-for-CGNAT/),以确定您是否可以在家中托管服务器。
标签: IP, Server, Connection Failed, 10060/10061
+12
View File
@@ -0,0 +1,12 @@
!!! warning "本页面正在建设中!"
```
本站点目前正处于积极开发与维护阶段。
觉得您可以提供帮助?请点击页面右侧的铅笔图标参与编辑!
此操作适用于站内的任何页面。
```
# BeamNG.drive CEF Code 的片段
to-do
+189
View File
@@ -0,0 +1,189 @@
!!! warning "本页面正在建设中!"
```
本站点目前正处于积极开发与维护阶段。
觉得您可以提供帮助?请点击页面右侧的铅笔图标参与编辑!
此操作适用于站内的任何页面。
```
# BeamNG.drive CSS Code 的片段
## 常见变量
=== BeamNG Orange
```
```css
var(--bng-orange) /*Common orange*/
var(--bng-orange-shade1) /*70% opacity*/
var(--bng-orange-shade2) /*40% opacity*/
var(--bng-orange-shade1opaque)
var(--bng-orange-shade2opaque)
```
```
=== Monochrome
```
```css
--- Monochrome
var(--bng-black-8) /*80% opacity (duplicate --bng-black-o8)*/
var(--bng-black-6) /*60% opacity (duplicate --bng-black-o6)*/
var(--bng-black-4) /*40% opacity (duplicate --bng-black-o4)*/
var(--bng-black-2) /*20% opacity (duplicate --bng-black-o2)*/
var(--dark-neutral-grey)
var(--neutral-grey)
var(--light-neutral-grey)
var(--dark-grey)
var(--dark-grey-alpha) /*80% opacity*/
var(--black-1) /*70% opacity*/
var(--black-2) /*40% opacity (duplicate --bng-black-o4)*/
var(--white-1) /*80% opacity*/
var(--white-2) /*40% opacity*/
var(--white-3) /*20% opacity*/
```
```
=== BeamNG 界面颜色调色板
```
=== Orange
```css
var(--bng-orange-50)
var(--bng-orange-100)
var(--bng-orange-200)
var(--bng-orange-300)
var(--bng-orange-b400)
var(--bng-orange-500)
var(--bng-orange-600)
var(--bng-orange-700)
var(--bng-orange-800)
var(--bng-orange-900)
```
=== Cool Gray
```css
var(--bng-cool-gray-50)
var(--bng-cool-gray-100)
var(--bng-cool-gray-200)
var(--bng-cool-gray-300)
var(--bng-cool-gray-400)
var(--bng-cool-gray-500)
var(--bng-cool-gray-600)
var(--bng-cool-gray-700)
var(--bng-cool-gray-800)
var(--bng-cool-gray-900)
```
=== Ter Blue
```css
var(--bng-ter-blue-50)
var(--bng-ter-blue-100)
var(--bng-ter-blue-200)
var(--bng-ter-blue-300)
var(--bng-ter-blue-400)
var(--bng-ter-blue-500)
var(--bng-ter-blue-600)
var(--bng-ter-blue-700)
var(--bng-ter-blue-800)
var(--bng-ter-blue-900)
```
=== Add Blue
```css
var(--bng-add-blue-50)
var(--bng-add-blue-100)
var(--bng-add-blue-200)
var(--bng-add-blue-300)
var(--bng-add-blue-400)
var(--bng-add-blue-500)
var(--bng-add-blue-600)
var(--bng-add-blue-700)
var(--bng-add-blue-800)
var(--bng-add-blue-900)
```
=== Add Green
```css
var(--bng-add-green-50)
var(--bng-add-green-100)
var(--bng-add-green-200)
var(--bng-add-green-300)
var(--bng-add-green-400)
var(--bng-add-green-500)
var(--bng-add-green-600)
var(--bng-add-green-700)
var(--bng-add-green-800)
var(--bng-add-green-900)
```
=== Add Yellow
```css
var(--bng-add-yellow-50)
var(--bng-add-yellow-100)
var(--bng-add-yellow-200)
var(--bng-add-yellow-300)
var(--bng-add-yellow-400)
var(--bng-add-yellow-500)
var(--bng-add-yellow-600)
var(--bng-add-yellow-700)
var(--bng-add-yellow-800)
var(--bng-add-yellow-900)
```
=== Add Peach
```css
var(--bng-add-peach-50)
var(--bng-add-peach-100)
var(--bng-add-peach-200)
var(--bng-add-peach-300)
var(--bng-add-peach-400)
var(--bng-add-peach-500)
var(--bng-add-peach-600)
var(--bng-add-peach-700)
var(--bng-add-peach-800)
var(--bng-add-peach-900)
```
=== Add Red
```css
var(--bng-add-red-50)
var(--bng-add-red-100)
var(--bng-add-red-200)
var(--bng-add-red-300)
var(--bng-add-red-400)
var(--bng-add-red-500)
var(--bng-add-red-600)
var(--bng-add-red-700)
var(--bng-add-red-800)
var(--bng-add-red-900)
```
```
=== 额外颜色预设
```
```css
var(--bng-filter-orange) /*Filter preset to force SVGs to use bng-orange*/
var(--bng-black-o8) /*80% opacity*/
var(--bng-black-o6) /*60% opacity*/
var(--bng-black-o4) /*40% opacity*/
var(--bng-black-o2) /*20% opacity*/
```
```
=== 圆角预设
```
```css
var(--bng-corners-1) /*0.25rem*/
var(--bng-corners-2) /*0.50rem*/
var(--bng-corners-3) /*1.00rem*/
```
```
+21
View File
@@ -0,0 +1,21 @@
!!!警告“此网站正在建设中!”
```
这个网站正在积极建设中。
觉得你能帮忙吗?请用右边的铅笔点击页面!
这也可以在任何页面上完成。
```
# 车祸模拟器 创建车辆
。。。
## 介绍
。。。
## 开始进行
。。。
@@ -0,0 +1,88 @@
!!! warning "本页面正在建设中!"
```
本站点目前正处于积极开发与维护阶段。
觉得您可以提供帮助?请点击页面右侧的铅笔图标参与编辑!
此操作适用于站内的任何页面。
#创建 ImGui 窗口
```
本页将介绍如何创建一个基础的 ImGui 窗口。
## 设置
在开始使用 ImGui 之前,需要进行一些基础设置:
```lua
local im = ui_imgui -- 缩写以避免频繁查找。这有助于性能优化
local imguiExampleWindowOpen = im.BoolPtr(true)
```
`imguiExampleWindowOpen` 将用于决定该示例窗口是否应当进行渲染。
## 窗口渲染
ImGui 窗口及其内容必须在每一个需要显示的帧中重新创建。这意味着,若要使用 ImGui,必须通过某种形式的onUpdate函数来实现。
```lua
local function onUpdate()
if worldReadyState == 2 then
if imguiExampleWindowOpen[0] == true then
imguiExample()
end
end
end
M.onUpdate = onUpdate
```
只要关卡已完全加载,且示例窗口处于应当显示的状态,这段代码就会运行一个函数来创建该示例窗口。
## 窗口内容
如果您是初次编写 ImGui,可以把ImGui看作 HTML 的亲戚:
- `im.SetNextWindowSize(im.ImVec2(x, y), im.Cond_FirstUseEver)` 用于在尚未定义视口尺寸的情况下,对其进行初始化定义。
- `im.Begin()``im.End()`相当于你的 `<body>``</body>`
- `im.Text()` 相当于你的 `<p></p>`
```lua
local buttonPresses = 0
local function imguiExample()
im.SetNextWindowSize(im.ImVec2(366, 100), im.Cond_FirstUseEver) -- 准备窗口尺寸
im.Begin("Hello World, I am a window") -- 创建一个标题为“Hello World, I am a window”的窗口
im.Indent() -- 缩进元素(类似于内边距)
im.Text("Hello World, I am text.") -- 添加一行文本,类似于 <p> 标签
im.SameLine() -- 与 HTML 不同,这会将下一个元素附加到上一个元素的同一行
if im.Button("The Hello World Button") then -- 类似于 <button>。点击时运行 Lua 代码
buttonPresses = buttonPresses + 1
end
if buttonPresses > 0 then
im.Text("The Hello World Button has been pressed " .. buttonPresses .. " times!")
else
im.Text("The Hello World Button has not been pressed.")
end
im.Unindent() -- 结束缩进
im.End() -- 完成“画布”以便进行渲染
end
```
您可以添加以下函数,以便轻松切换窗口的可见性:
```lua
local function toggleExampleImgui()
imguiExampleWindowOpen[0] = not imguiExampleWindowOpen[0]
end
```
## 结果
<figure class="image image_resized" style="width:100%" markdown=""> ![演示游戏内使用的 ImGui 示例代码](../../../../assets/content/imguiExample.png) </figure>
当The Hello World Button按钮被按下时,其下方的计数器将更新,并显示The Hello World Button按钮被按下的次数。
## 下载
本教程几乎完全基于 [StanleyDudek](https://github.com/StanleyDudek) 的 ImGui 示例模组(Mod)。您可以从[此处](../../../../assets/content/imguiExample.zip)下载该示例模组。
@@ -0,0 +1,3 @@
# imgui-windows.md
此页面需要创建。
+3
View File
@@ -0,0 +1,3 @@
# lua-mods.md
此页面需要创建。
+273
View File
@@ -0,0 +1,273 @@
# 图形界面-应用程序 创建
为了制作一个图形界面应用程序,你需要一些AngularJS框架的知识,主要的文档可以在这里找到: [AngularJS docs](https://docs.angularjs.org/guide)
## 文件结构
一个图形界面应用程序需要四个重要的文件才能工作:
- app.js | 包含图形界面应用程序使用的主要代码 [Javascript docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- app.html | 显示应用程序的代码 [Html docs](https://developer.mozilla.org/fr/docs/Web/HTML)
- app.json | 包含图形界面应用程序的信息
- app.png | 显示在应用程序选择器中的图像文件
### 图形界面应用程序 样式
我们建议使用 `<style>` 标签来设置应用的样式, a .css 文件会工作,但您将无法实时看到更改。
## 范例
这个例子来自DanielW,感谢他
ui\modules\apps\ExampleApp\app.html
```html
<div style="width: 100%; height: 100%;" class="bngApp">
<link type="text/css" rel="stylesheet" href="/ui/modules/apps/ExampleApp/app.css" />
<div id="exampleAppContainer">
<span>Gear: <span>{{ gearName }}</span></span>
<div layout="row" layout-align="center center">
<md-input-container flex>
<label>Input</label>
<input ng-model="message" ng-keydown="sendMessage($event)">
</md-input-container>
<md-button md-no-ink class="md-warn" ng-disabled="!message" ng-click="sendMessage()">Send</md-button>
</div>
<span style="display: block">Messages:</span>
<!-- Scroll Area -->
<ul bng-nav-scroll style="margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;">
<!-- Iterate over the messages and display them -->
<li ng-repeat="message in messages track by $index" style="display: flex; align-items: center; height: 35px;">
<span style="padding: 0 0.2em; width: 100%;">{{ message }}</span>
<!-- Button to delete the message, this calls the `deleteMessage` function in `app.js` -->
<md-button md-no-ink class="md-icon-button md-warn" ng-click="deleteMessage($index)">
<md-icon class="material-icons">delete</md-icon>
</md-button>
</li>
</ul>
</div>
</div>
```
在这里, 你可以看到一个 `<span>` 显示车辆挡位的标签, 用于将消息发送给 `sendMessage()`函数和一个重复的`<li>`标签(在Javascript中的`messages`变量上使用<b>ng-repeat</b>
ui\modules\apps\ExampleApp\app.js
```js
angular.module('beamng.apps')
.directive('exampleApp', [function() {
return {
templateUrl: '/ui/modules/apps/ExampleApp/app.html',
replace: true,
restrict: 'EA',
scope: true,
controller: ['$scope', function($scope) {
$scope.gearName = '0'
$scope.message = ''
$scope.messages = []
// Setup the streams we want. For now, we only want the engine information. You can add more, you'll just have to look around to find the different streams
let steamList = ['engineInfo']
StreamsManager.add(steamList)
$scope.$on('destroy', function() {
StreamsManager.remove(steamList)
})
// Do I even need to put this comment here explaining what this function does?
// Well, I have done it for a lot of other things when they weren't needed. I'll leave this one be...
$scope.$on('streamsUpdate', function(event, streams) {
if (!streams.engineInfo) // Early return... You probably noticed that without this useless comment though
return;
// `lua/vehicle/controller/vehicleController.lua:538` (or use console.log)
let gear = streams.engineInfo[5]
// Update the gear name in HTML if needed
if ($scope.gearName !== gear)
$scope.gearName = gear
})
$scope.sendMessage = function(event) {
if (event && event.key !== 'Enter')
return
if ($scope.message == '')
return
// Forward the message to the Lua extension to modify it
bngApi.engineLua('extensions.exampleMod.modifyMessage("' + $scope.message + '")')
$scope.message = ''
}
$scope.deleteMessage = function(idx) {
$scope.messages.splice(idx, 1)
}
// The `modifyMessage` function will call this hook with the modified data
$scope.$on('MessageReady', function(_, modifiedMessage) {
$scope.messages.push(modifiedMessage)
});
}]
}
}])
```
注意<b>$scope{/b0}的用法。这是非常重要的,因为你需要在{b1}$作用域</b>中定义变量和函数,以便能够从<b>ng-*</b>标签中的<b>Html</b>中访问它。所以在这个例子中,在<b>Html</b>中执行`sendMessage()`函数后,它将把它发送到mod的extensions目录中的lua文件中,并在这个lua文件中执行`modifyMessage()`函数。
下面是lua的一个例子:
```lua
local function modifyMessage(message)
message = message .. " [Modified!]"
guihooks.trigger('MessageReady', message)
end
```
^这是lua的一个简化版本,只是为了展示函数
这里主要关注的是<b>基钩子的使用。触发器</b>触发一个用`$scope.$on()`定义的AngularJS事件。正如您在Javascript文件的最底部看到的那样,该事件被命名为MessageReady,并将由<b>guihook执行。用消息有效负载触发</b>函数,然后将被推入`$范围。在<b data-md-type="raw_html">Html</b>文件中使用<b data-md-type="raw_html">ng-repeat</b>来显示li标签中的messages`变量
完整的lua文件就在下面
lua\ge\extensions\exampleMod.lua
```lua
local M = {}
--[[
This is the entry point of our extension, this is what the game loads from our `modScript.lua`.
In the modScript file, you can load more extensions and put them in the same directory as this file.
In this file, we will communicate with the following:
1. Our vehicle extension. That extension tells this extension when to send it data, and we send it. Take a look at `vehicle/extensions/auto/exampleVehicleExtension.lua`
2. Input. Take a look at `core/input/actions/myActions.json`. When the bounded key is pressed, it will call `onActionKeyDown` (a function we export below)
]]
-- Game Function Hooks
--------------------------------------------
local function onExtensionLoaded()
log('D', "onExtensionLoaded", "Called")
end
local function onExtensionUnloaded()
log('D', "onExtensionUnloaded", "Called")
end
-- Custom Functions
--------------------------------------------
local function onActionKeyDown()
log('D', "onActionKeyDown", "Pressed!")
end
local function onVehicleExtensionLoaded(vehID)
log('D', "onVehicleExtensionLoaded", "Sending some data to the vehicle")
local veh = be:getObjectByID(vehID) -- If you don't have the ID, you can also use `be:getPlayerVehicle(0)` to get the current vehicle.
if not veh then return end -- The usual error checking
local data = {
["name"] = "Daniel W"
}
veh:queueLuaCommand("extensions.exampleVehicleExtension.onDataReceived('" .. jsonEncode(data) .. "')")
end
local function modifyMessage(message)
message = message .. " [Modified!]"
guihooks.trigger('MessageReady', message)
end
-- Export Interface
--------------------------------------------
M.onExtensionLoaded = onExtensionLoaded
M.onExtensionUnloaded = onExtensionUnloaded
M.onActionKeyDown = onActionKeyDown
M.onVehicleExtensionLoaded = onVehicleExtensionLoaded
M.modifyMessage = modifyMessage
--[[ Other functions could include:
- onPreRender(dtReal, dtSim, dtRaw)
- onUpdate(dtReal, dtSim, dtRaw)
- onClientPreStartMission(levelPath)
- onClientPostStartMission(levelPath)
To find all of these, search the following in `BeamNG.Drive/lua`: `extensions.hook(`
--]]
return M
```
请注意,返回包含所需函数的M(模块)变量非常重要!例如,如果没有`M。modifyMessage = modifyMessage`行,`bngApi.engineLua(extensions.exampleMod. modifyMessage' + $scope. 'message + ' ') ')`函数将无法找到modifyMessage()函数
ui\modules\apps\ExampleApp\app.css
```css
#exampleAppContainer {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
align-content: center;
}
#exampleAppContainer > * {
margin: 0;
padding: 0;
}
```
ui\modules\apps\ExampleApp\app.json
```json
{
"domElement": "<example-app></example-app>",
"name": "Example App",
"types": [
"ui.apps.categories.debug"
],
"description": "example-app",
"css": {
"left": "0px",
"height": "auto",
"width": "270px",
"min-width": "200px",
"min-height": "90px",
"top": "0px"
},
"author": "Daniel W",
"version": "0.1",
"directive": "exampleApp"
}
```
该指令需要与<b>Javascript</b>文件中的指令相同
# BeamNG为图形界面应用程序提供的Javascript函数
```js
bngApi.engineLua("lua_path.function()")
```
用于运行带或不带参数的lua函数
# BeamNG为图形界面应用程序提供的Lua函数
```lua
guihooks.trigger("EventName", Payload)
```
有效载荷可以是任何类型,但最好将其保留为数组/对象或字符串,以免丢失。
<b>IMPORTANT</b>:有时候,你使用的事件名称可能已经在内部被其他东西使用了,从而导致问题,因此,如果你的应用名为Nickel,那么最好将你的每个Angular事件命名为NKEventName,而不是EventName
+83
View File
@@ -0,0 +1,83 @@
!!! warning "本页面正在建设中!"
```
本站点目前正处于积极开发与维护阶段。
觉得您可以提供帮助?请点击页面右侧的铅笔图标参与编辑!
此操作适用于站内的任何页面。
```
# BeamNG.drive ImGui Code 的片段
## 配置
### 配置 ImGui
```lua
local im = ui_imgui
```
### 配置 Window
```lua
im.SetNextWindowSize(im.ImVec2(366, 100), im.Cond_FirstUseEver)
```
### 创建 window
```lua
im.Begin("Window Title") -- Create window
im.End()
```
## 一般演示
=== 基本格式
```
```lua
im.Text("") -- 普通文本
im.TextWrapped("") -- 自动换行文本
im.TextColored(im.ImVec4(0,1,0,1), "") -- 彩色文本(参数为 R,G,B,A)
im.TextDisabled("") -- 禁用状态样式的文本(预设样式)
im.LabelText("", "") -- 带标签的文本
im.BulletText("") -- 带项目符号(圆点)的文本
im.SeparatorText("") -- 带中间文字的分隔线
im.Separator() -- 分隔线(在添加前可能需要换行)
im.SameLine() -- 将下一个元素水平附加到上一个元素之后
im.NewLine() -- 换行
im.Spacing() -- 微小间距(填充)
im.Indent() -- 缩进
im.Unindent() -- 取消缩进
```
```
=== 输入
```
```lua
im.Button("", im.ImVec2(0,0)) -- 按钮(0 = 自动适应内容大小)
im.SmallButton("") -- 小按钮(适应内容且内边距更小)
im.ArrowButton("", 0) -- 箭头按钮(参数1:字符串实际未被使用?参数2:0=左,1=右,2=上,3=下)
im.InvisibleButton("", im.ImVec2(0,0), ...) -- 不可见按钮(用于 ImGui 光标定位?)
im.Checkbox("", im.BoolPtr(false)) -- 复选框
im.RadioButton1("", im.BoolPtr(false)) -- 单选框 1
im.RadioButton2("", im.IntPtr(), 0) -- 单选框 2(参数3:0 或 1,分别代表禁用或启用状态)
```
```
=== 其他
```
```lua
im.Bullet()
im.ProgressBar(0.5, im.ImVec2(0,0), "") -- 进度条(参数 2:填 0 则使用默认宽度和/或高度)
im.TextUnformatted("", "") -- 非格式化文本(第二个参数似乎会导致游戏崩溃)
```
```
+11
View File
@@ -0,0 +1,11 @@
# 欢迎来到 BeamNG.drive 文档
本文档是非官方的,由BeamMP模组团队和BeamNG社区制作。
## 了解文件结构
...
## 片段
对您可能有用的代码片段可以在这里找到: [Lua Snippets](lua-snippets.md)
+346
View File
@@ -0,0 +1,346 @@
!!! warning "本页面正在建设中!"
```
本站点目前正处于积极开发与维护阶段。
觉得您可以提供帮助?请点击页面右侧的铅笔图标参与编辑!
此操作适用于站内的任何页面。
```
# BeamNG.drive Lua Code 的片段
## 世界
### 绘制标记&amp;车辆检测
在地图上绘制标记是告知用户该处存在某种交互形式的最佳方式之一。
绘制标记相当简单。以下是巴士路线标记绘制方式的一个示例:
```lua
local function createBusMarker(markerName)
local marker = createObject('TSStatic')
marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae")
marker:setPosition(vec3(0, 0, 0))
marker.scale = vec3(1, 1, 1)
marker:setField('rotation', 0, '1 0 0 0')
marker.useInstanceRenderData = true
marker:setField('instanceColor', 0, '1 1 1 0')
marker:setField('collisionType', 0, "Collision Mesh") -- 碰撞类型:碰撞网格
marker:setField('decalType', 0, "Collision Mesh") -- 贴花类型:碰撞网格
marker:setField('playAmbient', 0, "1") -- 播放环境动画
marker:setField('allowPlayerStep', 0, "1") -- 允许玩家踏上
marker:setField('canSave', 0, "0") -- 是否可保存
marker:setField('canSaveDynamicFields', 0, "1") -- 是否可保存动态字段
marker:setField('renderNormals', 0, "0") -- 渲染法线
marker:setField('meshCulling', 0, "0") -- 网格剔除
marker:setField('originSort', 0, "0")
marker:setField('forceDetail', 0, "-1")
marker.canSave = false
marker:registerObject(markerName)
scenetree.MissionGroup:addObject(marker)
return marker
end
-- 随后可以在循环中调用此函数来设置您的标记。
-- 注意:您应该只在初始化设置时执行一次,而不是在每一帧都调用。
if #markers == 0 then
for k,v in pairs(nameMarkers) do
local mk = scenetree.findObject(v)
if mk == nil then
log('I', logTag,'Creating marker '..tostring(v)) -- 正在创建标记...
mk = createBusMarker(v)
ScenarioObjectsGroup:addObject(mk.obj)
end
table.insert(markers, mk)
end
end
```
这是来自 [BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master) 的自定义标记示例:
```lua
local stations = [
{ "location": [ -778.813, 485.973, 23.46 ], "type":"gas" }, -- 燃油站
{ "location": [ 617.164, -192.107, 53.2 ], "type":"ev" }, -- 充电站
]
-- 检查实体是否在区域内
local function IsEntityInsideArea(pos1, pos2, radius)
return pos1:distance(pos2) < radius
end
local onUpdate = function (dt)
for k, spot in pairs(stations) do -- 遍历当前地图上的所有站点
local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])
local topPos = bottomPos + vec3(0,0,2) -- 偏移向量以获得顶部位置(2米高)
local spotInRange = false -- 站点是否在范围内?用于颜色判定
local spotCompatible = false -- 站点是否匹配(燃料类型)?
if activeVeh then -- 如果存在车辆且属于当前玩家(若在多人模式下)
local vehPos = activeVeh:getPosition()
-- 检查车辆是否在站点 1.5 米范围内
spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)
-- 检查燃料类型是否匹配
spotCompatible = activeFuelType == "any" or spot.type == "any" or activeFuelType == spot.type
end
-- 确定站点颜色:如果范围内且匹配,则使用活动颜色,否则使用非活动颜色或默认半透明白色
local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)
-- 绘制圆柱体:底部位置,顶部位置,半径,颜色
debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor)
end
end
```
## 用户界面
### 屏幕右上角弹出的通知
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/c8a87842-b95a-4eca-84dc-93072ecc9158) </figure>
```lua
--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})
guihooks.trigger('toastrMsg', {type = "info", title = "Info Message:", msg = "Info Message Text Here", config = {timeOut = 5000}})
guihooks.trigger('toastrMsg', {type = "warning", title = "Warning Message:", msg = "Warning Message Text Here", config = {timeOut = 5000}})
guihooks.trigger('toastrMsg', {type = "error", title = "Error Message:", msg = "Error Message Text Here", config = {timeOut = 5000}})
```
### 消息通知,默认显示在消息应用的屏幕左上角
这需要安装“消息”或“消息与任务”UI 应用。图标可以在此处找到: `ui\ui-vue\src\assets\fonts\bngIcons\svg这需要安装“消息”或“消息与任务”UI 应用。图标可以在此处找到:
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/6baef813-50cb-43c3-9c59-0de550b014b6) </figure>
```lua
--guihooks.trigger('Message', {msg, ttl, category, icon})
--ui_message(msg, ttl, category, icon)
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check", icon = "check"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check_circle", icon = "check_circle"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "warning", icon = "warning"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "error", icon = "error"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "directions_car", icon = "directions_car"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "star", icon = "star"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "timeline", icon = "timeline"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "save", icon = "save"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "settings", icon = "settings"})
```
### 屏幕中央大尺寸或小尺寸闪烁显示
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/d0cf754f-83f8-4d15-9159-27350da127de) </figure>
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/1df6fc9b-756f-484e-b8d9-5df346dc4c26) </figure>
```lua
--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app
guihooks.trigger('ScenarioFlashMessage', {{"Message", 5.0, 0, true}} )
guihooks.trigger('ScenarioFlashMessage', {{"Message Text Here", 5.0, 0, false}} )
--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires
guihooks.trigger('ScenarioFlashMessage', {{"3", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"2", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"1", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')", true}})
guihooks.trigger('ScenarioFlashMessage', {{"GO!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')", true}})
--另一个声音示例
guihooks.trigger('ScenarioFlashMessage', {{"Teleported!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')", false}})
```
### 屏幕中央中等尺寸持久显示
这需要安装实时竞赛显示UI 应用。
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/6290e018-6b3d-4674-98f2-34282a723258) </figure>
```lua
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- 需要安装 Race Realtime Display UI 应用
guihooks.trigger('ScenarioRealtimeDisplay', {msg = "在此输入消息文本"} )
-- 这些消息会持久显示,可以通过发送空字符串来清除
-- 如果您正在运行实时数据(例如计时器、距离计算等),这是一个非常适合快速更新的接口
guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} )
```
### 确认对话框
确认对话框是一个带有多达两个按钮的简化弹出窗口。
```lua
-- 打开一个包含标题、正文文本和最多两个按钮的确认对话框(ConfirmationDialog
guihooks.trigger("ConfirmationDialogOpen",
"示例标题",
"示例正文文本内容",
"确定",
"", -- 对应的 gelua 代码,此处为空字符串
"取消",
"" -- 对应的 gelua 代码
)
-- 关闭任何具有指定标题的已打开确认对话框
guihooks.trigger("ConfirmationDialogClose", "示例标题")
```
<figure class="image image_resized" style="width:75%" markdown=""> ![Example of a ConfirmationDialog](../../assets/content/ConfirmationDialog.png) </figure>
按钮的两个字段都必须为字符串类型,按钮才会显示。
如果提供了确定按钮,按下 *确定 / 首要操作(OK / Primary action* 键等同于点击“确定”按钮。
如果提供了取消按钮,按下 *菜单(Menu)*键等同于点击取消按钮。
支持HTML,例如可以用来添加图片或图标。
可以同时显示多个,并将按顺序排列显示。
!!! bug
```
如果不提供任何按钮,玩家将无法在不使用控制台的情况下关闭或退出该对话框。
```
!!! bug
```
当 ConfirmationDialog(确认对话框)处于活动状态时,迷你地图UI应用的 SDF 部分仍然保持可见。
可以使用 `#!lua guihooks.trigger('ShowApps', false)` 隐藏 UI 应用,作为一种临时解决方案。
```
<figure class="image image_resized" style="width:75%" markdown=""> ![确认对话框用于挂机踢出系统](../../assets/content/ConfirmationDialog_Example.png) </figure>
### introPopupTutorial
introPopupTutorial 是一个高度可定制的弹出窗口,很大程度上是通过嵌入式 HTML 来定义的。通常的做法是从一个独立的 HTML 文件中进行加载,该文件位于:`/gameplay/tutorials/pages/*/content.html`.
```lua
guihooks.trigger("introPopupTutorial", {
{
content = readFile("/gameplay/tutorials/pages/template/content.html"):gsub("\r\n",""),
flavour = "onlyOk"
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown=""> ![在 BeamNG.drive 中显示的introPopupTutorial代码片段](../../assets/content/introPopupTutorial.png) </figure>
`flavour` 控制哪些按钮会被显示。共有四种类型:
- `withLogbook`
- Buttons: Career Logbook, Okay
- `onlyOk`
- Buttons: Okay
- `onlyLogbook`
- Buttons: Career Logbook
- `noButtons`
- 不提供任何按钮
!!! 警告
```
如果在页面中使用noButtons类型,且页面内容中没有提供额外的 JavaScript 来关闭该弹出窗口,则会导致游戏出现Softlock。在此类型下,多个页面不会合并到同一个弹出窗口中。因此,不建议使用此类型。
```
如果提供了多个页面,或者该Hook被多次触发,这些页面将合并到同一个弹出窗口中。<br>如果在一个 introPopup 处于活动状态时触发该钩子,或者已经触发了另一种不同类型的 introPopup,则它会在当前窗口关闭后,在一个独立的弹出窗口中显示。
### introPopupCareer
introPopupCareer是一种易于使用且开放式Open-ended的弹出窗口,如果需要,它还支持嵌入 HTML 内容。
Flavours控制显示哪些按钮以及默认的图像长宽比。共有四种类型:
- `default`
- Default image aspect ratio: 16x9
- Buttons: Later, Okay
- `welcome`
- Default image aspect ratio: 16x9
- Buttons: Career Logbook, Okay
- `branch-info`
- Default image aspect ratio: 16x9
- Buttons: Career Logbook, Okay
- `garage`
- Buttons: Later, Okay
```lua
guihooks.trigger("introPopupCareer", {
{
title = "Example title",
text = "Example text",
image = "/gameplay/tutorials/pages/template/image.jpg",
ratio = "16x9",
flavour = "default"
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown=""> !在 BeamNG.drive 中显示的introPopupCareer代码片段](../../assets/content/introPopupCareer.png) </figure>
如果提供了多个页面,或者该Hook被多次触发,这些页面将被合并到同一个弹出窗口中。<br>如果在一个introPopup处于活动状态时触发了该钩子,或者已经触发了另一种不同类型的introPopup,那么它将在当前窗口关闭后,通过一个独立的弹出窗口进行显示。
!!! bug
```
背景模糊具有最小高度限制,这会导致内容较少的弹出窗口在其窗口下方出现多余的模糊区域。目前主要有两种解决方法:
* 重复输入 `\n`(换行符)并在结尾添加 `#!html <div />`,直到窗口遮住模糊区域。
* 使用空路径或缺失的 `image` 路径,并调整长宽比(Aspect Ratio),直到窗口遮住模糊区域。
```
### introPopupMission
introPopupMission与 introPopupCareer几乎完全相同,但它需要手动定义按钮,而不是直接为按钮选择预设样式。
按钮样式组合为*bng-button-*`style`。内置的按钮样式包括:
- `main` - 橙色
- `secondary` - 青色
- `attention` - 红色
- `white` - 白色
- `link` - 半透明
- `outline` - 橙色轮廓
```lua
guihooks.trigger('introPopupMission', {
title = "introPopupMission title",
text = "introPopupMission description",
image = "/gameplay/tutorials/pages/template/image.jpg",
ratio = "16x9",
buttons = {
{ default=true, class="main", label="main button", clickLua="" },
{ default=false, class="secondary", label="secondary button", clickLua="" },
{ default=false, class="attention", label="attention button", clickLua="" },
{ default=false, class="white", label="white button", clickLua="" },
{ default=false, class="link", label="link button", clickLua="" },
{ default=false, class="outline", label="outline button", clickLua="" }
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown=""> ![在 BeamNG.drive 中显示的introPopupMission代码片段](../../assets/content/introPopupMission.png) </figure>
如果提供了多个页面,或者该Hook被多次触发,这些页面将合并到同一个弹出窗口中。<br>如果在一个introPopup处于活动状态时触发了该钩子,或者已经触发了另一种不同类型的 introPopup,则它会在当前窗口关闭后,通过一个独立的弹出窗口进行显示。
!!! bug
```
背景模糊具有最小高度限制,这会导致内容较少的弹出窗口在其窗口下方出现多余的模糊区域。目前主要有两种解决方法:
* 重复输入 `\n`(换行符)并在结尾添加 `#!html <div />`,直到窗口拉长并遮住模糊区域。
* 使用空路径或缺失的 `image`(图像)路径,并调整长宽比(Aspect Ratio),直到窗口覆盖住模糊区域。
```
### 对话窗口
todo
+232 -11
View File
@@ -8,17 +8,19 @@
这也可以在任何页面上完成。 这也可以在任何页面上完成。
``` ```
# BeamNG.drive代码片段 # BeamNG.drive 代码片段
## Lua代码片段 ## Lua代码片段
### 绘制标记和车辆检测 ### 世界
#### 绘制标记和车辆检测
在地图中绘制标记可能是向用户表明他们可以在那里进行某种形式的交互的最佳方式之一。 在地图中绘制标记可能是向用户表明他们可以在那里进行某种形式的交互的最佳方式之一。
绘制标记相当容易。以下是如何绘制公交车路线标记的示例: 绘制标记相当容易。以下是如何绘制公交车路线标记的示例:
```Lua ```lua
local function createBusMarker(markerName) local function createBusMarker(markerName)
local marker = createObject('TSStatic') local marker = createObject('TSStatic')
marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae") marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae")
@@ -60,7 +62,7 @@
以下是来自[BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master)的自定义标记示例: 以下是来自[BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master)的自定义标记示例:
```Lua ```lua
local stations = [ local stations = [
{ "location": [ -778.813, 485.973, 23.46 ], "type":"gas" }, { "location": [ -778.813, 485.973, 23.46 ], "type":"gas" },
{ "location": [ 617.164, -192.107, 53.2 ], "type":"ev" }, { "location": [ 617.164, -192.107, 53.2 ], "type":"ev" },
@@ -93,11 +95,11 @@
end end
``` ```
### guihooks示例 ### 用户界面
#### Toast通知,位于屏幕右上角 #### 屏幕右上角弹出的通知
![图像](https://github.com/StanleyDudek/Docs/assets/49531350/c8a87842-b95a-4eca-84dc-93072ecc9158) <figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/c8a87842-b95a-4eca-84dc-93072ecc9158) </figure>
```lua ```lua
--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}}) --guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})
@@ -108,10 +110,13 @@ guihooks.trigger('toastrMsg', {type = "error", title = "Error Message:", msg = "
#### 消息通知,消息应用程序中默认位于屏幕左上角 #### 消息通知,消息应用程序中默认位于屏幕左上角
![图像](https://github.com/StanleyDudek/Docs/assets/49531350/6baef813-50cb-43c3-9c59-0de550b014b6) 这需要'Messages' 或 'Messages &amp; Tasks' UI 插件。图标文件可以在以下路径中找到 `ui\ui-vue\src\assets\fonts\bngIcons\svg这需要'Messages' 或 'Messages &amp; Tasks' UI 插件。图标文件可以在以下路径中找到
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/6baef813-50cb-43c3-9c59-0de550b014b6) </figure>
```lua ```lua
--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app --guihooks.trigger('Message', {msg, ttl, category, icon})
--ui_message(msg, ttl, category, icon)
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"}) guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"}) guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"})
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"}) guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"})
@@ -128,7 +133,9 @@ guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "s
#### 位于中心,大,小型短暂显示 #### 位于中心,大,小型短暂显示
![图像](https://github.com/StanleyDudek/Docs/assets/49531350/d0cf754f-83f8-4d15-9159-27350da127de)![图像](https://github.com/StanleyDudek/Docs/assets/49531350/1df6fc9b-756f-484e-b8d9-5df346dc4c26) <figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/d0cf754f-83f8-4d15-9159-27350da127de) </figure>
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/1df6fc9b-756f-484e-b8d9-5df346dc4c26) </figure>
```lua ```lua
--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app --guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app
@@ -147,7 +154,9 @@ guihooks.trigger('ScenarioFlashMessage', {{"Teleported!", 3.0, "Engine.Audio.pla
#### 位于中心,中型持续显示 #### 位于中心,中型持续显示
![图像](https://github.com/StanleyDudek/Docs/assets/49531350/6290e018-6b3d-4674-98f2-34282a723258) 这需要 **“比赛实时显示 (Race Realtime Display)”** UI 插件。
<figure class="image image_resized" style="width:75%" markdown=""> ![image](https://github.com/StanleyDudek/Docs/assets/49531350/6290e018-6b3d-4674-98f2-34282a723258) </figure>
```lua ```lua
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app --guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app
@@ -157,6 +166,218 @@ guihooks.trigger('ScenarioRealtimeDisplay', {msg = "Message Text Here"} )
guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} ) guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} )
``` ```
#### Confirmation Dialog
ConfirmationDialog是一种简单的弹出窗口,最多支持两个按钮。
```lua
-- -- 打开一个包含标题、正文及最多两个按钮的Confirmation Dialog
guihooks.trigger("ConfirmationDialogOpen",
"Example Title",
"Example Body Text",
"Okay",
"", --gelua. empty string
"Cancel",
"" --gelua
)
-- 关闭任何具有指定标题且处于打开状态的确认对话框
guihooks.trigger("ConfirmationDialogClose", "Example Title")
```
<figure class="image image_resized" style="width:75%" markdown=""> ![ConfirmationDialog示例](../../assets/content/ConfirmationDialog.png) </figure>
按钮的两个字段都必须是字符串,该按钮才能正常显示。
如果提供了Okay按钮,按下 *确定 / 主要动作 (OK / Primary action)*按键的效果等同于点击确定按钮。
如果提供了Cancel按钮,按下*菜单 (Menu)*按键的效果等同于点击取消按钮。
支持HTML格式,例如可以用来添加图像或图标。
可以同时显示多个,并将按顺序依次呈现。
!!! bug
```
不提供任何按钮会导致玩家在不使用控制台的情况下无法退出该对话框。
```
!!! bug
```
**ConfirmationDialog**(确认对话框)处于活动状态时,小地图 (Minimap) UI 插件的 **SDF 部分** 依然保持可见。
可以使用 `#!lua guihooks.trigger('ShowApps', false)` 隐藏 UI 插件,作为一种临时性的补救方案。
```
<figure class="image image_resized" style="width:75%" markdown=""> ![ConfirmationDialog被用于挂机踢出系统的示例](../../assets/content/ConfirmationDialog_Example.png) </figure>
#### introPopupTutorial
introPopupTutorial 是一种高度可定制的弹出窗口,其内容主要由嵌入式 HTML 定义。标准做法是从位于`/gameplay/tutorials/pages/*/content.html`的独立 HTML 文件中进行加载。
```lua
guihooks.trigger("introPopupTutorial", {
{
content = readFile("/gameplay/tutorials/pages/template/content.html"):gsub("\r\n",""),
flavour = "onlyOk"
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown=""> ![在BeamNG.drive中显示的introPopupTutorial代码片段](../../assets/content/introPopupTutorial.png) </figure>
Flavours控制显示的按钮类型。共有四种预设模式:
- `withLogbook`
- Buttons: Career Logbook, Okay
- `onlyOk`
- Buttons: Okay
- `onlyLogbook`
- Buttons: Career Logbook
- `noButtons`
- Provides no buttons
!!! 警告
```
当页面使用noButtons模式时,如果页面内容中未提供用于关闭弹出窗口的额外 JavaScript 代码,则会导致软锁定。在这种模式下,多个页面不会合并到同一个弹出窗口中。因此,不建议使用该模式。
```
如果提供了多个页面,或者该hook被多次触发,这些页面将合并到同一个弹出窗口中。<br>如果在introPopup处于活动状态时触发钩子,或者已经触发了另一种类型的introPopup,则新内容将在现有弹出窗口关闭后,以独立的弹出窗口形式显示。
#### introPopupCareer
introPopupCareer是一种易于使用且具有高度开放性的弹出窗口,如有需要,它还支持嵌入 HTML 内容。
Flavours控制显示的按钮类型以及默认的图像宽高比。共有四种预设模式:
- `default`
- Default image aspect ratio: 16x9
- Buttons: Later, Okay
- `welcome`
- Default image aspect ratio: 16x9
- Buttons: Career Logbook, Okay
- `branch-info`
- Default image aspect ratio: 16x9
- Buttons: Career Logbook, Okay
- `garage`
- Buttons: Later, Okay
```lua
guihooks.trigger("introPopupCareer", {
{
title = "Example title",
text = "Example text",
image = "/gameplay/tutorials/pages/template/image.jpg",
ratio = "16x9",
flavour = "default"
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown=""> !在BeamNG.drive中显示的introPopupCareer代码片段](../../assets/content/introPopupCareer.png) </figure>
如果提供了多个页面,或者该hook被多次触发,这些页面将合并到同一个弹出窗口中。<br>如果在introPopup处于活动状态时触发了hook,或者已经触发了另一种类型的introPopup,则新内容将在当前弹出窗口关闭后,以独立的弹出窗口形式显示。
!!! bug
```
背景模糊具有最小高度限制,这会导致内容较短的弹出窗口下方出现多余的模糊区域。目前主要有两种规避方案:
* 重复输入 `\n` 并以 `#!html <div />` 结尾,直到窗口完全覆盖模糊区域。
* 使用空路径或缺失的 `image` 路径,并调整宽高比(Aspect Ratio),直到窗口覆盖模糊区域。
```
#### introPopupMission
introPopupMission与introPopupCareer几乎完全相同,但它需要手动定义按钮,而不是直接为按钮选择Flavour的预设模式。
按钮样式以 *bng-button-*`style` 的格式进行组合。内置的按钮样式包括:
- `main` - 橙色
- `secondary` - 青色
- `attention` - 红色
- `white` - 白色
- `link` - 半透明
- `outline` - 橙色轮廓
```lua
guihooks.trigger('introPopupMission', {
title = "introPopupMission title",
text = "introPopupMission description",
image = "/gameplay/tutorials/pages/template/image.jpg",
ratio = "16x9",
buttons = {
{ default=true, class="main", label="main button", clickLua="" },
{ default=false, class="secondary", label="secondary button", clickLua="" },
{ default=false, class="attention", label="attention button", clickLua="" },
{ default=false, class="white", label="white button", clickLua="" },
{ default=false, class="link", label="link button", clickLua="" },
{ default=false, class="outline", label="outline button", clickLua="" }
}
})
guihooks.trigger("introPopupClose")
```
<figure class="image image_resized" style="width:75%" markdown=""> ![在BeamNG.drive中显示的introPopupMission代码片段](../../assets/content/introPopupMission.png) </figure>
如果提供了多个页面,或者该hook被多次触发,这些页面将合并到同一个弹出窗口中。<br>如果在introPopup处于活动状态时触发了hook,或者已经触发了另一种类型的introPopup,则新内容将在当前弹出窗口关闭后,以独立的弹出窗口形式显示。
!!! bug
```
背景模糊具有最小高度限制,这会导致内容较短的弹出窗口在其窗口下方出现多余的模糊区域。目前主要有两种规避方案:
* 重复使用 `\n` 并以 `#!html <div />` 结尾,直到窗口高度足以覆盖模糊区域。
* 使用空路径或缺失的 `image` 路径,并调整宽高比(Aspect Ratio),直到窗口完全覆盖模糊区域。
```
#### Dialogue
Dialogue被用于*A Rocky Start*活动中,用于显示有关任务的信息。它是一个居中且垂直对齐的弹出窗口,具有特定的布局。它不支持嵌入 HTML。
```lua
ui_missionInfo.openDialogue({
title = "Dialogue title",
type = "Custom", -- isn't actually displayed
typeName = "typeName",
data = {
{label = "objective", value = "reward"}
-- add more...
},
buttons = {
{action = "accept", text = "Accept", cmd = ""},
{action = 'decline',text = "Decline", cmd = ""}
-- add more...
}
})
ui_missionInfo.closeDialogue()
```
<figure class="image image_resized" style="width:75%" markdown=""> ![在BeamNG.drive中显示的Dialogue代码片段](../../assets/content/Dialogue.png) </figure>
同时只能显示一个Dialogue。任何现有的Dialogue都会被直接覆盖。
!!! info
```
`#!lua ui_missionInfo.closeDialogue()` 必须使用该函数来关闭对话框。
请确保在按下任何按钮时都调用此函数。
```
## IMGUI代码片段 ## IMGUI代码片段
todo
## CEF UI代码片段 ## CEF UI代码片段
todo
+50
View File
@@ -0,0 +1,50 @@
---
hide:
- 导航
---
# 欢迎来到BeamMP社区!
![BeamMP Multicolor-White](../../assets/content/BeamMP-Multi-WhtLtr-crop.png#only-dark){width="450"} ![BeamMP Multicolor-Black](../../assets/content/BeamMP-Multi-BlkLtr-crop.png#only-light){width="450"}
## 我们的社交媒体链接
!!!failure ""
```
BeamMP Forum - [https://forum.beammp.com](https://forum.beammp.com)
```
!!!quote ""
```
X (Twitter) - [https://x.com/BeamMPOfficial](https://x.com/BeamMPOfficial)
```
!!!danger ""
```
YouTube - [https://www.youtube.com/@BeamMPOfficial](https://www.youtube.com/@BeamMPOfficial)
```
!!!warning ""
```
Patreon - [https://www.patreon.com/c/BeamMP](https://www.patreon.com/c/BeamMP)
```
!!!note ""
```
Discord - [https://discord.com/invite/beammp](https://discord.com/invite/beammp)
```
!!!info ""
```
BlueSky - [https://bsky.app/profile/beammpofficial.bsky.social](https://bsky.app/profile/beammpofficial.bsky.social)
```
## 我们的规则
你可以找到我们的规则 [这里](rules.md)
+53
View File
@@ -0,0 +1,53 @@
---
hide:
- 导航
---
# BeamMP 社区规则
!!!BeamMP员工不受这些规则的严格约束,可以自行决定操作。除这些规则外,Discord的[社区指南](https://discord.com/guidelines/)和[服务条款](https://discord.com/terms/)也适用并强制执行。
## BeamMP通用规则(适用于Discord、论坛和游戏内)
1. 禁止歧视(如性别歧视、种族主义等):material-information-outline:{title=“这包括直接或有意使用种族/性侮辱或其他词汇来针对个人或群体。”}
2. 禁止欺凌或骚扰:material-information-outline:{title=“这包括使用不必要的行为、未经请求的DM或使用信息、图像或口头交流针对个人。”}
3. 无NSFW、冒犯性或恶意内容:material-information-outline:{title=“这包括包含恶意链接、裸露、色情、过度亵渎或其他冒犯性、恶意和/或不适合在公共场所出现的内容。”}
4. 禁止发送垃圾邮件文本/语音渠道或帖子:material-information-outline:{title=“这包括生成多个帖子或线程,发送相同或类似的消息,滥用语音通信渠道或其他行为,包括加入/离开垃圾邮件。”}
5. 请说英语:material-information-outline:{title=“在可能的情况下,BeamMP内部的所有通信都应使用英语,除非另有指定的特定区域。”}
6. 禁止不适当的个人资料:material-information-outline:{title=“这包括个人资料名称,照片,bios或其他不符合BeamMP/BeamNG/Discord规则和ToS的用户控制内容。”}
7. material-information-outline:{title=“禁止发布个人信息(” doxing ")(包括但不限于真实姓名、地址、电子邮件、密码、银行账户和信用卡信息等)。}
8. material-information-outline:{title=“这包括讨论BeamMP/BeamNG或整个游戏之外的过去或当前世界事件。有一些地方可以对这些话题进行有效的讨论,但BeamMP不是其中之一。”}
9. 非BeamMP/BeamNG内容:material-information-outline:{title="这包括非BeamMP社区、社交媒体渠道或其他外部链接。这适用于在BeamMP社区内发帖,以及以个人广告为目的主动向用户发送DM。”}
10. 禁止冒充工作人员:material-information-outline:{title="这包括声称自己是BeamMP的工作人员,或声称拥有与工作人员相关的能力。这也包括模仿工作人员。”}
11. 禁止利用:material-information-outline:{title=“这包括利用任何漏洞或疏忽来谋取个人利益或对他人的体验产生负面影响。”}
12. 禁止分享 Authkey,禁止用小号刷免费密钥数量,违者永久封禁。
13. 遵循所有给定的TOS:material-information-outline:{title=“这很重要,因为使用我们的Discord服务器也必须遵循诸如Discord年龄限制(13+)之类的限制。”}
14. 尊重每个人:material-information-outline:{title=“有些话不该说出口,你需要尊重你周围的每个人,并相应地行动。”}
15. 关注类别或频道的主题。:material-information-outline:{title="这应该不说出来,但要保持你的内容在你发布的区域的主题上。例如,支持应该帮助人们或在寻求支持时使用。”}
16. 不要使用过多的大写锁定或表情符号:material-information-outline:{title=“用户应该避免使用过多的大写符号或表情符号/表情符号,以免混淆手头的重点。”}
17. 在支持区域发布之前,请检查[BeamMP FAQ](../../support/player-faq.md) &amp; [BeamMP社区FAQ](https://forum.beammp.com/c/faq/35)。
## Discord 规则
1. 以上规则适用于这里:material-information-outline:{title=“本文档中提到的所有规则适用于语音聊天。”}
2. 遵循Discord的使用条款和指南:material-information-outline:{title=“遵循Discord在其使用条款和指南中列出的所有规则”}
3. 禁止NSFW音频/流:material-information-outline:{title=“玩家不应该流任何违反BeamMP规则和Discord TOS的内容。”}
4. 上述规则包括赌博服务/网站。
5. material-information-outline:{title=“禁止过度使用响板、大声播放音乐或使用其他音频通道故意煽动或针对他人。”}
6. 禁止加入/离开滥用:material-information-outline:{title=“大多数用户可能启用声音效果,不要快速加入和离开语音聊天。”}
7. 不要纠缠他人(`@'ing`):material-information-outline:{title=“这包括在被忽视或拒绝后反复要求他人回应。”}
8. 将bot命令保存在特定于命令的通道中。
9. 禁止角色扮演:material-information-outline:{title=“这是为了防止由于缺少上下文或防止用户规避某些规则而引起的问题。”}
10. 请勿要求用户通过私信(DM)向你寻求帮助。所有与支持相关的话题均应在 BeamMP Discord 服务器的指定支持频道中进行讨论。
11. 严禁发送任何可疑的、潜在恶意或具有破坏性的文件及附件(包括但不限于可疑扩展名)。
12. 不要教/发链接教别人怎么盗版、破解软件、骇入账号、破解付费mod。
13. 不要发布非BeamNG /BeamMP内容。只允许在专用的[媒体通道](https://discord.com/channels/601558901657305098/705427325646274680)中发送您自己通道的媒体。
14. 听从工作人员的指示。如果你认为某位员工滥用职权,直接通知他们的领导或项目管理人员。
## 如何对您被实施的封禁进行申诉:
### 封禁上诉可在<a href="https://docs.google.com/forms/d/1MaTPKM-MHQU5lUtxeOKz3C7OoI6Xbu5RX5AJdX-UOz4" class="inline-onebox">封禁上诉- BeamMP</a>提交。
所有禁令申诉都经过彻底调查,涉及至少两(2)名与本案无关的工作人员/审核小组成员。发出申诉的工作人员将被允许发表评论,但不会以其他方式参与申诉决定。这些上诉结果是最终的。BeamMP保留根据BeamMP社区规则(如上所述)、[Discord ToS](https://discord.com/terms)和其他因素允许或不允许成员的权利。
!!! 如果对您采取行动,您将被禁止创建新的Discord或BeamMP帐户来规避禁令。
+24
View File
@@ -0,0 +1,24 @@
# 错误代码
此页包含启动程序可能显示的所有错误代码。
---
代码 | 描述 | 可能的解决方案
--- | --- | ---
10048 | 其他东西占用了启动器端口 | 确保只运行了一个BeamMP-Launcher程序。或尝试重新启动电脑。
10038 / 10060 / 10061 | 在此指定的IP和/或端口上没有服务器应答 | 若您为服务器所有者,请前往[BeamMP-Server](https://docs.beammp.com/server/create-a-server)核验端口转发规则及防火墙策略;若非所有者,请尝试切换其他服务器或联系已知管理员协同排障。
10054 | 对方/服务器突然断开了连接 | 您正在连接的服务器已离线。
Failed to find the game please launch it. Report this if the issue persists code 3. | 启动器无法在注册表项中找到游戏信息(游戏目录,配置文件目录,版本等) | 至少运行一次游戏,以便创建注册表值。
Failed to find the game please launch it. Report this if the issue persists code 4. | 启动器无法从注册表项中读取游戏信息(游戏目录、配置文件目录、版本等) | 此错误最有可能出现在**盗版**游戏的用户中。如果你已经购买了游戏,至少运行一次,这样注册表值就会被创建。
Failed to Launch the game! launcher closing soon | 启动器无法找到游戏的可执行文件 | 在再次运行启动器之前,至少运行一次游戏。
Game Closed! launcher closing soon | 游戏关闭了 | 此消息将在游戏结束或游戏启动失败时出现。
Launcher Update failed! | 启动器未能下载新版本 | 检查您的互联网连接和防火墙/防病毒规则,让启动器没有被阻止。
Logger file init failed | 启动器缺乏文件创建权限 | 使用管理员身份运行启动器
Please close the game and try again | 游戏已经打开,启动器无法清除`multiplayer/mod `文件夹 | 关闭游戏并重试
Please launch the game at least once | 启动器尝试修改游戏目录但是失败了 | 在再次运行启动器之前,至少运行一次游戏。
Primary Servers Offline! Sorry for the inconvenience! | 启动器未能检查更新 | 检查你的互联网连接和防火墙规则。如果您没有问题,请查看我们Discord上的[BeamMP更新频道](https://discord.com/channels/601558901657305098/697596153943949352)。
Sorry Backend System Outage! Don't worry it will back on soon! | BeamMP后端没有响应 | 检查你的互联网连接和防火墙规则。如果您没有问题,请查看我们Discord上的[BeamMP更新频道](https://discord.com/channels/601558901657305098/697596153943949352)。
Stuck on updating | 启动器卡在更新上,不会继续下一步 | 以管理员身份运行启动器并检查反病毒规则,以确保启动器未被阻止。
如果启动器迅速“闪退”了,请检查安装BeamMP的文件夹中的` launcher .log`文件。
+163 -21
View File
@@ -1,39 +1,181 @@
# 入门 # 入门
--- ## **1. 兼容性**
## **开始之前** BeamMP与Windows和Linux完全兼容,与MacOS的兼容性正在研究中。然而,Linux和MacOS都是次要平台,这意味着bug在所难免。
BeamMP仅与Steam正版的游戏版本兼容。不支持”盗版“版本。 !!!警告
```
BeamMP将无法与盗版或过时版本的BeamNG.drive一起工作。
BeamMP支持团队不提供盗版/过期副本问题的支持。
```
--- ---
## **安装** ## **2. 安装**
BeamMP目前仅与Windows系统原生兼容。 ### **2a. Windows 安装**
### **Windows安装** !!!注意
1. 访问[beammp.com](https://beammp.com/)并点击“Download Client”按钮。 ```
2. 解压`BeamMP_Installer.zip` 截至 2026 年 4 月 1 日,Windows Defender SmartScreen 会将该 MSI 安装程序识别为“未知应用”
3. 运行`BeamMP_Installer.exe`并按照说明进行操作。
4. BeamMP启动器图标应将出现在您的桌​​面上。如果没有,只需在Windows搜索栏中搜索“BeamMP”即可。
5. 启动器运行后,您应该会看到一个终端窗口,随即 BeamNG.drive将自动运行。**请勿**关闭终端窗口。
6. BeamNG启动后,在主菜单中点击`联机模式`即可开始多人游戏。
7. 系统将提示您登录或以访客身份游玩(并非所有服务器都允许访客)。您可以在我们的[论坛](https://forum.beammp.com)上创建一个帐户,然后使用相同的凭据登录BeamMP。
8. 选择您感兴趣的任何服务器,然后点击`连接` 。尽情享受吧!
注意:*当您加载到已有多辆载具的地图时,加入可能需要比预期更长的时间。* 若要跳过此警告,请点击“更多信息”,然后点击“仍要运行”。
```
### **Linux安装** 1. 前往 [beammp.com](https://beammp.com/) 然后点击“下载”按钮
2. 运行 `BeamMP_Installer.msi`安装程序并按照提示进行操作。
3. BeamMP启动器的图标应该会出现在您的桌面上。如果没有出现,只需在 Windows 搜索栏中搜索“BeamMP”即可。
请参考[英语文档](https://docs.beammp.com/game/getting-started/#2b-linux-installation) !!!注意
```
当你加载到一个有多个车辆的地图时,它可能需要比预期更长的时间才能加入。
```
### **2b. Linux 安装**
目前您需要自己编译Launcher。为了做到这一点,您需要对如何编译应用程序有一个基本的了解。
确保你已经安装了基本的开发工具,通常可以在包中找到,例如:
- Debian/Ubuntu: `sudo apt install build-essential`
- Fedora: `sudo dnf install cmake gcc gcc-c++ make perl perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy kernel-headers kernel-devel`
- Arch: `sudo pacman -S base-devel`
- openSUSE: `zypper in -t pattern devel-basis`
- SteamOS (Arch): `sudo pacman -S base-devel linux-api-headers glibc libconfig` (You also need to do `sudo steamos-readonly disable` but make sure to enable it again after installing the packages)
克隆 `vcpkg` 仓库,执行引导脚本并加入系统路径
1.
```bash
git clone https://github.com/microsoft/vcpkg.git
```
1.
```bash
./vcpkg/bootstrap-vcpkg.sh
```
1.
```bash
export VCPKG_ROOT="$(pwd)/vcpkg"
export PATH=$VCPKG_ROOT:$PATH
```
使用`git`将BeamMP-Launcher仓库克隆至本地,操作示例如下:`git clone https://github.com/BeamMP/BeamMP-Launcher.git`。[查看GitHub仓库克隆操作完整指南](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
如果你使用了我们提供的示例克隆命令,你可以使用以下命令进入项目的根目录: <br>`cd BeamMP-Launcher`
查看用于 [最新发布版本](https://github.com/BeamMP/BeamMP-Launcher/releases/latest) 的标签(Tag)。例如,如果最新版本使用的是 `v2.8.0`,则执行命令:`git checkout v2.8.0`
在项目的根目录中,
1.
```cmake
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux
```
1.
```cmake
cmake --build bin --parallel
```
!!!注意 ""
```
如果在编译时内存耗尽,可以提交——parallel指令,由于只在一个CPU线程上编译,它将使用更少的RAM。
```
!!!注意 ""
```
通过不指定‘ -DCMAKE_BUILD_TYPE=Release ’,您正在编译一个调试版本,该版本的文件大小较大,但不包含launcher-can-only-connect-to- server-once错误
```
!!!注意 "Fedora 用户" 如果 vcpkg 在编译 OpenSSL 时因内核头文件(kernel headers)错误而失败,请确保已安装所有依赖项: `bash sudo dnf install kernel-headers kernel-devel gcc gcc-c++ make perl ` 然后清理 vcpkg 缓存:`bash rm -rf $VCPKG_ROOT/buildtrees/openssl `最后重新运行 cmake 配置命令。
将已编译完成的应用程序从`/bin`移出,放到它自己的文件夹中,然后从该文件夹运行它:
```bash
mkdir -p ~/beammp-launcher
cp bin/BeamMP-Launcher ~/beammp-launcher/
cd ~/beammp-launcher
./BeamMP-Launcher
```
原生的 Linux 版 BeamMP 启动器将会启动,并使用原生的 Linux 版 BeamNG.drive。
### **2c. 在Proton兼容层上游玩BeamNG.drive**
若您需要在Proton环境运行BeamNG.drive时同步使用原生Linux版BeamMP启动器,可通过以下方案实现:
使用`--no-launch`参数运行BeamMP-Launcher(此参数将阻止启动器唤起原生Linux版BeamNG.drive)。更多启动器参数详解请参阅[开发环境配置指南](../guides/beammp-dev/beammp-dev.md)
将Proton-BeamNG.drive的用户文件夹路径指向Linux-BeamNG.drive的位置(因原生Linux版BeamMP-Launcher当前仅支持向Linux-BeamNG.drive用户文件夹写入数据)
例如,您可以通过创建符号链接实现该配置
- 记录Linux-BeamNG.drive用户文件夹路径(通常位于`~/.local/share/BeamNG.drive`),并将其重命名为类似`BeamNG.drive_old`的名称
- 记录Proton-BeamNG.drive用户文件夹路径(通常位于`~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG.drive`
- 建立双端用户文件夹的符号链接桥接 `ln -s ~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG.drive ~/.local/share`
当用户文件夹间符号链接就绪且启动器完成编译后,可通过调整Steam启动参数实现:既让Steam通过Proton运行游戏,又能自动触发启动器执行。请前往Steam库中该游戏的属性设置界面,替换原版游戏启动参数为下方配置模板:
- `~/BeamMP/BeamMP-Launcher --no-launch & %command% ; killall BeamMP-Launcher`
请注意:此配置默认假设您已将编译完成的启动器二进制文件存放于`/home/user/BeamMP/`。请根据实际二进制文件存放路径调整配置,且每次启动器版本更新时需切换至官方Git仓库对应分支重新执行编译流程。
!!! 提示 "安装表情符号字体实现文本内嵌表情"
```
若需在服务器列表(作为服务器自定义名称组成部分)或游戏内聊天中显示表情符号,您需部署包含表情符号的字形库。例如,可通过安装Windows Segoe UI 表情符号字体的 Linux 移植版实现。
```
### **2d. 更新启动器**
如果您已经构建了启动器并想要对其进行更新:
```bash
export VCPKG_ROOT="$(pwd)/vcpkg"
cd BeamMP-Launcher
git fetch --tags
```
检出用于 [最新发布版本](https://github.com/BeamMP/BeamMP-Launcher/releases/latest) 的标签。例如,如果最新版本使用的是 `v2.8.0`,则执行 `git checkout v2.8.0`
```
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux
cmake --build bin --parallel
cp bin/BeamMP-Launcher ~/beammp-launcher/
cd ~/beammp-launcher
./BeamMP-Launcher
```
--- ---
## **已知问题** ## **3. 使用BeamMP**
- 如果您未看到”联机模式“按钮。确保BeamMP模组已在“模组管理器”中激活,然后尝试按下CTRL+L 1. 启动程序后,您应该会看到一个终端窗口。紧接着,标准的 BeamNG 启动程序也会随之启动。**请勿**关闭该终端窗口
- 另外,请确保BeamMP是“模组管理器”中**唯一**激活的模组,否则可能会导致问题 2. 在 BeamNG.drive 的主菜单中,点击 `Repository(仓库)` 按钮,并检查确认 `multiplayerbeammp`**唯一** 启用的插件(Mod
3. 返回主菜单,点击“More..”和“多人模式”按钮开始多人模式。
4. 系统将提示您登录或以访客身份游玩(并非所有服务器都允许访客)。您可以在我们的[论坛](https://forum.beammp.com)上创建一个帐户,然后使用相同的凭据登录BeamMP。
5. 选择您感兴趣的任何服务器,然后点击`连接` 。尽情享受吧!
如果您需要更多安装帮助,欢迎您在我们的[论坛](https://forum.beammp.com)上发帖或在我们的[Discord服务器](https://discord.gg/beammp)上提问(仅英文)。 ---
## **4. 已知问题**
- 当前原生Linux版BeamMP启动器存在单会话限制:成功连接服务器并断开后需重启启动器。可通过热重载方案实现不关闭游戏进程的快速重启
- 若未显示多人游戏按钮,请确认以下操作:<br>检查BeamMP模组是否已安装并在模组管理器中启用<br>尝试执行热重载快捷键 Ctrl + L
- 任何类型的vpn都可能导致连接问题。
- 如果启动器报告任何错误,请阅读[FAQ](https://forum.beammp.com/c/faq/35)。
如果启动器报告任何错误,请阅读[FAQ](https://forum.beammp.com)。
+318
View File
@@ -0,0 +1,318 @@
# 多人模式设置
## **1. 一般设置**
??? 设置 “显示高级选项”
```
如果启用,您将看到所有多人游戏设置
如果禁用,您将只看到基本的多人游戏设置
```
??? 设置 “启用克隆保护”
```
如果启用,你生成的车辆配置将不会被其他玩家保存
如果禁用,你的衍生车辆配置可以被其他玩家保存
```
??? 设置 “禁用因不稳定导致的暂停”
```
如果启用,物理不稳定性将不会导致游戏暂停
如果禁用,物理不稳定性将导致游戏暂停
!!! 注意 ""
建议设置为禁用,因为反复的不稳定会导致游戏崩溃
```
??? 设置 “可用时使用简化车辆”
```
如果启用,游戏将会替换其他玩家的简化版车辆(来自AI流量)
如果禁用,游戏将使用预定的车辆模型
```
??? 设置 “新聊天菜单”
```
如果启用,游戏内聊天将显示在[IMGUI]https://github.com/ocornut/imgui)窗口中,例如可以从游戏中拖出到另一个显示器上
如果禁用,游戏内聊天将显示在UI应用程序中
!!! 注意 ""
将IMGUI窗口拖出主游戏窗口可能会导致性能问题,还会诱使屏幕录制软件录制聊天窗口而不是主游戏窗口
```
??? 设置 “启用车辆位置平滑”
```
如果启用,beamMP将使用算法平滑车辆位置更新到定期间隔。在ping值高的玩家之间,或者当一个连接经历了高包掉落率时,这会优化移动平滑性
如果禁用,beamMP将在接收到车辆位置时更新
```
??? 设置 “跳过模组安全警告提示框”
```
如果启用,当试图用模组连接到服务器时,将不会显示模组安全弹出框
如果禁用,当你连接到一个带有模组的服务器时,就会显示模组安全弹出框
```
??? 设置 “启用玩家车辆更新/编辑排队”
```
如果启用,其他玩家的车辆刷出和编辑将被放入队列。参见第2节。事件队列'获取更多详细信息
如果禁用,其他玩家的车辆刷出和编辑将立即被游戏加载
```
??? 设置 “启用零件自动同步”
```
如果启用,你的车辆部件将在几秒钟后自动同步到其他玩家
如果禁用,您需要单击部件选择器中的部件同步按钮,以便将同步发送给其他播放器
```
??? 设置 “禁止切换到其他玩家的车辆”
```
如果启用,点击车辆将跳过其他玩家的车辆
如果不启用,将会在每一个衍生的车辆上循环
```
??? 设置 “车辆靠近时淡出”
```
如果启用,其他车辆会在靠近时淡出
如果禁用,其他车辆将保持完全可见,无论距离
!!! 注意 ""
这只会影响车辆的可见3d网格,而不会影响其物理节点-光束网格。为了禁用物理,你需要在游戏设置中启用“简化碰撞物理”
```
??? 设置 “显示玩家ID”
```
如果启用,游戏内的玩家列表将增加一行,显示每个玩家的 ID。这对于开发或管理很有用。
如果禁用,游戏内的玩家列表将仅显示玩家名称和延迟这两列。
```
??? 设置 “允许游戏内服务器列表刷新”
```
若启用此功能,游戏过程中服务器列表将按固定时间间隔自动更新。此操作可能导致游戏卡顿现象发生。
若禁用此功能,服务器列表仅会在打开主菜单界面时更新一次。
```
## **2. 事件队列**
??? 设置 “高亮显示队列玩家”
```
如果启用,具有队列事件的玩家将在游戏玩家列表中突出显示
如果禁用,玩家将不会单独突出显示
```
??? 设置 "应用车辆更改"
```
如果设置为“鼠标左键”,使用鼠标左键点击玩家列表中的玩家名字将加载队列事件。用鼠标右键点击将观看该玩家
如果设置为“鼠标右键”,使用鼠标右键点击玩家列表中的玩家名字将加载队列事件。用鼠标左键点击将观看该玩家
```
??? 设置 “自动应用队列车辆变更”
```
如果启用了该功能,那么一旦低于设定为超时的速度阈值,就会自动加载队列的事件
如果禁用,队列事件将只能手动加载,通过点击屏幕顶部的“事件”按钮或玩家列表中的玩家名称
```
??? 设置 “队列应用速度阈值”
```
本设定值定义了自动加载事件队列的速度阈值。为使队列事件成功加载,车辆必须持续低于该设定时速且超过"队列应用超时"的持续时长
```
??? 设置 “队列应用超时”
```
此设定值定义自动事件队列加载的时间延迟。为了加载排队的事件,您的车辆必须比“队列应用速度阈值”慢
```
??? 设置 “观看他人时跳过队列”
```
如果启用,如果您正在观看其他玩家,则会立即加载事件
如果被禁用,一个事件将被排队,就像它在你自己的车辆上一样
```
??? 设置 “不要排队独轮车(Snowmen/Beamlings)”
```
如果启用,有关Snowmen/Beamlings的事件将立即加载
如果禁用,Snowmen/Beamlings将像其他车辆一样排队
```
## **3. 设置默认Unicyle**
??? 设置 "默认 Unicycle 配置文件"
```
该配置项用于定义默认加载的独轮车类型。您既可以选择预设配置,若已保存自定义独轮车配置,也可选用自有配置。
```
??? 设置“自动保存上次使用的Unicyle”
```
启用状态最近使用的独轮车配置将被自动保存,并在下次生成时直接加载
禁用状态始终使用默认配置生成独轮车
```
## **4. 物理节点**
??? 设置 "启用未生成载具的物理节点"
```
启用时,未生成载具显示定位球体
禁用时完全隐藏
```
??? 设置 "调整颜色"
```
??? 设置 "可见"
如果启用,将绘制一个节点,使用下面的颜色
如果禁用,则不会为指定的函数绘制节点
??? 设置 "RGB HEX 值"
队列车辆:当车辆队列等待刷出时,斑点将使用的颜色。标准值#FF6400
非法车辆:如果车辆是非法的,例如通过侧面加载的mod, blob将使用的颜色。标准值#000000
已删除的车辆:如果用户删除了车辆,blob将使用的颜色。标准值#333333
```
## **5. 昵称标签**
??? 设置 "隐藏玩家昵称标签"
```
如果启用,将不会绘制玩家的昵称标签
如果禁用,玩家的名字将根据他们车辆的相对位置绘制
```
??? 设置 "显示与其他玩家的距离"
```
如果启用,将在昵称标签前面加上到相应车辆的距离
如果禁用,则不会在标签中显示额外的距离
```
??? 设置 "淡入/淡出昵称标签"
```
如果启用,标签将根据“淡出距离”和“反转标签淡出方向”淡出。
如果禁用,则无论与相应车辆的距离如何,都将以标准不透明度绘制图像
```
??? 设置 "淡出距离/反转标签淡出方向"
```
!!! 设置 "淡出"
玩家离得越远,标签就越不显眼
'渐变距离'定义了标签在最小不透明度下绘制的距离
!!! 设置 "淡入"
玩家离得越远,标签就越显眼
'渐变距离'定义了标签在最大不透明度下绘制的距离
```
??? 设置 "不要完全隐藏姓名标签"
```
如果启用,一个标签不能完全不可见,它将保留一个最小的不透明度,无论距离
如果禁用,昵称标签可以完全不可见
```
??? 设置 "缩短昵称标签和角色标签"
```
如果启用,‘ Nametag length limit ’将截断昵称标签和角色到设置的字符限制
如果禁用,名称标签和角色标签将以完整的长度显示
```
??? 设置 "在车辆标签下显示观众的标签"
```
如果启用,观众的名字将被添加到玩家的姓名标签下面
如果禁用,没有观众的名字会被添加到标签
```
??? 设置 "观众昵称标签颜色相同"
```
如果启用,观众的名字将始终被灰色背景包围
如果禁用,观众的名字将被彩色背景包围,以突出观众的角色
```
## **6. 其他**
??? 设置 "在控制台中显示网络活动"
```
如果启用,则将在控制台中显示beamMP网络活动
如果禁用,则控制台中不会显示进一步的网络活动
!!! 风险 ""
要小心这个设置,因为所有控制台输出也会写入日志文件
启用此设置后,它们可以在几分钟内增长数百MB
```
??? 设置 "启动器端口"
```
此设定值定义用于与启动器通信的端口
只有标准端口4444不能使用时才需要更改吗
不要忘记在启动器侧修改它,通过修改‘ launcher.cfg
!!! 提示 ""
指定的端口只是两个中的第一个,第二个正在使用的端口紧随其后,设置port + 1
第一个端口携带核心网络数据包,第二个端口携带游戏网络数据包,两者都通过TCP传输
```
+75
View File
@@ -0,0 +1,75 @@
# 开始
为了开始开发BeamMP,你至少需要:
- 安装在本地的BeamNG.drive
- 安装在本地的BeamMP; 至少是启动器,另外还有服务器
- 安装在本地的Git, 和一个 GitHub.com 账号
- 一个代码编辑器, 例如VSCode或notepad++
---
# 模组,启动器和服务器之间的区别
BeamMP分为三个主要部分:
- 该模组与游戏中的其他载具模组或界面模组相同,均通过BeamNG引擎加载运行。其核心功能包括与启动器建立本地通信链路,以及渲染多人联机界面组件。技术架构方面,主体逻辑采用Lua脚本语言实现,界面层则基于JavaScript、HTML与CSS的复合式开发框架进行构建。相关代码仓库详见[https://github.com/BeamMP/BeamMP](https://github.com/BeamMP/BeamMP)。
- 本启动器核心功能集包括:与模组维持持续通信、在需要时建立目标服务器连接,以及通过BeamMP后端系统执行用户登录认证流程。该程序基于C++语言开发,部署前已由BeamMP团队完成预编译处理,完整源代码参见[https://github.com/BeamMP/BeamMP-Launcher](https://github.com/BeamMP/BeamMP-Launcher)。
- 服务端核心功能涵盖:与多个启动器实例建立通信链路、向BeamMP后端系统发送"心跳"信号同步IP/端口/版本/玩家数量等运行参数,并管理与调度服务端Lua插件运行。底层架构基于C++语言实现,已由BeamMP针对多操作系统平台及CPU指令集进行预编译生成,完整源码仓库位于[https://github.com/BeamMP/BeamMP-Server](https://github.com/BeamMP/BeamMP-Server)。
---
# 配置适用于模组开发的运行环境
## 为BeamNG使用未打包文件
为实现BeamNG模组开发的高效迭代,建议开发者采用`非打包目录`的实时更新工作流模式,避免每次代码变更后执行重复的压缩打包操作。
请通过文件管理器访问BeamNG用户目录:`%appdata%/Local/BeamNG.drive/0.xx/mods`,其中`xx`对应当前最新的BeamNG版本号。在`mods`目录内创建名为`unpacked`的专用开发文件夹。
有关用户目录的技术规范细则,请参阅BeamNG官方文档中心:[https://documentation.beamng.com/support/userfolder/](https://documentation.beamng.com/support/userfolder/)
## 在BeamMP启动器中启用开发模式
为防止自动更新机制覆盖本地Git仓库副本,请通过添加运行参数`--no-download`强制停用该功能;若需同时禁止启动器自动运行BeamNG主程序,并获取实时调试日志,推荐配置方案为附加开发调试参数`--dev`
命令行参数 | 说明
:-- | :--
`--help` or `-h` | 该指令将输出下列标准化参数清单
`--port <port>` or `-p` | 请将服务端默认监听端口修改为`<port>`,该项变更需同时在游戏客户端内进行同步配置。
`--verbose` or `-v` | 详细日志模式,输出调试级系统信息
`--no-download` | 强制禁用BeamMP Lua模组自动部署流程
`--no-update` | 激活维护模式锁定更新通道(需采用手动升级方式)
`--no-launch` | 强制解耦启动器与游戏进程链路(需进行独立启动流程)
`--dev` | 开发者模式,与 --verbose --no-download --no-launch --no-update相同
`--game <args...>` or `-- <args...>` | 实现运行参数向游戏进程的透传桥接
## 执行仓库克隆操作至目标解压目录
虽然您可手动从GitHub仓库(a0)https://github.com/BeamMP/BeamMP复制BeamMP模组文件,但强烈建议使用Git版本控制系统进行规范操作。请首先执行分叉(fork)操作。
最有效的方式是直接将存储库克隆到`unpacked`文件夹中。
`git`环境配置下,请遵循以下部署流程:<br>从`解压根目录`启动PowerShell/CMD终端<br>执行克隆操作:`git clone https://github.com/yourName/BeamMP`
现在试试开发模式吧。启动BeamMP启动器,手动启动BeamNG,一旦进入游戏,确保BeamMP是唯一有效的模组。你应该能够像往常一样使用BeamMP。
使用代码编辑器,您现在可以直接在`unpacked`文件夹中添加或更改代码。然后你可以通过按`Ctrl+L`重新加载Lua来尝试更改(如果你做了UI更改,则按`F5`)。
一旦您对更改满意,就可以通过git提交它们。有关如何使用Git的教程和文档,请参阅Git- scm网站。一旦您的更改被提交并推送(到您的分支),您就可以发出拉取请求。
如果您遇到任何问题,请在[Discord](https://discord.gg/beammp)的#scripting频道中提问
---
# 设置本地服务器
在使用BeamMP时,使用本地服务器可能是有益的。您可以遵循常规的[服务器安装](../../server/create-a-server.md),同时省略纯本地连接的前两个步骤。
`serverConfig`中将服务器设置为私有。使用任意字符串作为`AuthKey`
---
# 贡献指南
有关代码格式、提交信息格式、通用开发最佳实践等详细信息,请参阅各仓库中的`CONTRIBUTING.md`文件。该文件包含更详细的贡献指南,各仓库中的`README.md`文件通常也会提供具体的构建步骤说明(针对需要编译的项目)。
+21
View File
@@ -0,0 +1,21 @@
---
title: 指南
description: 这组页面为BeamMP提供了一些基本指南
status: 新的
---
!!! 警告"这个网站正在建设中!"
```
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
```
# BeamMP开发指南
本页面将是客户端和服务器内容创建的介绍和序言。
这一页还需要开发。
@@ -0,0 +1,101 @@
# 创建多人模式
## 文件夹结构和基础文件
基本的文件夹和文件结构应该是这样的:
```
Resources/
├─ Client/
│ └─ examplePlugin.zip/
│ ├─ scripts/
│ │ └─ modScript.lua
│ └─ lua/
│ └─ ge/
│ └─ extensions/
│ └─ examplePlugin.lua
└─ Server/
└─ examplePlugin/
├─ examplePlugin.lua
└─ further_lua/
└─ further.lua
```
服务器端lua是最基本的,如果您想添加自定义事件,您还至少需要一个客户端lua以及一个modscript.lua
Server目录需创建多个子文件夹存放各服务端模组。推荐只在根目录保留一个主Lua文件,新增的Lua文件可归类到对应子目录。实际使用中不必严格遵循此规范,若同一层级存在多个Lua文件时,服务器会按文件名称的字母表顺序自动加载。
Client目录专门存放将发送给客户端的ZIP格式模组包,当客户端接收后会自动以模组形式加载。该目录若存在其他类型文件会导致服务器启动时报错(但不会阻断服务运行),不过这些无关文件仅会被服务端忽略。核心配置脚本modScript.lua由BeamNG游戏引擎解析,用于指引游戏加载指定插件模块。
!!!范例 "" [Download the examplePlugin.zip](../../../../assets/content/ResourcesForExamplePlugin.zip)
## 服务器端 lua
更多完整示例可参考examplePlugin模块的实现,现提供一个基础调试示例,实例的功能是显示玩家身份标识
```lua
function onInit() --runs when plugin is loaded
MP.RegisterEvent("onPlayerAuth", "onPlayerAuth") --Provided by BeamMP
print("examplePlugin loaded")
end
--A player has authenticated and is requesting to join
--The player's name (string), forum role (string), guest account (bool), identifiers (table -> ip, beammp)
function onPlayerAuth(player_name, role, isGuest, identifiers)
local ip = identifiers.ip
local beammp = identifiers.beammp or "N/A"
print("onPlayerAuth: player_name: " .. player_name .. " | role: " .. role .. " | isGuest: " .. tostring(isGuest) .. " | identifiers: ip: " .. ip .. " - beammp: " .. beammp)
end
```
`onPlayerAuth`会在玩家尝试加入时触发,详细信息请参考脚本文档中的[onPlayerAuth条目](../../../scripting/server/latest-server-reference/#onplayerauth)
以下是使用onPlayerAuth的另一个示例,该示例将通过向客户端返回信息来禁止游客加入服务器,返回的信息会直接显示给玩家:
```lua
function onPlayerAuth(playerName, playerRole, isGuest, identifiers)
if isGuest then
return "No guests allowed, please use a BeamMP account"
end
end
```
关于BeamMP服务端函数的详细信息请查阅[最新版服务端技术文档](../../../scripting/server/latest-server-reference.md)
## 客户端 lua
该实现主要遵循[BeamNG扩展模块](https://documentation.beamng.com/modding/programming/extensions/)的技术规范。
```lua
local M = {}
if extensions.isExtensionLoaded("examplePlugin") then
log("E", "examplePlugin", "examplePlugin loaded on client side")
return
end
return M
```
终端输出提示:examplePlugin已完成加载。
建议查阅[BeamNG调试输出官方文档](https://documentation.beamng.com/modding/programming/debugging/#a-add-a-log)获取详细说明
## modScript.lua
通常只包含两行
```lua
load('examplePlugin')
setExtensionUnloadMode('examplePlugin', 'manual')
```
如果你想在日志中看到你的modScript被BeamNG处理,你可以添加一个日志打印
```lua
load('examplePlugin')
setExtensionUnloadMode('examplePlugin', 'manual')
log('I', 'modScript', "examplePlugin loaded")
```
+36
View File
@@ -0,0 +1,36 @@
---
hide:
- 导航
---
!!!警告“该网站正在建设当中!“
```
这个网站正在积极建设中。
觉得你能帮上忙吗?请用铅笔在右侧点击页面!
这也可以在任何页面上完成。
```
# 欢迎来到BeamMP文档!:tada:
欢迎来到全新改进的BeamMP文档中心!无论您是玩家,服主,还是开发者,我们都能为您提供增强BeamNG.drive多人游戏体验所需的资源。
## 对于玩家
首次体验BeamMP联机模组?请访问我们的[新手启航指南](../game/getting-started.md),助您迅速完成配置部署,畅享多人模式下的高拟真驾驶盛宴。若遇基础性问题,建议优先查阅[玩家常见问题解答](../FAQ/player-faq.md)中的故障排查方案
## 对于服主
考虑创建专属BeamMP服务器?我们的[完整指南](../server/create-a-server.md)将逐步指导您完成整个流程,确保您掌握所需工具和知识,助您高效搭建服务器
## 对于开发者
想要了解如何为BeamMP服务器创建资源?请查看我们的[资源开发指南](../guides/mod-creation/server/getting-started.md),获取完整的功能实现指引。
令人兴奋的更新即将推出,包括旨在增强您的浏览体验的全新主页。请继续关注!:slight_smile:
## 社区规则
请仔细查阅BeamMP [社区规则](https://docs.beammp.com/community/rules/)及封禁申诉流程说明。
+45
View File
@@ -0,0 +1,45 @@
!!! 警告 "这个网站正在建设中!"
```
这个网站正在积极建设中。
觉得你能帮上忙吗?请用铅笔在右侧点击页面!
这也可以在任何页面上完成。
```
# 模组/游戏内脚本参考
BeamMP允许您创建自己的客户端插件。我们提供了一些功能,你可以用它来与其他多人模式和其他玩家通过服务器进行通信。
# 函数列表
脚本可用函数列表:
函数 | 说明
--- | ---
`TriggerServerEvent("eventName", "data")` | 在服务器lua环境中触发事件,两个参数都是字符串。
`TriggerClientEvent("eventName", "data")` | 在本地lua环境中触发事件,两个参数都是字符串。有利于插件之间的通信。
`AddEventHandler("eventName", Function)` | 当`eventName`被接收时(本地或从服务器),`function`将获得1个参数,一个包含事件数据的字符串。
# 代码片段
例如,使用包含的`ChatMessageIncluded`事件解析聊天,如下所示:
```lua
local function chatReceived(msg) -- Receive event with parameters
print("chat received: "..msg)
local i = string.find(s, ":") -- Find where our first ':' is, used to separate the sender and message
if i == nil then
print("error parsing message: separator could not be found!")
return -- Could not find separator, cancel function
end
print("index of separator: "..tostring(i))
local sender = string.sub(msg, 1, i-1) -- Substring our input to separate its 2 parts
local message = string.sub(msg, i+1, -1) -- Do whatever you want to with the message
print("sender: " .. sender)
print("message: ".. message)
end
AddEventHandler("ChatMessageReceived", chatReceived) -- Add our event handler to the list managed by BeamMP
```
File diff suppressed because it is too large Load Diff
+291
View File
@@ -0,0 +1,291 @@
# 服务器端的安装
## **创建服务器**
设置服务器应用程序的基础知识
---
### **概述**
**创建一个家里云是免费的,但是托管一个VPS更容易也更安全**
服务器是BeamMP的一个组成部分;玩家通过服务器相互连接。它们在Windows和Linux上本机运行。
你可以制作私人服务器,只有你邀请的人才能加入,或者设置为公共服务器,显示在我们的官方服务器列表中。
让服务器上线运行需要经过几个步骤!如果遇到任何问题,可以随时在我们的 [论坛](https://forum.beammp.com) 或 [Discord 服务器](https://discord.gg/beammp) 的 `#support` 频道提问。更多信息也可参考 [服务器维护](server-maintenance.md) 部分。
请在使用服务器前务必阅读 [许可协议](https://raw.githubusercontent.com/BeamMP/BeamMP-Server/master/LICENSE)。
*服务器仅支持 IPv4。如果你不确定自己使用的是哪种协议,可以查看在 [*whatsmyip.org*](https://www.whatsmyip.org/) 上看到的 IP 地址——如果它包含 `:` *冒号,则为 **IPv6**。在这种情况下,你需要进一步确认自己是否也拥有 IPv4。你可以联系你的 ISP 查询,或者问问与你同住的人(如果他们懂技术,可能知道!)。计划将来支持 IPv6。**
## 设置服务器
设置包括以下步骤,您应该遵循所有步骤。
### **1. 端口转发**
!!! info
```
如果你使用的是 VPS(虚拟专用服务器)、Rootserver,或者计划在本地托管服务器(与家里其他玩家在同一屋檐下),可以跳过此步骤。
如果你希望家外的人加入你本地托管的服务器(即在本地网络之外),则必须执行此步骤。
!!! danger ":material-scale-balance: 免责声明:"
**端口转发存在风险**.
进行端口转发意味着你理解将家庭网络端口向公众开放的风险,因此 BeamMP 对你或你家庭可能发生的**任何和所有**损害不承担责任。
我们不对任何外部链接服务或网站上的内容负责。
因此,建议使用我们的合作服务来托管服务器!
*请参阅 [端口转发指南]了解详细操作(port-forwarding.md)*
```
#### 合作托管服务(付费):
- [Horizon Hosting](https://hrzn.link/beammp)
- [RackGenius](https://rackgeni.us/beammp-plans)
- [Connect Hosting](https://connecthosting.net/beammp)
- [Assetto Hosting](https://assettohosting.com/en/games/beamng)
- [ZAP-Hosting](https://zap-hosting.com/itsbeammp)
- [HostHavoc](https://hosthavoc.com/)
- [PedalHost](https://pedal.host/)
- [Vyper Hosting](https://vyperhosting.com/r/beammp)
- [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting)
- [Four Seasons Hosting](https://fourseasonshosting.com)
- [Vertuo Hosting](https://vertuohosting.com)
- [Winheberg](https://winheberg.fr/offres/gaming/beammp?lang=en)
- [Wabbanode](https://wabbanode.com/partner/beammp)
- [Iceline Hosting](https://iceline-hosting.com/games/beammp)
#### 1.1 防火墙
根据你的设置,你可能需要允许 BeamMP-Server 通过防火墙。在 Windows 上通常需要这样操作(关闭防火墙通常 **无效**),在许多预装的 Linux 服务器上也是如此
在这里,你需要允许 BeamMP-Server 通过防火墙,**包括入站和出站连接**,并且 **包括 TCP 和 UDP**。如果防火墙要求指定端口,则必须使用你在步骤“1. 端口转发”中使用的相同端口(通常为 30814)。
如需更详细的指南,请参阅 [此文档页面](https://docs.beammp.com/FAQ/Defender-exclusions/)。<br>如果遇到问题,也欢迎随时在我们的 [论坛](https://forum.beammp.com) 或 [Discord 服务器](https://discord.gg/beammp) 的 `#support` 频道中提问。
### **2. 获取认证密钥**
‘认证密钥’,通常称为 ‘AuthKey’,是使 **公共** 服务器可以通过服务器列表访问所必需的。虽然也建议将 AuthKey 添加到私人服务器。你拥有的密钥数量有限。一个密钥一次只能用于一台服务器,因此不能用同一个密钥同时启动两台服务器。通过支持该项目可以获得更多密钥。更多信息请参阅 [这篇文章](https://docs.beammp.com/support/player-faq/)。
!!! 警告
```
千万不要把密钥给别人看,把它当作密码!
```
此步骤需要一个 [Discord](https://discord.com) 账号。此举是为了防止垃圾信息。
#### 2.1. 访问密钥页面
通过 Discord 登录至 [Keymaster](https://keymaster.beammp.com)。在 Keymaster 主页中,点击屏幕左侧的“Keys(密钥)”:
<figure markdown=""> ![](../../assets/content/keymaster_homepage.png) </figure>
#### 2.2. 创建密钥
要创建密钥,请单击右上角的绿色“+”按钮。
<figure markdown=""> ![](../../assets/content/keymaster_new_key.png) </figure>
#### 2.3. 填写关键信息
接下来,填写服务器名称字段(这只是密钥的名称,而不是服务器列表上显示的实际名称),然后点击“Create”。范例:
<figure class="image image_resized" style="width:44.84%;" markdown=""> ![](../../assets/content/keymaster_server_name.png) </figure>
最后,它看起来应该是这样的:
<figure markdown=""> ![](../../assets/content/keymaster_key_done.png) </figure>
#### 2.4. 复制密钥
现在复制“Key”字段中的文本,在此范例中为 `3173a2e-6az0-4542-a3p0-ddqq5ff95558`,并保存以便下一步使用。你可以点击密钥右侧的剪贴板图标来完成复制:
<figure markdown=""> ![](../../assets/content/keymaster_copy_key.png) </figure>
### **3. 安装**
BeamMP-Server适用于Windows和Linux。接下来的两节分别介绍Windows和Linux。
#### 3.a. 安装在Windows上
对于Linux安装,请参见下一步。
在尝试在家托管服务器之前,请确保已完成端口转发!如果端口未转发,你将无法向公众托管服务器!
1. 请确保已安装 [Visual C++ 可再发行组件](https://aka.ms/vs/17/release/vc_redist.x64.exe) 以运行服务器。
2. 从 [beammp.com](https://www.beammp.com/) 下载服务器可执行文件。你将得到一个可执行文件,名称类似于 `BeamMP-Server.exe`
3. 下载完成后,在某个位置创建一个文件夹,并将 `BeamMP-Server.exe` 放入其中。这就是你的服务器端所在的位置。
4. 双击启动服务器一次。这将为你生成所有必要的文件,当你看到文本输出后即可关闭并进行下一步。你应该会在 `BeamMP-Server.exe` 旁看到一个 `ServerConfig.toml` 文件。
5. (可选)为了日后快速访问,你可以轻松为 `BeamMP-Server.exe` 创建桌面快捷方式,方法是 **[右键点击]** &gt; **发送到** &gt; **桌面(创建快捷方式)**
现在继续进行步骤 [4. 配置](#4-configuration)。
#### 3.b. 在Linux上安装
##### 使用我们的版本(推荐)
此步骤适用于我们在 [此处](https://github.com/BeamMP/BeamMP-Server/releases/latest) 提供二进制文件的所有发行版。如果你使用的是其他发行版或架构,请参考下方的“从源码构建”步骤。
1. 请确保已安装列在 [此处](https://github.com/BeamMP/BeamMP-Server#runtime-dependencies) 的依赖项。
2. 访问 [beammp.com](https://beammp.com/) 并点击“Download Server”按钮,你将被重定向到服务器的 Github 发布页面。
3. 下载与你的发行版对应的正确版本。为了简便起见,今后将其称为 `BeamMP-Server-xxx`,其中 `xxx` 表示你所使用发行版的版本。
4. 下载完成后,你应该会看到一个名为 `BeamMP-Server-xxx` 的文件,其他文件暂时可以忽略。在某个位置创建一个文件夹,并将 `BeamMP-Server-xxx` 放入其中。这就是你的服务器所在的位置。
5. 打开终端,进入你放置 `BeamMP-Server-xxx` 的文件夹,并运行 `chmod +x BeamMP-Server-xxx`。这可以确保你有权限运行它。
6. 运行 `./BeamMP-Server-xxx` 启动服务器一次。这将为你生成所有必要的文件,当你看到文本输出后即可关闭并进行下一步。你应该会在 `BeamMP-Server-xxx` 旁看到一个 `ServerConfig.toml` 文件。
7. 可选)强烈建议创建一个名为 `beammpserver`(或类似名称)的用户,因为我们不建议以 root、sudo 或你的个人用户账号运行服务器。之后,你应采取措施确保服务器仅以该用户身份启动。
现在继续进行步骤“4. 配置”。
##### 从源码编译
除了我们在 [此处](https://github.com/BeamMP/BeamMP-Server/releases/latest) 提供二进制文件的发行版外,其他发行版也可能可用,但不在官方支持范围内。如果你想自行编译,可以从我们的 [GitHub](https://github.com/BeamMP/BeamMP-Server) 下载源码,教程可在 [此处](https://github.com/BeamMP/BeamMP-Server#build-instructions) 找到。
最后,确保运行一次服务器:`./BeamMP-Server`,然后继续进行下一步。
### **4. 配置**
现在你已经运行过一次服务器,它应该已经生成了一些文件,并可能出现了一两个错误。这是正常的,因为我们还没有完成。你的文件夹中应该包含以下文件:
<figure markdown=""> ![](../../assets/content/after-running-once.png) </figure>
它们分别是 ServerConfig.toml’、‘Server.logBeamMP-Server.exe’!(根据你的设置,你可能看不到 [.toml]、[.log]、[.exe] 后缀)
使用文本编辑器(例如 `Notepad`)打开 `ServerConfig.toml`。你可以通过 [右键点击] → “打开方式…” 然后选择文本编辑器来完成此操作。
以下是一个示例配置:
```TOML
[General]
Port = 30814
AuthKey = "auth-key"
AllowGuests = false
LogChat = false
Debug = false
IP = "::"
Private = true
InformationPacket = true
Name = "Test Server"
Tags = "Freeroam,Modded,Racing,Police"
MaxCars = 2
MaxPlayers = 10
Map = "/levels/ks_nord/info.json"
Description = "Total Random Beam MP Server"
ResourceFolder = "Resources"
```
!!! info
```
这是您的配置文件。它采用了一种名为 TOML的格式。有关该文件及其变量的更多信息,请参考 [Server Maintenance(服务器维护)](server-maintenance.md) 章节。
只要设置了`Private = true`,您的服务器就不会出现在服务器列表中。如果您希望服务器在列表中显示,请将其设置为`Private = false`
```
目前,我们只需要关注 `AuthKey`字段。请将你在第一步中复制的AuthKey粘贴到引号 `''`之间。
对于我们的范例密钥,它应该是这样的:
```TOML
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'
```
同时,请在`Name`字段中为您的服务器命名。您可以为其设置颜色或其他样式,具体请参考服务器维护页面中关于[名称自定义的章节](server-maintenance.md#customize-the-look-of-your-server-name)。
如果你选择了除 **30814** 之外的其他 **端口**,请确保在 `Port` 下进行替换。
### **5. 验证**
现在再次运行你的服务器,看看是否还会出现 `[ERROR]``[WARN]` 消息。此时服务器应该会保持开启状态。在下面的步骤(6.)中,你可以了解如何加入服务器。
---
#### 5.1 怎么添加模组到我的服务器中
车辆模组和地图模组的安装方式不同,但都需要将它们放入服务器的 (`Resources/Client`) 文件夹中。只需将你想添加的模组放入该文件夹即可。
!!! 警告
```
如果在添加模组后尝试加入服务器时收到“done”或“start”消息,很可能是因为你向服务器添加了不兼容或损坏的模组。
模组之间也可能存在不兼容的情况。如果你在客户端安装了模组,请查阅本指南
了解如何从游戏中移除模组。
```
#### 5.2 一般的模组
如果你只想添加带模组的车辆,只需将模组的 zip 文件放入 `Resources/Client` 文件夹。加入你服务器的任何人都会自动下载这些模组。
#### 5.3 地图
所有默认地图(非模组的地图)都可以开箱即用,无需安装。您只需在 `ServerConfig.toml` 文件中将 `Map` 设置更改为 [这些](server-maintenance.md#all-vanilla-maps-names) 中的任意一个。对于任何其他模组地图,请执行以下操作:
1. 将你的地图 `.zip` 文件放入服务器的 (`Resources/Client`) 文件夹中。
2. 接下来,查看地图的 zip 文件内容(不要解压),并打开 `levels` 文件夹。在此文件夹中,应仅有一个以地图名称命名的子文件夹,例如 “myawesomedriftmap2021”。请确保 *完全按照该文件夹的名称复制或记住这个名称*
3. 打开你的 `ServerConfig.toml`。在 `Map` 设置中,你应该会看到 `/levels/MAPNAME/info.json`,其中 `MAPNAME` 可能类似于 `gridmap_v2`。现在,你需要将此 `MAPNAME` 替换为上一步中子文件夹的名称,在本例中是 `myawesomedriftmap2021`。最终它应像下面这样(以本例为例),并且 ***必须*** 在末尾保留 `/info.json`
```TOML
Map = '/levels/myawesomedriftmap2021/info.json'
```
现在,当有人加入你的服务器时,地图应会自动下载并正常运行。
**如果这不起作用**,请在你的单人模式 BeamNG.drive 中安装该地图,启动并进入地图。然后,通过按 `~`(*波浪号*)键打开控制台(如果你使用非美式键盘,请在 **选项 &gt; 控制 &gt; 绑定** 菜单的 **通用调试** 部分中查看 **切换系统控制台** 的操作),并运行 `print(getMissionFilename())`。这样就会显示你需要使用的地图名称。
就这样!你添加的模组地图现在应该可以加入了!
### **6. 怎么加入你的服务器**
你和其他玩家如何加入你的服务器。
#### 6.a. 加入您自己的服务器(私有和公共)
如果你的服务器与游戏运行在同一台电脑上,你必须通过直接连接加入服务器。为此,请在服务器列表左侧点击 **Direct Connect Tab**。保持默认信息(应为 127.0.0.1 及对应端口),然后点击连接。
如果你的服务器托管在本地网络中的另一台电脑上,你必须找到该电脑的本地 IP,并使用该本地 IP 进行直接连接。
如果你的服务器托管在家外(例如 VPS),你必须找到该机器的 [公网 IP](https://whatismyipaddress.com/) 并通过该方式进行直接连接。
#### 6.b. 其他人加入您的私人服务器
你必须将服务器的公网 IP 地址提供给其他用户。但请注意,不要随意将你的公网 IP 地址分享给陌生人!要加入你的私人服务器,玩家必须在 BeamMP 中进入 **Direct Connect Tab**,然后输入你的 IP 和端口。
#### 6.c. 其他人加入您的公共服务器
若要加入您的公开服务器,其他玩家只需前往服务器列表,输入服务器名称并点击连接即可。如果您不确定自己的服务器名称,请查看您在 `ServerConfig.toml`中填写的名称。<br>如果找不到服务器,请确保已禁用所有搜索过滤器,并将地图设置为“全部”。您也可以前往 [Keymaster](https://keymaster.beammp.com/) 网站查看服务器的 IP 地址。
如果你或你的朋友遇到“Connection Failed!”错误,请查看启动器窗口中的代码,如 10060、10061、10030。这意味着你要么使用了 CGNAT IPv4,要么在步骤 **1 端口转发****1.1 防火墙** 中操作有误。要检查是否使用 CGNAT IPv4,请在路由器界面上查看 WAN IP 地址,并将其与你的 [公网 IP](https://www.whatsmyip.org/) 进行比较。如果两者相同,则表示你不在 CGNAT 后面。IPv6 支持尚未 **实现**
### **7. 如何检查您的BeamMP-Server的连通性**
在下方输入服务器的公网 IPv4 和端口,然后点击“CheckBeamMP”。
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP 地址:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">端口:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
!!! warning "我想使用 RadminVPN、Hamachi 或类似的 VPN。"
```
BeamMP 不支持这些 VPN,因为它们经常引发问题。其中一个问题是 UDP 流量无法转发。要解决此问题,请参考第 1 节。
!!! question "那为什么以前可以用?"
这是因为这些应用程序的开发者更新了软件并实施了 BeamMP 无法控制的更改。
是否支持像 BeamMP-Server 这样的特定使用场景,由这些应用程序的开发者决定。
```
## 还有问题吗?
在 [论坛](https://forum.beammp.com) 或我们的 [Discord 服务器](https://discord.gg/beammp) 的 `#support` 频道中发起一个讨论帖。
+220
View File
@@ -0,0 +1,220 @@
# 端口转发
!!! 风险 ":material-scale-balance: 免责声明:"
```
“端口转发存在风险”。
通过端口转发,你理解将家庭网络端口向公众开放的风险,因此无权追究 BeamMP 对你或你家庭可能发生的 任何 损害负责。
我们对任何外部链接服务或网站上的内容不承担任何责任。
<u>如果你不理解本指南,请考虑使用我们的合作伙伴提供的服务。</u>
```
!!! 警告
```
请确保你的路由器不是仅支持 4G/5G 的设备。如果是混合设备,请在本指南第 3 节中选择有线连接的适配器!
```
## 怎么设置端口转发
创建端口转发规则涉及一些详细的网络术语。在操作过程中,请准备记录一些笔记。
本指南共有 4 个主要步骤。
## 快速指南(更详细的指南见下文)
<div class="grid cards" markdown>
</div>
<ul data-md-type="list" data-md-list-type="unordered" data-md-list-tight="false">
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-dns:{ .lg .middle } <strong data-md-type="double_emphasis">为你的电脑或设备分配一个静态 IP 地址</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">这是为了防止你的设备 IP 发生变化,从而导致端口转发规则失效。</p>
<p data-md-type="paragraph"><a href="https://portforward.com/router.htm#1" data-md-type="link">:octicons-arrow-right-24: 查看你的路由器信息</a></p>
</li>
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-router-wireless:{ .lg .middle } <strong data-md-type="double_emphasis">登录你的路由器</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">通常可以通过查找‘默认网关’IP 来完成,此 IP 可在命令提示符执行 <code data-md-type="codespan">ipconfig</code> 时找到,然后将其输入浏览器地址栏。</p>
</li>
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-lan-connect:{ .lg .middle } <strong data-md-type="double_emphasis">将端口转发到你的电脑</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">在路由器的网页界面中找到端口转发部分。大多数路由器会将端口转发部分列在网络(Network)、高级(Advanced)或局域网(LAN)下。</p>
</li>
<li data-md-type="list_item" data-md-list-type="unordered">
<p data-md-type="paragraph">:material-test-tube:{ .lg .middle } <strong data-md-type="double_emphasis">测试端口是否已正确转发</strong></p>
<hr data-md-type="hrule">
<p data-md-type="paragraph">使用像 CheckBeamMP 这样的工具测试规则是否生效。</p>
<div data-md-type="block_html">
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP address:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">端口:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
</div>
</li>
</ul>
<div data-md-type="block_html"></div>
## 详细指南
### 1. 分配静态 IP 地址
### 方法 1:通过 DHCP 保留设置静态 IP 地址
在本地网络中设置静态 IP 地址的另一种方法是使用路由器的 DHCP 保留功能。并非所有路由器都具备此功能,因此这可能不适用于你。请使用你的路由器型号在网上搜索使用手册。
如果你已经完成此操作,请直接跳到 [第 2 步](port-forwarding.md#2-log-in-to-your-router)。
### 方法 2:在 Windows 中分配静态 IP 地址
#### 1.1. 查找您当前的IP地址、网关和DNS服务器:
在设置静态IP地址之前,我们需要先了解您当前的网络设置。您可能需要记下这些信息,因此请提前打开记事本窗口备用。这一步我们将使用命令提示符进行操作。
打开命令提示符。主要有以下三种方式:
- 按下Windows键,然后输入“cmd”,当看到“命令提示符”高亮显示时按Enter键。
<figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-open-cmd.png) </figure>
一旦您进入了命令提示符,运行以下命令:
```
ipconfig /all
```
你会看到大量数据。如果你有虚拟或多个网络适配器,那么你会看到更多数据。如果安装了 Hyper-V 或 Docker,通常会出现许多虚拟适配器。
<figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-command-prompt-ipconfig-highlighted.png) </figure>
建议使用有线网络连接来运行此服务器,但无线连接也可正常工作。您需要在此列表中寻找具有活跃互联网连接的适配器。滚动列表并找到已分配默认网关的适配器,许多虚拟适配器通常没有默认网关。
以下是本地IPv4地址示例,至少有一个适配器应具备这些地址。您需要记下适配器的信息。
- 192.168.x.x
- 10.x.x.x.
- 172.16.x.x - 172.31.x.x
子网掩码(常见取值为255.255.255.0 <br>默认路由地址(典型配置为192.168.0.1或192.168.1.1
!!! info "请注意" BeamMP 目前不支持使用 IPv6 协议托管服务器。
#### 1.2. 修改适配器设置
现在我们需要更改网络适配器的设置,以便您的计算机能够维持当前分配的IP配置。访问网络设置的最快捷途径是:
- 单击Windows键
- 输入“网络连接”,直到您看到“查看网络连接”。
- 按下回车键
<figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-start-menu-view-network-connections.png) </figure>
你会看到电脑上的网络连接列表。如果你安装了 Hyper-V 或 Docker,可能会有很多适配器。请寻找任何不命名为 "Hyper-V" 的适配器。
<figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-network-connections.png) </figure>
右键点击您的适配器并选择属性。如果`互联网协议版本4`未被勾选,则表明此适配器选择有误,请更换其他适配器。
<figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-ethernet-properties-highlighted.png) </figure>
双击`互联网协议版本4`。将`自动获取IP地址`更改为`使用以下IP地址`
使用命令提示符(ipconfig /all)中的信息填写IP地址、子网掩码、默认网关和首选DNS服务器。
或者,您也可以不使用当前DNS服务器,而选择CloudFlare或Google提供的DNS服务器:
- CloudFlare DNS: 1.1.1.1, 1.0.0.1
- Google DNS: 8.8.8.8, 8.8.4.4
<figure class="image image_resized" style="width:62%;" markdown=""> ![](../../assets/content/win11-network-settings-static-ip.png) </figure>
点击确定,然后再次点击确定,您的适配器现在已从DHCP更改为静态IP配置。请上网浏览以确认是否仍然保持互联网连接。如果无法连接,请将设置改回自动获取IP地址,并尝试下一种方法。
### 2. 登录您的路由器
既然您的设备已设置静态IP地址,现在可以开始为BeamMP配置端口转发。
首先,我们需要登录到您的路由器。之前您记录下来的设置中包括默认网关,该地址即为您路由器的IP地址。
大多数路由器通过本地网页界面进行管理。要访问路由器的管理菜单和设置:
- 打开一个浏览器,Firefox, Chrome 或 Edge应该都可以正常工作
- 在地址栏中,输入您的默认网关IP地址,例如 192.168.0.1 或 192.168.1.1,然后按回车键。
现在您应该能看到路由器的登录界面。并非所有路由器都需要登录,但大多数都需要。您需要知道路由器的用户名和密码。如果是首次登录,用户名和密码很可能仍为出厂默认值,或者在某些情况下会印在路由器的贴纸标签上。
以下是部分最常见的出厂默认用户名与密码列表:
用户名 | 密码
--- | ---
admin | admin
admin | password
{blank} | admin
{blank} | password
尝试使用admin、password等不同组合,或直接留空输入框。*若提示留空,请尝试不填写任何内容。*
### 3. 创建转发规则
#### 3.1. 查找端口转发设置的地方
在路由器网页界面中找到端口转发设置区域。请通过点击页面顶部或左侧的选项卡或链接来浏览路由器菜单。大多数路由器会将端口转发功能列在"网络"、"高级"或"局域网"等分类下。留意查找以下关键词来定位该功能:
- 端口转发
- 转发
- 端口范围转发
- 虚拟服务器
- 应用程序 &amp; 游戏
- 高级配置/设置
- NAT
#### 3.2. 填写详细信息
找到路由器的端口转发设置后,即可开始输入必要信息。路由器会提供输入区域用于填写需要转发的端口号以及对应的目标IP地址。若路由器同时显示内部端口和外部端口选项,请确保填写相同的端口号以保持一致。
BeamMP 需要同时开放 UDP 和 TCP 协议的 30814 端口(除非您已在 [ServerConfig.toml](create-a-server.md#4-configuration) 配置文件中修改过此端口)。
!!! info "注意" <br>虽然默认端口为 **30814**,您也可以选择1024至65535之间的其他端口号(若使用非默认端口需自行记录)。需要同时转发 **TCP****UDP** 协议。 <br>建议保持使用默认端口,因此端口被本机其他服务占用的可能性极低。若需在同一台机器上部署多个服务器,则每个服务器需使用不同端口(例如:服务器1使用30814,服务器2使用30815)。
在某些路由器中,您可能需要创建两条规则(一条用于UDP,另一条用于TCP),而有些路由器则更便捷,允许您通过单条规则同时设置两种协议!
绝大多数路由器都设有“保存”按钮,而部分机型在更改生效前还需重启或复位系统。
### 4. 测试一下!
连接测试可通过以下几种不同方式进行。
我们推荐的方式是使用我们的工具 **CheckBeamMP**,因为它能够检测BeamMP特有的问题和协议。
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
<label for="ip">IP address:</label>
<input type="text" id="ip" name="ip"><br>
<label for="port">Port:</label>
<input type="text" id="port" name="port"><br>
<input type="submit" value="CheckBeamMP">
</form>
可通过获取您的公网IPv4地址来实现,该方法同样有几种不同的操作方式。主要方法是访问名为 [whatsmyip.org](https://whatsmyip.org/) 的网站,这是一个能直接显示您公网IP地址的简易网站。您需要找到格式为 xxx.xxx.xxx.xxx 的IP地址。
访问以下链接,并将“IP”替换为您的实际IPv4地址,“Port”替换为您的服务器端口。请确保不留空格。https://check.beammp.com/api/v2/beammp/ip/port
!!! 成功 "status: ok"
```
若获得上述输出结果,即可加入您的服务器! 有两种连接方式:既可通过在端口转发工具中配置的详细信息直接连接,也可在服务器设置为"公开"状态下通过服务器列表加入。 由于您采用的是本地托管服务器,若服务器与游戏运行在同一台电脑上,请使用 127.0.0.1(本地主机);若服务器运行在局域网内的其他机器上,则使用该服务器的局域网IPv4地址。
```
!!! 失败 "status: error"
```
如果连接完全失败,您的ISP可能正在使用CGNAT(运营商级网络地址转换)。有关更多详细信息,请查看[如何检查CGNAT](../FAQ/How-to-check-for-CGNAT.md),或者在我们的[Discord服务器](https://discord.gg/beammp)的`#support`频道中提交服务器支持工单,我们的工作人员会处理您的工单!如果您只看到TCP工作而UDP失败,请再次检查防火墙和端口转发规则。
```
+246
View File
@@ -0,0 +1,246 @@
# 服务器维护
有关如何配置和维护 BeamMP 服务器的指南、提示和技巧。
## 怎么安装
有关安装说明,请查看 [服务器安装](create-a-server.md).
## ServerConfig文件
服务器配置,即一个名为`ServerConfig.toml`的文件, 使用了 [TOML 格式](https://toml.io/en/).
*注意**旧的*服务器配置文件名为`Server.cfg`,但该文件已不再使用,若其仍存在服务器将发出警告。另请注意,两种配置格式**不**相互兼容。
该配置文件默认包含一个名为`[General]`的节,该节包含以下值:
Key | 值类型 | 描述
--- | --- | ---
Port | 1024-65535 | 服务器可访问的网络端口。(必须是唯一的,且不能被同一主机上的其他服务占用)
AuthKey | 认证密钥格式为`xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`,其中所有x代表字母数字字符(数字和字母)。 | 用于通过后端识别公共集合服务器。
AllowGuests | true/false | 决定游客是否可以加入服务器。
LogChat | true/false | 当启用(设置为“true”)时,聊天消息会被记录在 server.log 文件中。
Debug | true /false | 当启用(true)时,将在日志中显示更多消息并提供更多信息。如果遇到问题,请启用此选项。启用此选项将显著增加日志文件的大小。
IP | 连接到主机的其中一个网卡(NIC)的本地分类地址。(默认值:"0.0.0.0" 或 "::" | 服务器将尝试绑定到所提供的 IP。除非您清楚自己在做什么,否则请勿随意修改IP字段。此数值无需更改即可使服务器正常运行。
Private | true/false | 当启用(true)时,您的服务器将不会显示在服务器列表中。任何拥有正确IP地址和端口的人仍然可以连接。
InformationPacket | true/false | 当启用(true)时,服务器将允许未经身份验证的客户端直接通过服务器获取与服务器列表中相同的信息。
Name | Any "text" | 在服务器列表中显示为您的服务器名称/标题。您可以使用特殊字符来为其添加颜色和样式。
Tags | 请参见下方允许的标签列表。 | 标签用于搜索 e.g. Police, Racing etc...
MaxCars | 数字永远 ≥ 1 | 每位玩家的最大车辆数量。玩家尝试生成的额外车辆将被立即删除。
MaxPlayers | 数字永远 ≥ 1 | 每个服务器的最大玩家数量。这不影响车辆数量。
Map | 需要一个有效的地图位置,例如`/levels/gridmap_v2/info.json` | 你的服务器将要托管的地图。必须默认安装(下方可找到列表)或作为服务器模组安装。
Description | 永远只能填写 "文本" | 在服务器列表中显示为服务器的描述(如果服务器是公开的)。你可以使用特殊字符来格式化这个描述,包括颜色和样式。
ResourceFolder | 有效的文件夹位置,例如 "D:\Server\BeamMP\Resources" | 便于将服务器和资源文件夹分开存储。
ImScaredOfUpdates | true/false | 这设置服务器在新版本发布时是否自动更新。
UpdateReminderTime | 任何带有s、min、h、d后缀的数字(例如30s)。 | 设置在终端中打印的更新提醒消息的间隔。
其他部分可以并且应该由服务器插件使用(Lua API 即将推出),例如:`[MyMod]`
AuthKey **必须**由你自己来设置。<br>默认情况下它是空的,需要填入你之前安装步骤中获得的 AuthKey。<br>请勿将此密钥分享给任何人,在截图时要完全模糊处理此密钥。
### 所有原版地图名称
以下是所有原版地图:
- /levels/gridmap_v2/info.json
- /levels/johnson_valley/info.json
- /levels/automation_test_track/info.json
- /levels/east_coast_usa/info.json
- /levels/hirochi_raceway/info.json
- /levels/italy/info.json
- /levels/jungle_rock_island/info.json
- /levels/industrial/info.json
- /levels/small_island/info.json
- /levels/smallgrid/info.json
- /levels/utah/info.json
- /levels/west_coast_usa/info.json
- /levels/driver_training/info.json
- /levels/derby/info.json
### 自定义你的服务器名称外观
在服务器列表中,在你的文本前使用这些特殊符号,即可为该文本应用对应效果:
值 | 描述
:-: | ---
`^r` | 重设
`^p` | 换行(仅描述)
`^n` | 下划线
`^l` | 加粗
`^m` | 删除线
`^o` | 斜体字
`^0` | 黑色
`^1` | 蓝色
`^2` | 绿色
`^3` | 亮蓝色
`^4` | 红色
`^5` | 粉色
`^6` | 橙色
`^7` | 灰色
`^8` | 深灰色
`^9` | 亮紫色
`^a` | 亮绿色
`^b` | 亮蓝色
`^c` | 深橙色
`^d` | 亮粉色
`^e` | 黄色
`^f` | 白色
### 自定义您的服务器标签
标签可用于让人们搜索特定类型的服务器。 <br>你的 serverConfig.toml 将会自动生成带有 freeroam 标签的配置: <br>`Tags = "Freeroam"`
你可以添加多个标签,用逗号分隔 <br>`Tags = "Events,Offroad,lang:english"` <br>标签不区分大小写。
你可以从以下列表中选择:
- 年龄/内容:
- `Mature/18+`
- 游戏玩法类型:
- `Freeroam`
- `Roleplay`
- `Economy`
- `Traffic`
- 比赛类型:
- `Racing`
- `Racing:NASCAR`
- `Racing:Track`
- `Racing:Drag`
- `Racing:Rally`
- `Touge`
- 越野活动与挑战:
- `Offroad`
- `Crawling`
- `Dakar`
- `Challenge`
- 破坏事件:
- `Derby`
- `Arena`
- 天气与时间状况:
- `Snow/Ice`
- `Rain`
- `Night`
- `Weather`
- 游戏模式:
- `Gamemode`
- `Gamemode:Racing`
- `Gamemode:Rally`
- `Gamemode:Drag`
- `Gamemode:Derby`
- `Gamemode:Infection`
- `Gamemode:Cops-Robbers`
- `Gamemode:Delivery`
- `Gamemode:Sumo`
- 社区与活动:
- `Scenarios`
- `Events`
- `Leaderboard`
- 模组:
- `Modded`
- `Mod:BeamPaint`
- `Mod:BeamJoy`
- `Mod:CEI`
- 语言:
- `Lang:English`
- `Lang:Russian`
- `Lang:French`
- `Lang:Spanish`
- `Lang:Portuguese`
- `Lang:German`
- `Lang:Polish`
- `Lang:Arabic`
- 其他:
- `Vanilla`
- `Moderated`
如果某个标签不在此列表中,你可以提交请求要求添加 [在这里](https://forum.beammp.com/t/introducing-server-tags/1320081)
## Server.log 文件
此文件将在服务器运行时生成。它是你在运行服务器时控制台中看到的日志的镜像。 <br>每次需要向我们的支持人员寻求帮助时,都应附上此文件,而且它永远不会显示你的 AuthKey,因此通常无需修改即可直接发送。
格式如下($ 前缀表示“变量”,详见下方说明):
```
[$DATE $TIME] $CONTEXT [$LOG_LEVEL] $MESSAGE
```
地点:
- `$DATE` 是消息的日期,例如 21/07/2021
- `$TIME` 是消息的时间,例如 11:05:23
- `$CONTEXT`(仅在调试模式下可见,主要与开发者相关)是消息的上下文,可能为以下之一:
- `(Player ID) “Player Name”`,其中玩家的ID对管理非常有用
- 翻译 一个简短的名称,例如 “HeartbeatThread”
- `$LOG_LEVEL` 是消息重要性级别之一:
- `DEBUG`:仅在调试模式下可见,通常信息量很大,仅对开发者重要
- `INFO`:一般信息
- `LUA`:来自 Lua 插件的消息
- `WARN`:描述了通常不应该发生的事情。
- `ERROR`:发生了非常严重的问题,或者出现了完全意料之外的情况
- `FATAL`:发生了导致服务器关闭的事件
- `$MESSAGE` 消息本身,通常是你需要注意并理解的内容。 <br>在某些情况下它可能显得比较隐晦,但一般规则是:只要服务器表面上没有任何明显问题,也没有出现 ERROR,那就一切正常。
## 更新服务器
### 为什么要更新服务器
每次发布新更新时,建议你更新服务器。通常这包括错误修复、稳定性提升和安全性改进,同时还会引入新的通用功能等。
要接收更新发布时的新闻,你可以:<br>关注 Discord 服务器的“update”频道 <br>在论坛上留意相关信息 <br>查看或询问 [GitHub releases 页面](https://github.com/BeamMP/BeamMP-Server/releases)
### 怎么更新服务器
#### 如果你正在使用 BeamMP 合作的托管服务提供商
如果你正在使用 BeamMP 合作的托管服务提供商,下面的说明很可能不适用。 <br>我们建议你等待托管服务提供商提供更多详细信息,或者直接联系他们寻求帮助。
#### 管理自己的服务器
服务器通过将旧的可执行文件替换为新的来更新。 <br>如果你不确定如何操作,下面提供了 Windows 和 Linux 的分步说明。
如果你是从源代码构建的,只需重新构建即可。 <br>在重新构建之前,请确保运行以下命令: <br>`git submodule update --init --recursive`
#### 在Windows中
1. 确保你已安装 [Visual C++ Redistributables](https://aka.ms/vs/17/release/vc_redist.x64.exe),以便运行服务器。
2. 前往 [BeamMP.com](https://beammp.com/) 并点击“Download Server”按钮。
3. 下载完成后,你应该会看到一个名为 `BeamMP-Server.exe` 的文件。我们将这个文件称为“新可执行文件”。
4. 前往你的当前 `BeamMP-Server.exe` 可执行文件所在的文件夹(通常也是 `ServerConfig.toml` 所在的同一文件夹)。我们将这个文件称为“旧可执行文件”。
5. 将旧的可执行文件替换为新的可执行文件(例如,通过复制或移动新可执行文件到该文件夹中)。
#### 在Linux中
1. 前往 [BeamMP.com](https://beammp.com/) 并点击“Download Server”按钮,你将被重定向到服务器的 GitHub Releases 页面。
2. 下载适用于你发行版的正确版本。为方便起见,从现在起我们将它称为 `BeamMP-Server-xxx`,其中 `xxx` 表示你所使用发行版的对应版本。
3. 下载完成后,你应该会看到一个名为 `BeamMP-Server-xxx` 的文件(具体名称取决于你下载的版本)。 <br>我们将这个文件称为“新可执行文件”。
4. 前往你的当前 `BeamMP-Server-xxx` 可执行文件所在的文件夹(通常也是 `ServerConfig.toml` 所在的同一文件夹)。 <br>我们将这个文件称为“旧可执行文件”。
5. 将旧的可执行文件替换为新的可执行文件(例如,通过复制或移动新可执行文件到该文件夹中)。
6. 在你刚刚替换可执行文件的那个文件夹中打开终端,然后运行以下命令: <br>`sudo chmod +x BeamMP-Server-xxx` <br>这将确保服务器可以被运行。
### 自动更新
服务器(目前)不支持自动更新或更新通知。
不过,你可以通过向 GitHub API 查询最新 release 来检查服务器版本与标签的对比。 <br>你可以通过 GET 请求从以下地址获取: <br>`https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags`
+74 -14
View File
@@ -91,6 +91,9 @@ extra:
- name: Pусский - name: Pусский
link: /ru/ link: /ru/
lang: ru lang: ru
- name: 中文
link: /zh/
lang: zh
homepage: / homepage: /
plugins: plugins:
@@ -113,7 +116,8 @@ plugins:
Error Codes: Códigos de error Error Codes: Códigos de error
Multiplayer Settings: Ajustes multijugador Multiplayer Settings: Ajustes multijugador
Running a Server: Ejecutando un Servidor Running a Server: Ejecutando un Servidor
Server Installation: Instalación del Servidor Server Setup (Home): Configuración del servidor (Inicio)
Server Setup (VPS): Configuración del servidor (VPS)
Server Maintenance: Manutención del Servidor Server Maintenance: Manutención del Servidor
Error Codes: Códigos de error Error Codes: Códigos de error
Server Manual: Manual del Servidor Server Manual: Manual del Servidor
@@ -123,7 +127,7 @@ plugins:
FAQ: FAQ FAQ: FAQ
How to check for CGNAT?: Cómo comprobar si hay CGNAT? How to check for CGNAT?: Cómo comprobar si hay CGNAT?
Where can I find my IP address?: ¿Dónde puedo encontrar mi dirección IP? Where can I find my IP address?: ¿Dónde puedo encontrar mi dirección IP?
How to deactivate my mods?: ¿Cómo desactivar mis mods? How to remove mods?: ¿Cómo se eliminan los mods?
Manually updating the Launcher: Actualizar manualmente el Launcher Manually updating the Launcher: Actualizar manualmente el Launcher
Changing the Launcher port: Cambiar el puerto del Launcher Changing the Launcher port: Cambiar el puerto del Launcher
Creating Exclusions (Defender): Creación de exclusiones (Defender) Creating Exclusions (Defender): Creación de exclusiones (Defender)
@@ -158,7 +162,8 @@ plugins:
Error Codes: Fehlercodes Error Codes: Fehlercodes
Multiplayer Settings: Einstellungen anpassen Multiplayer Settings: Einstellungen anpassen
Running a Server: Server ausführen Running a Server: Server ausführen
Server Installation: Server Installation Server Setup (ome): Server Einrichtung (Zuhause)
Server Setup (VPS): Server Einrichtung (VPS)
Server Maintenance: Server Wartung Server Maintenance: Server Wartung
Error Codes: Fehlercodes Error Codes: Fehlercodes
Server Manual: Server Handbuch Server Manual: Server Handbuch
@@ -168,7 +173,7 @@ plugins:
FAQ: FAQ FAQ: FAQ
How to check for CGNAT?: Wie überprüft man auf CGNAT? How to check for CGNAT?: Wie überprüft man auf CGNAT?
Where can I find my IP address?: Wo finde ich meine IP Adresse? Where can I find my IP address?: Wo finde ich meine IP Adresse?
How to deactivate my mods?: Wie deaktiviere ich meine Mods? How to remove mods?: Wie entferne ich Mods?
Manually updating the Launcher: Den Launcher Manuell updaten Manually updating the Launcher: Den Launcher Manuell updaten
Changing the Launcher port: Ändern des Launcher Ports Changing the Launcher port: Ändern des Launcher Ports
Creating Exclusions (Defender): Ausnahmen erstellen (Defender) Creating Exclusions (Defender): Ausnahmen erstellen (Defender)
@@ -203,7 +208,8 @@ plugins:
Error Codes: Codes d'erreur Error Codes: Codes d'erreur
Multiplayer Settings: Paramètres multijoueurs Multiplayer Settings: Paramètres multijoueurs
Running a Server: Exécution d'un serveur Running a Server: Exécution d'un serveur
Server Installation: Installation du serveur Server Setup (Home): Configuration du serveur (Accueil)
Server Setup (VPS): Configuration du serveur (VPS)
Server Maintenance: Maintenance du serveur Server Maintenance: Maintenance du serveur
Error Codes: Codes d'erreur Error Codes: Codes d'erreur
Server Manual: Manuel du serveur Server Manual: Manuel du serveur
@@ -213,7 +219,7 @@ plugins:
FAQ: FAQ FAQ: FAQ
How to check for CGNAT?: Comment puis-je vérifier cgnat? How to check for CGNAT?: Comment puis-je vérifier cgnat?
Where can I find my IP address?: Où puis-je trouver mon adresse IP? Where can I find my IP address?: Où puis-je trouver mon adresse IP?
How to deactivate my mods?: Comment désactiver mes mods? How to remove mods?: Comment supprimer des mods ?
Manually updating the Launcher: Mise à jour manuelle du lanceur Manually updating the Launcher: Mise à jour manuelle du lanceur
Changing the Launcher port: Changer le port du lanceur Changing the Launcher port: Changer le port du lanceur
Creating Exclusions (Defender): Création d'exclusions (Defender) Creating Exclusions (Defender): Création d'exclusions (Defender)
@@ -248,7 +254,8 @@ plugins:
Error Codes: Codici di errore Error Codes: Codici di errore
Multiplayer Settings: Impostazioni multigiocatore Multiplayer Settings: Impostazioni multigiocatore
Running a Server: Eseguire un server Running a Server: Eseguire un server
Server Installation: Installazione del server Server Setup (Home): Configurazione del server (Home)
Server Setup (VPS): Configurazione del server (VPS)
Server Maintenance: Manutenzione del server Server Maintenance: Manutenzione del server
Error Codes: Codici di errore Error Codes: Codici di errore
Server Manual: Manuale del server Server Manual: Manuale del server
@@ -258,7 +265,7 @@ plugins:
FAQ: FAQ FAQ: FAQ
How to check for CGNAT?: Come verificare la presenza di CGNAT? How to check for CGNAT?: Come verificare la presenza di CGNAT?
Where can I find my IP address?: Dove posso trovare il mio indirizzo IP? Where can I find my IP address?: Dove posso trovare il mio indirizzo IP?
How to deactivate my mods?: Come disattivare le mie mod? How to remove mods?: Come si rimuovono le mod?
Manually updating the Launcher: Aggiornamento manuale del Launcher Manually updating the Launcher: Aggiornamento manuale del Launcher
Changing the Launcher port: Cambiare la porta del Launcher Changing the Launcher port: Cambiare la porta del Launcher
Creating Exclusions (Defender): Creazione di esclusioni (Defender) Creating Exclusions (Defender): Creazione di esclusioni (Defender)
@@ -293,7 +300,8 @@ plugins:
Error Codes: коды ошибок Error Codes: коды ошибок
Multiplayer Settings: Настройки мультиплеера Multiplayer Settings: Настройки мультиплеера
Running a Server: Запуск сервера Running a Server: Запуск сервера
Server Installation: Установка сервера Server Setup (Home): Настройка сервера (Главная)
Server Setup (VPS): Настройка сервера (VPS)
Server Maintenance: Обслуживание сервера Server Maintenance: Обслуживание сервера
Error Codes: коды ошибок Error Codes: коды ошибок
Server Manual: Руководство по серверу Server Manual: Руководство по серверу
@@ -303,7 +311,7 @@ plugins:
FAQ: FAQ FAQ: FAQ
How to check for CGNAT?: Как проверить наличие CGNAT? How to check for CGNAT?: Как проверить наличие CGNAT?
Where can I find my IP address?: Где я могу найти свой IP-адрес? Where can I find my IP address?: Где я могу найти свой IP-адрес?
How to deactivate my mods?: Как деактивировать мод? How to remove mods?: Как удалить моды?
Manually updating the Launcher: Обновление лаунчера вручную Manually updating the Launcher: Обновление лаунчера вручную
Changing the Launcher port: Изменение порта лаунчера Changing the Launcher port: Изменение порта лаунчера
Creating Exclusions (Defender): Создание исключений (Defender) Creating Exclusions (Defender): Создание исключений (Defender)
@@ -327,6 +335,52 @@ plugins:
Contributing: Участие Contributing: Участие
Getting Started: Начало работы Getting Started: Начало работы
Community: Сообщество Community: Сообщество
- locale: zh
name: 中文
build: true
nav_translations:
Home: 首页
Support: 支持
Playing BeamMP: 游玩 BeamMP
Installing BeamMP: 安装 BeamMP
Error Codes: 错误代码
Multiplayer Settings: 多人模式设置
Running a Server: 运行服务器
Server Setup (Home): 服务器设置(首页)
Server Setup (VPS): 服务器设置(VPS
Server Maintenance: 服务器维护
Error Codes: 错误代码
Server Manual: 服务器手册
Mod & Resource Creation: 模组与资源制作
Client Side: 客户端
Server Side: 服务器端
FAQ: 常见问题解答
How to check for CGNAT?: 如何检查CGNAT?
Where can I find my IP address?: 我怎样才能找到我服务器的IP
How to remove mods?: 如何删除模组?
Manually updating the Launcher: 手动更新启动器
Changing the Launcher port: 更改启动器端口
Creating Exclusions (Defender): 创建 Defender 排除项
Player FAQ: 面向玩家的疑难解答
Game FAQ: 游戏常见问题
Server FAQ: 服务器常见问题
Development Guides: 开发指南
Mod Creation: 模组制作
UI Apps: 图形界面-应用程序
IMGUI Windows: IMGUI 窗口
Lua Mods: Lua 模组
Resource Creation: 资源制作
UI Apps: 图形界面-应用程序
Snippets: 片段
BeamNG Documentation: BeamNG.drive 文档
Installation: 安装
Helpful Snippets: 实用代码片段
Scripting Reference: 脚本参考
Mod (In-Game): 游戏内模组
Server: 服务器
Contributing: 参与贡献
Getting Started: 快速开始
Community: 社区
- locale: en - locale: en
default: true default: true
name: English name: English
@@ -353,6 +407,8 @@ markdown_extensions:
- pymdownx.inlinehilite - pymdownx.inlinehilite
- pymdownx.snippets - pymdownx.snippets
- pymdownx.superfences - pymdownx.superfences
- pymdownx.tabbed:
alternate_style: true
nav: nav:
- Home: index.md - Home: index.md
@@ -362,7 +418,8 @@ nav:
- Error Codes: game/error-codes.md - Error Codes: game/error-codes.md
- Multiplayer Settings: game/multiplayer-settings.md - Multiplayer Settings: game/multiplayer-settings.md
- Running a BeamMP-Server: - Running a BeamMP-Server:
- Server Installation: server/create-a-server.md - Server Setup (Home): server/create-a-server.md
- Server Setup (VPS): server/setup-vps.md
- Port Forwarding: server/port-forwarding.md - Port Forwarding: server/port-forwarding.md
- Server Maintenance: server/server-maintenance.md - Server Maintenance: server/server-maintenance.md
- Error Codes: server/error-codes.md - Error Codes: server/error-codes.md
@@ -372,7 +429,7 @@ nav:
- FAQ: - FAQ:
- How to check for CGNAT?: FAQ/How-to-check-for-CGNAT.md - How to check for CGNAT?: FAQ/How-to-check-for-CGNAT.md
- Where can I find my IP address?: FAQ/where-to-find-my-IP.md - Where can I find my IP address?: FAQ/where-to-find-my-IP.md
- How to deactivate my mods?: FAQ/How-to-deactivate-mods.md - How to remove mods?: FAQ/Clearing-mods.md
- Manually updating the Launcher: FAQ/Update-launcher.md - Manually updating the Launcher: FAQ/Update-launcher.md
- Changing the Launcher port: FAQ/Change-launcher-port.md - Changing the Launcher port: FAQ/Change-launcher-port.md
- Creating Exclusions (Defender): FAQ/Defender-exclusions.md - Creating Exclusions (Defender): FAQ/Defender-exclusions.md
@@ -392,13 +449,16 @@ nav:
- Introduction: beamng/dev/index.md - Introduction: beamng/dev/index.md
- Programming: - Programming:
- UI Apps (HTML): beamng/dev/modding/ui-apps.md - UI Apps (HTML): beamng/dev/modding/ui-apps.md
- IMGUI Windows (Lua): beamng/dev/modding/imgui-windows.md - ImGui Window Tutorial: beamng/dev/modding/imgui-window-tutorial.md
- Lua Mods (Scripts): beamng/dev/modding/lua-mods.md - Lua Mods (Scripts): beamng/dev/modding/lua-mods.md
- Content: - Content:
- Maps: beamng/dev/content/maps.md - Maps: beamng/dev/content/maps.md
- Props: beamng/dev/content/props.md - Props: beamng/dev/content/props.md
- Vehicles: beamng/dev/content/vehicles.md - Vehicles: beamng/dev/content/vehicles.md
- Helpful Code Snippets: beamng/snippets.md - Lua Code Snippets: beamng/lua-snippets.md
- CSS Code Snippets: beamng/css-snippets.md
- ImGui Code Snippets: beamng/imgui-snippets.md
- CEF Code Snippets: beamng/cef-snippets.md
- Scripting Reference: - Scripting Reference:
- Mod (In-Game): scripting/mod-reference.md - Mod (In-Game): scripting/mod-reference.md
- Server: - Server:
+6
View File
@@ -0,0 +1,6 @@
{% extends "base.html" %}
{% block extrahead %}
{{ super() }}
<script src="https://analytics.beammp.com/api/script.js" async data-site-id="632c87f003fc"></script>
{% endblock %}