0.0.1
This commit is contained in:
674
resources/[core]/es_extended/LICENSE
Normal file
674
resources/[core]/es_extended/LICENSE
Normal file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is 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. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
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.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
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 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. Use with the GNU Affero General Public License.
|
||||
|
||||
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 Affero 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 special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU 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 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 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 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.
|
||||
|
||||
es_extended
|
||||
Copyright (C) 2015-2024 Jérémie N'gadi
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
es_extended Copyright (C) 2015-2024 Jérémie N'gadi
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
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 GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
13
resources/[core]/es_extended/README.md
Normal file
13
resources/[core]/es_extended/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
<h1 align='center'>es_extended</a></h1><p align='center'><b><a href='https://discord.esx-framework.org/'>Discord</a> - <a href='https://docs.esx-framework.org/legacy/installation'>Documentation</a></b></h5>
|
||||
|
||||
## Legal
|
||||
|
||||
es_extended
|
||||
|
||||
Copyright (C) 2015-2024 Jérémie N'gadi
|
||||
|
||||
This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 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 General Public License For more details.
|
||||
|
||||
You should have received a copy Of the GNU General Public License along with this program. If Not, see <http://www.gnu.org/licenses/>.
|
||||
1367
resources/[core]/es_extended/client/functions.lua
Normal file
1367
resources/[core]/es_extended/client/functions.lua
Normal file
File diff suppressed because it is too large
Load Diff
21
resources/[core]/es_extended/client/imports/class.lua
Normal file
21
resources/[core]/es_extended/client/imports/class.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
local class = {}
|
||||
class.__index = class
|
||||
|
||||
function class:new(...)
|
||||
local instance = setmetatable({}, self)
|
||||
if instance.constructor then
|
||||
local ret = instance:constructor(...)
|
||||
if type(ret) == 'table' then
|
||||
return ret
|
||||
end
|
||||
end
|
||||
return instance
|
||||
end
|
||||
|
||||
function Class(body, heritage)
|
||||
local prototype = body or {}
|
||||
prototype.__index = prototype
|
||||
return setmetatable(prototype, heritage or class)
|
||||
end
|
||||
|
||||
return Class
|
||||
53
resources/[core]/es_extended/client/imports/point.lua
Normal file
53
resources/[core]/es_extended/client/imports/point.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
local Point = ESX.Class()
|
||||
|
||||
local nearby, loop = {}, nil
|
||||
|
||||
function Point:constructor(properties)
|
||||
self.coords = properties.coords
|
||||
self.hidden = properties.hidden
|
||||
self.enter = properties.enter
|
||||
self.leave = properties.leave
|
||||
self.inside = properties.inside
|
||||
self.handle = ESX.CreatePointInternal(properties.coords, properties.distance, properties.hidden, function()
|
||||
nearby[self.handle] = self
|
||||
if self.enter then
|
||||
self:enter()
|
||||
end
|
||||
if not loop then
|
||||
loop = true
|
||||
CreateThread(function()
|
||||
while loop do
|
||||
local coords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
for _, point in pairs(nearby) do
|
||||
if point.inside then
|
||||
point:inside(#(coords - point.coords))
|
||||
end
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end, function()
|
||||
nearby[self.handle] = nil
|
||||
if self.leave then
|
||||
self:leave()
|
||||
end
|
||||
if #nearby == 0 then
|
||||
loop = false
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function Point:delete()
|
||||
ESX.RemovePointInternal(self.handle)
|
||||
end
|
||||
|
||||
function Point:toggle(hidden)
|
||||
if hidden == nil then
|
||||
hidden = not self.hidden
|
||||
end
|
||||
self.hidden = hidden
|
||||
ESX.HidePointInternal(self.handle, hidden)
|
||||
end
|
||||
|
||||
return Point
|
||||
30
resources/[core]/es_extended/client/main.lua
Normal file
30
resources/[core]/es_extended/client/main.lua
Normal file
@@ -0,0 +1,30 @@
|
||||
Core = {}
|
||||
Core.Input = {}
|
||||
Core.Events = {}
|
||||
|
||||
ESX.PlayerData = {}
|
||||
ESX.PlayerLoaded = false
|
||||
ESX.playerId = PlayerId()
|
||||
ESX.serverId = GetPlayerServerId(ESX.playerId)
|
||||
|
||||
ESX.UI = {}
|
||||
ESX.UI.Menu = {}
|
||||
ESX.UI.Menu.RegisteredTypes = {}
|
||||
ESX.UI.Menu.Opened = {}
|
||||
|
||||
ESX.Game = {}
|
||||
ESX.Game.Utils = {}
|
||||
|
||||
CreateThread(function()
|
||||
while not Config.Multichar do
|
||||
Wait(100)
|
||||
|
||||
if NetworkIsPlayerActive(ESX.playerId) then
|
||||
ESX.DisableSpawnManager()
|
||||
DoScreenFadeOut(0)
|
||||
Wait(500)
|
||||
TriggerServerEvent("esx:onPlayerJoined")
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
234
resources/[core]/es_extended/client/modules/actions.lua
Normal file
234
resources/[core]/es_extended/client/modules/actions.lua
Normal file
@@ -0,0 +1,234 @@
|
||||
Actions = {}
|
||||
Actions._index = Actions
|
||||
|
||||
Actions.inVehicle = false
|
||||
Actions.enteringVehicle = false
|
||||
Actions.inPauseMenu = false
|
||||
Actions.currentWeapon = false
|
||||
|
||||
function Actions:GetSeatPedIsIn()
|
||||
for i = -1, 16 do
|
||||
if GetPedInVehicleSeat(self.vehicle, i) == ESX.PlayerData.ped then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
function Actions:GetVehicleData()
|
||||
if not DoesEntityExist(self.vehicle) then
|
||||
return
|
||||
end
|
||||
|
||||
local vehicleModel = GetEntityModel(self.vehicle)
|
||||
local displayName = GetDisplayNameFromVehicleModel(vehicleModel)
|
||||
local netId = NetworkGetEntityIsNetworked(self.vehicle) and VehToNet(self.vehicle) or self.vehicle
|
||||
local plate = GetVehicleNumberPlateText(self.vehicle)
|
||||
|
||||
return displayName, netId, plate
|
||||
end
|
||||
|
||||
function Actions:SetVehicleStatus()
|
||||
ESX.SetPlayerData("vehicle", self.vehicle)
|
||||
ESX.SetPlayerData("seat", self.seat)
|
||||
end
|
||||
|
||||
function Actions:TrackPedCoordsOnce()
|
||||
CreateThread(function()
|
||||
while not ESX.IsPlayerLoaded() do
|
||||
Wait(250)
|
||||
end
|
||||
|
||||
ESX.PlayerData.coords = nil
|
||||
|
||||
setmetatable(ESX.PlayerData, {
|
||||
__index = function(_, key)
|
||||
if key ~= "coords" then
|
||||
return
|
||||
end
|
||||
|
||||
local coords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
|
||||
return coords
|
||||
end
|
||||
})
|
||||
end)
|
||||
end
|
||||
|
||||
function Actions:TrackPed()
|
||||
local playerPed = ESX.PlayerData.ped
|
||||
local newPed = PlayerPedId()
|
||||
|
||||
if playerPed ~= newPed then
|
||||
ESX.SetPlayerData("ped", newPed)
|
||||
|
||||
TriggerEvent("esx:playerPedChanged", newPed)
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Player ped changed:", newPed)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:TrackPauseMenu()
|
||||
local isActive = IsPauseMenuActive()
|
||||
|
||||
if isActive ~= self.inPauseMenu then
|
||||
self.inPauseMenu = isActive
|
||||
TriggerEvent("esx:pauseMenuActive", isActive)
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Pause menu active:", isActive)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:EnterVehicle()
|
||||
self.seat = GetSeatPedIsTryingToEnter(ESX.PlayerData.ped)
|
||||
|
||||
local _, netId, plate = self:GetVehicleData()
|
||||
|
||||
self.enteringVehicle = true
|
||||
TriggerEvent("esx:enteringVehicle", self.vehicle, plate, self.seat, netId)
|
||||
TriggerServerEvent("esx:enteringVehicle", plate, self.seat, netId)
|
||||
|
||||
self:SetVehicleStatus()
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Entering vehicle:", self.vehicle, plate, self.seat, netId)
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:ResetVehicleData()
|
||||
self.enteringVehicle = false
|
||||
self.vehicle = false
|
||||
self.seat = false
|
||||
self.inVehicle = false
|
||||
|
||||
self:SetVehicleStatus()
|
||||
end
|
||||
|
||||
function Actions:EnterAborted()
|
||||
self:ResetVehicleData()
|
||||
|
||||
TriggerEvent("esx:enteringVehicleAborted")
|
||||
TriggerServerEvent("esx:enteringVehicleAborted")
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Entering vehicle aborted")
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:WarpEnter()
|
||||
self.enteringVehicle = false
|
||||
self.inVehicle = true
|
||||
|
||||
self.seat = self:GetSeatPedIsIn()
|
||||
|
||||
local displayName, netId, plate = self:GetVehicleData()
|
||||
|
||||
self:SetVehicleStatus()
|
||||
TriggerEvent("esx:enteredVehicle", self.vehicle, plate, self.seat, displayName, netId)
|
||||
TriggerServerEvent("esx:enteredVehicle", plate, self.seat, displayName, netId)
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Entered vehicle:", self.vehicle, plate, self.seat, displayName, netId)
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:ExitVehicle()
|
||||
local currentVehicle = GetVehiclePedIsIn(ESX.PlayerData.ped, false)
|
||||
|
||||
if currentVehicle ~= self.vehicle or ESX.PlayerData.dead then
|
||||
local displayName, netId, plate = self:GetVehicleData()
|
||||
|
||||
TriggerEvent("esx:exitedVehicle", self.vehicle, plate, self.seat, displayName, netId)
|
||||
TriggerServerEvent("esx:exitedVehicle", plate, self.seat, displayName, netId)
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Exited vehicle:", self.vehicle, plate, self.seat, displayName, netId)
|
||||
end
|
||||
|
||||
self:ResetVehicleData()
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:TrackVehicle()
|
||||
if not self.inVehicle and not ESX.PlayerData.dead then
|
||||
local tempVehicle = GetVehiclePedIsTryingToEnter(ESX.PlayerData.ped)
|
||||
|
||||
if DoesEntityExist(tempVehicle) and not self.enteringVehicle then
|
||||
self.vehicle = tempVehicle
|
||||
self:EnterVehicle()
|
||||
elseif not DoesEntityExist(tempVehicle) and not IsPedInAnyVehicle(ESX.PlayerData.ped, true) and self.enteringVehicle then
|
||||
self:EnterAborted()
|
||||
elseif IsPedInAnyVehicle(ESX.PlayerData.ped, false) then
|
||||
self.vehicle = GetVehiclePedIsIn(ESX.PlayerData.ped, false)
|
||||
self:WarpEnter()
|
||||
end
|
||||
elseif self.inVehicle then
|
||||
self:ExitVehicle()
|
||||
self:TrackSeat()
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:TrackSeat()
|
||||
if not self.inVehicle then
|
||||
return
|
||||
end
|
||||
|
||||
local newSeat = self:GetSeatPedIsIn()
|
||||
if newSeat ~= self.seat then
|
||||
self.seat = newSeat
|
||||
ESX.SetPlayerData("seat", self.seat)
|
||||
TriggerEvent("esx:vehicleSeatChanged", self.seat)
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Vehicle seat changed:", self.seat)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:TrackWeapon()
|
||||
---@type number|false
|
||||
local newWeapon = GetSelectedPedWeapon(ESX.PlayerData.ped)
|
||||
newWeapon = newWeapon ~= `WEAPON_UNARMED` and newWeapon or false
|
||||
|
||||
if newWeapon ~= self.currentWeapon then
|
||||
self.currentWeapon = newWeapon
|
||||
ESX.SetPlayerData("weapon", self.currentWeapon)
|
||||
TriggerEvent("esx:weaponChanged", self.currentWeapon)
|
||||
|
||||
if Config.EnableDebug then
|
||||
print("[DEBUG] Weapon changed:", self.currentWeapon)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Actions:SlowLoop()
|
||||
CreateThread(function()
|
||||
while ESX.PlayerLoaded do
|
||||
self:TrackPauseMenu()
|
||||
self:TrackVehicle()
|
||||
self:TrackWeapon()
|
||||
Wait(500)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function Actions:PedLoop()
|
||||
CreateThread(function()
|
||||
while ESX.PlayerLoaded do
|
||||
self:TrackPed()
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function Actions:Init()
|
||||
self:SlowLoop()
|
||||
self:PedLoop()
|
||||
self:TrackPedCoordsOnce()
|
||||
end
|
||||
|
||||
Actions:Init()
|
||||
253
resources/[core]/es_extended/client/modules/adjustments.lua
Normal file
253
resources/[core]/es_extended/client/modules/adjustments.lua
Normal file
@@ -0,0 +1,253 @@
|
||||
Adjustments = {}
|
||||
|
||||
function Adjustments:RemoveHudComponents()
|
||||
for i = 1, #Config.RemoveHudComponents do
|
||||
if Config.RemoveHudComponents[i] then
|
||||
SetHudComponentSize(i, 0.0, 0.0)
|
||||
SetHudComponentPosition(i, 900.0, 900.0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:DisableAimAssist()
|
||||
if Config.DisableAimAssist then
|
||||
SetPlayerTargetingMode(3)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:DisableNPCDrops()
|
||||
if Config.DisableNPCDrops then
|
||||
local weaponPickups = { `PICKUP_WEAPON_CARBINERIFLE`, `PICKUP_WEAPON_PISTOL`, `PICKUP_WEAPON_PUMPSHOTGUN` }
|
||||
for i = 1, #weaponPickups do
|
||||
ToggleUsePickupsForPlayer(ESX.playerId, weaponPickups[i], false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:SeatShuffle()
|
||||
if Config.DisableVehicleSeatShuff then
|
||||
AddEventHandler("esx:enteredVehicle", function(vehicle, _, seat)
|
||||
if seat > -1 then
|
||||
SetPedIntoVehicle(ESX.PlayerData.ped, vehicle, seat)
|
||||
SetPedConfigFlag(ESX.PlayerData.ped, 184, true)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:HealthRegeneration()
|
||||
if Config.DisableHealthRegeneration then
|
||||
SetPlayerHealthRechargeMultiplier(ESX.playerId, 0.0)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:AmmoAndVehicleRewards()
|
||||
CreateThread(function()
|
||||
while true do
|
||||
if Config.DisableDisplayAmmo then
|
||||
DisplayAmmoThisFrame(false)
|
||||
end
|
||||
|
||||
if Config.DisableVehicleRewards then
|
||||
DisablePlayerVehicleRewards(ESX.playerId)
|
||||
end
|
||||
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function Adjustments:EnablePvP()
|
||||
if Config.EnablePVP then
|
||||
SetCanAttackFriendly(ESX.PlayerData.ped, true, false)
|
||||
NetworkSetFriendlyFireOption(true)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:DispatchServices()
|
||||
if Config.DisableDispatchServices then
|
||||
for i = 1, 15 do
|
||||
EnableDispatchService(i, false)
|
||||
end
|
||||
SetAudioFlag('PoliceScannerDisabled', true)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:NPCScenarios()
|
||||
if Config.DisableScenarios then
|
||||
local scenarios = {
|
||||
"WORLD_VEHICLE_ATTRACTOR",
|
||||
"WORLD_VEHICLE_AMBULANCE",
|
||||
"WORLD_VEHICLE_BICYCLE_BMX",
|
||||
"WORLD_VEHICLE_BICYCLE_BMX_BALLAS",
|
||||
"WORLD_VEHICLE_BICYCLE_BMX_FAMILY",
|
||||
"WORLD_VEHICLE_BICYCLE_BMX_HARMONY",
|
||||
"WORLD_VEHICLE_BICYCLE_BMX_VAGOS",
|
||||
"WORLD_VEHICLE_BICYCLE_MOUNTAIN",
|
||||
"WORLD_VEHICLE_BICYCLE_ROAD",
|
||||
"WORLD_VEHICLE_BIKE_OFF_ROAD_RACE",
|
||||
"WORLD_VEHICLE_BIKER",
|
||||
"WORLD_VEHICLE_BOAT_IDLE",
|
||||
"WORLD_VEHICLE_BOAT_IDLE_ALAMO",
|
||||
"WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
|
||||
"WORLD_VEHICLE_BROKEN_DOWN",
|
||||
"WORLD_VEHICLE_BUSINESSMEN",
|
||||
"WORLD_VEHICLE_HELI_LIFEGUARD",
|
||||
"WORLD_VEHICLE_CLUCKIN_BELL_TRAILER",
|
||||
"WORLD_VEHICLE_CONSTRUCTION_SOLO",
|
||||
"WORLD_VEHICLE_CONSTRUCTION_PASSENGERS",
|
||||
"WORLD_VEHICLE_DRIVE_PASSENGERS",
|
||||
"WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED",
|
||||
"WORLD_VEHICLE_DRIVE_SOLO",
|
||||
"WORLD_VEHICLE_FIRE_TRUCK",
|
||||
"WORLD_VEHICLE_EMPTY",
|
||||
"WORLD_VEHICLE_MARIACHI",
|
||||
"WORLD_VEHICLE_MECHANIC",
|
||||
"WORLD_VEHICLE_MILITARY_PLANES_BIG",
|
||||
"WORLD_VEHICLE_MILITARY_PLANES_SMALL",
|
||||
"WORLD_VEHICLE_PARK_PARALLEL",
|
||||
"WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN",
|
||||
"WORLD_VEHICLE_PASSENGER_EXIT",
|
||||
"WORLD_VEHICLE_POLICE_BIKE",
|
||||
"WORLD_VEHICLE_POLICE_CAR",
|
||||
"WORLD_VEHICLE_POLICE",
|
||||
"WORLD_VEHICLE_POLICE_NEXT_TO_CAR",
|
||||
"WORLD_VEHICLE_QUARRY",
|
||||
"WORLD_VEHICLE_SALTON",
|
||||
"WORLD_VEHICLE_SALTON_DIRT_BIKE",
|
||||
"WORLD_VEHICLE_SECURITY_CAR",
|
||||
"WORLD_VEHICLE_STREETRACE",
|
||||
"WORLD_VEHICLE_TOURBUS",
|
||||
"WORLD_VEHICLE_TOURIST",
|
||||
"WORLD_VEHICLE_TANDL",
|
||||
"WORLD_VEHICLE_TRACTOR",
|
||||
"WORLD_VEHICLE_TRACTOR_BEACH",
|
||||
"WORLD_VEHICLE_TRUCK_LOGS",
|
||||
"WORLD_VEHICLE_TRUCKS_TRAILERS",
|
||||
"WORLD_VEHICLE_DISTANT_EMPTY_GROUND",
|
||||
"WORLD_HUMAN_PAPARAZZI",
|
||||
}
|
||||
|
||||
for i=1, #scenarios do
|
||||
SetScenarioTypeEnabled(scenarios[i], false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:LicensePlates()
|
||||
SetDefaultVehicleNumberPlateTextPattern(-1, Config.CustomAIPlates)
|
||||
end
|
||||
|
||||
local placeHolders = {
|
||||
server_name = function()
|
||||
return GetConvar("sv_projectName", "ESX-Framework")
|
||||
end,
|
||||
server_endpoint = function()
|
||||
return GetCurrentServerEndpoint() or "localhost:30120"
|
||||
end,
|
||||
server_players = function()
|
||||
return GlobalState.playerCount or 0
|
||||
end,
|
||||
server_maxplayers = function()
|
||||
return GetConvarInt("sv_maxClients", 48)
|
||||
end,
|
||||
player_name = function()
|
||||
return GetPlayerName(ESX.playerId)
|
||||
end,
|
||||
player_rp_name = function()
|
||||
return ESX.PlayerData.name or "John Doe"
|
||||
end,
|
||||
player_id = function()
|
||||
return ESX.serverId
|
||||
end,
|
||||
player_street = function()
|
||||
if not ESX.PlayerData.ped then return "Unknown" end
|
||||
|
||||
local playerCoords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
local streetHash = GetStreetNameAtCoord(playerCoords.x, playerCoords.y, playerCoords.z)
|
||||
|
||||
return GetStreetNameFromHashKey(streetHash) or "Unknown"
|
||||
end,
|
||||
}
|
||||
|
||||
function Adjustments:ReplacePlaceholders(text)
|
||||
for placeholder, cb in pairs(placeHolders) do
|
||||
local success, result = pcall(cb)
|
||||
|
||||
if not success then
|
||||
error(("Failed to execute placeholder: ^5%s^7\n%s"):format(placeholder, result))
|
||||
result = "Unknown"
|
||||
end
|
||||
|
||||
text = text:gsub(("{%s}"):format(placeholder), tostring(result))
|
||||
end
|
||||
return text
|
||||
end
|
||||
|
||||
function Adjustments:DiscordPresence()
|
||||
if Config.DiscordActivity.appId ~= 0 then
|
||||
CreateThread(function()
|
||||
while true do
|
||||
SetDiscordAppId(Config.DiscordActivity.appId)
|
||||
SetRichPresence(self:ReplacePlaceholders(Config.DiscordActivity.presence))
|
||||
SetDiscordRichPresenceAsset(Config.DiscordActivity.assetName)
|
||||
SetDiscordRichPresenceAssetText(self:ReplacePlaceholders(Config.DiscordActivity.assetText))
|
||||
|
||||
for i = 1, #Config.DiscordActivity.buttons do
|
||||
local button = Config.DiscordActivity.buttons[i]
|
||||
local buttonUrl = self:ReplacePlaceholders(button.url)
|
||||
SetDiscordRichPresenceAction(i - 1, button.label, buttonUrl)
|
||||
end
|
||||
|
||||
Wait(Config.DiscordActivity.refresh)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:WantedLevel()
|
||||
if not Config.EnableWantedLevel then
|
||||
ClearPlayerWantedLevel(ESX.playerId)
|
||||
SetMaxWantedLevel(0)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:DisableRadio()
|
||||
if Config.RemoveHudComponents[16] then
|
||||
AddEventHandler("esx:enteredVehicle", function(vehicle, plate, seat, displayName, netId)
|
||||
SetVehRadioStation(vehicle,"OFF")
|
||||
SetUserRadioControlEnabled(false)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function Adjustments:Multipliers()
|
||||
CreateThread(function()
|
||||
while true do
|
||||
SetPedDensityMultiplierThisFrame(Config.Multipliers.pedDensity)
|
||||
SetScenarioPedDensityMultiplierThisFrame(Config.Multipliers.scenarioPedDensityInterior, Config.Multipliers.scenarioPedDensityExterior)
|
||||
SetAmbientVehicleRangeMultiplierThisFrame(Config.Multipliers.ambientVehicleRange)
|
||||
SetParkedVehicleDensityMultiplierThisFrame(Config.Multipliers.parkedVehicleDensity)
|
||||
SetRandomVehicleDensityMultiplierThisFrame(Config.Multipliers.randomVehicleDensity)
|
||||
SetVehicleDensityMultiplierThisFrame(Config.Multipliers.vehicleDensity)
|
||||
Wait(0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function Adjustments:Load()
|
||||
self:RemoveHudComponents()
|
||||
self:DisableAimAssist()
|
||||
self:DisableNPCDrops()
|
||||
self:SeatShuffle()
|
||||
self:HealthRegeneration()
|
||||
self:AmmoAndVehicleRewards()
|
||||
self:EnablePvP()
|
||||
self:DispatchServices()
|
||||
self:NPCScenarios()
|
||||
self:LicensePlates()
|
||||
self:DiscordPresence()
|
||||
self:WantedLevel()
|
||||
self:DisableRadio()
|
||||
self:Multipliers()
|
||||
end
|
||||
146
resources/[core]/es_extended/client/modules/callback.lua
Normal file
146
resources/[core]/es_extended/client/modules/callback.lua
Normal file
@@ -0,0 +1,146 @@
|
||||
---@diagnostic disable: duplicate-set-field
|
||||
|
||||
-- =============================================
|
||||
-- MARK: Variables
|
||||
-- =============================================
|
||||
|
||||
Callbacks = {}
|
||||
|
||||
Callbacks.requests = {}
|
||||
Callbacks.storage = {}
|
||||
Callbacks.id = 0
|
||||
|
||||
-- =============================================
|
||||
-- MARK: Internal Functions
|
||||
-- =============================================
|
||||
|
||||
|
||||
function Callbacks:Register(name, resource, cb)
|
||||
self.storage[name] = {
|
||||
resource = resource,
|
||||
cb = cb
|
||||
}
|
||||
end
|
||||
|
||||
function Callbacks:Execute(cb, id, ...)
|
||||
local success, errorString = pcall(cb, ...)
|
||||
|
||||
if not success then
|
||||
print(("[^1ERROR^7] Failed to execute Callback with RequestId: ^5%s^7"):format(id))
|
||||
error(errorString)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
function Callbacks:Trigger(event, cb, invoker, ...)
|
||||
self.requests[self.id] = {
|
||||
await = type(cb) == "boolean",
|
||||
cb = cb or promise:new()
|
||||
}
|
||||
local table = self.requests[self.id]
|
||||
|
||||
TriggerServerEvent("esx:triggerServerCallback", event, self.id, invoker, ...)
|
||||
|
||||
self.id += 1
|
||||
|
||||
return table.cb
|
||||
end
|
||||
|
||||
function Callbacks:ServerRecieve(requestId, invoker, ...)
|
||||
if not self.requests[requestId] then
|
||||
return error(("Server Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(requestId, invoker))
|
||||
end
|
||||
|
||||
local callback = self.requests[requestId]
|
||||
|
||||
self.requests[requestId] = nil
|
||||
|
||||
if callback.await then
|
||||
callback.cb:resolve({ ... })
|
||||
else
|
||||
self:Execute(callback.cb, requestId, ...)
|
||||
end
|
||||
end
|
||||
|
||||
function Callbacks:ClientRecieve(eventName, requestId, invoker, ...)
|
||||
if not self.storage[eventName] then
|
||||
return error(("Client Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(eventName, invoker))
|
||||
end
|
||||
|
||||
local returnCb = function(...)
|
||||
TriggerServerEvent("esx:clientCallback", requestId, invoker, ...)
|
||||
end
|
||||
local callback = self.storage[eventName].cb
|
||||
|
||||
self:Execute(callback, requestId, returnCb, ...)
|
||||
end
|
||||
|
||||
-- =============================================
|
||||
-- MARK: ESX Functions
|
||||
-- =============================================
|
||||
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
---@param ... any
|
||||
---@return nil
|
||||
function ESX.TriggerServerCallback(eventName, callback, ...)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Trigger(eventName, callback, invoker, ...)
|
||||
end
|
||||
|
||||
---@param eventName string
|
||||
---@param ... any
|
||||
---@return ...
|
||||
function ESX.AwaitServerCallback(eventName, ...)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "unknown") and invokingResource or "es_extended"
|
||||
|
||||
local p = Callbacks:Trigger(eventName, false, invoker, ...)
|
||||
if not p then return end
|
||||
|
||||
-- if the server callback takes longer than 15 seconds to respond, reject the promise
|
||||
SetTimeout(15000, function()
|
||||
if p.state == "pending" then
|
||||
p:reject("Server Callback Timed Out")
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.Await(p)
|
||||
|
||||
return table.unpack(p.value)
|
||||
end
|
||||
|
||||
function ESX.RegisterClientCallback(eventName, callback)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Register(eventName, invoker, callback)
|
||||
end
|
||||
|
||||
---@param eventName string
|
||||
---@return boolean
|
||||
function ESX.DoesClientCallbackExist(eventName)
|
||||
return Callbacks.storage[eventName] ~= nil
|
||||
end
|
||||
|
||||
-- =============================================
|
||||
-- MARK: Events
|
||||
-- =============================================
|
||||
|
||||
ESX.SecureNetEvent("esx:serverCallback", function(...)
|
||||
Callbacks:ServerRecieve(...)
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:triggerClientCallback", function(...)
|
||||
Callbacks:ClientRecieve(...)
|
||||
end)
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
for k, v in pairs(Callbacks.storage) do
|
||||
if v.resource == resource then
|
||||
Callbacks.storage[k] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
75
resources/[core]/es_extended/client/modules/death.lua
Normal file
75
resources/[core]/es_extended/client/modules/death.lua
Normal file
@@ -0,0 +1,75 @@
|
||||
Death = {}
|
||||
Death._index = Death
|
||||
|
||||
function Death:ResetValues()
|
||||
self.killerEntity = nil
|
||||
self.deathCause = nil
|
||||
self.killerId = nil
|
||||
self.killerServerId = nil
|
||||
end
|
||||
|
||||
function Death:ByPlayer()
|
||||
local victimCoords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
local killerCoords = GetEntityCoords(self.killerEntity)
|
||||
local distance = #(victimCoords - killerCoords)
|
||||
|
||||
local data = {
|
||||
victimCoords = { x = ESX.Math.Round(victimCoords.x, 1), y = ESX.Math.Round(victimCoords.y, 1), z = ESX.Math.Round(victimCoords.z, 1) },
|
||||
killerCoords = { x = ESX.Math.Round(killerCoords.x, 1), y = ESX.Math.Round(killerCoords.y, 1), z = ESX.Math.Round(killerCoords.z, 1) },
|
||||
|
||||
killedByPlayer = true,
|
||||
deathCause = self.deathCause,
|
||||
distance = ESX.Math.Round(distance, 1),
|
||||
|
||||
killerServerId = self.killerServerId,
|
||||
killerClientId = self.killerId,
|
||||
}
|
||||
|
||||
TriggerEvent("esx:onPlayerDeath", data)
|
||||
TriggerServerEvent("esx:onPlayerDeath", data)
|
||||
end
|
||||
|
||||
function Death:Natural()
|
||||
local coords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
|
||||
local data = {
|
||||
victimCoords = { x = ESX.Math.Round(coords.x, 1), y = ESX.Math.Round(coords.y, 1), z = ESX.Math.Round(coords.z, 1) },
|
||||
|
||||
killedByPlayer = false,
|
||||
deathCause = self.deathCause,
|
||||
}
|
||||
|
||||
TriggerEvent("esx:onPlayerDeath", data)
|
||||
TriggerServerEvent("esx:onPlayerDeath", data)
|
||||
end
|
||||
|
||||
function Death:Died()
|
||||
self.killerEntity = GetPedSourceOfDeath(ESX.PlayerData.ped)
|
||||
self.deathCause = GetPedCauseOfDeath(ESX.PlayerData.ped)
|
||||
self.killerId = NetworkGetPlayerIndexFromPed(self.killerEntity)
|
||||
self.killerServerId = GetPlayerServerId(self.killerId)
|
||||
|
||||
local isActive = NetworkIsPlayerActive(self.killerId)
|
||||
|
||||
if self.killerEntity ~= ESX.PlayerData.ped and self.killerId and isActive then
|
||||
self:ByPlayer()
|
||||
else
|
||||
self:Natural()
|
||||
end
|
||||
|
||||
self:ResetValues()
|
||||
end
|
||||
|
||||
AddEventHandler("esx:onPlayerSpawn", function()
|
||||
Citizen.CreateThreadNow(function()
|
||||
while not ESX.PlayerLoaded do Wait(0) end
|
||||
|
||||
while ESX.PlayerLoaded and not ESX.PlayerData.dead do
|
||||
if DoesEntityExist(ESX.PlayerData.ped) and (IsPedDeadOrDying(ESX.PlayerData.ped, true) or IsPedFatallyInjured(ESX.PlayerData.ped)) then
|
||||
Death:Died()
|
||||
break
|
||||
end
|
||||
Citizen.Wait(250)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
615
resources/[core]/es_extended/client/modules/events.lua
Normal file
615
resources/[core]/es_extended/client/modules/events.lua
Normal file
@@ -0,0 +1,615 @@
|
||||
local pickups = {}
|
||||
|
||||
RegisterNetEvent("esx:requestModel", function(model)
|
||||
ESX.Streaming.RequestModel(model)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin)
|
||||
ESX.PlayerData = xPlayer
|
||||
|
||||
if not Config.Multichar then
|
||||
ESX.SpawnPlayer(skin, ESX.PlayerData.coords, function()
|
||||
TriggerEvent("esx:onPlayerSpawn")
|
||||
TriggerEvent("esx:restoreLoadout")
|
||||
TriggerServerEvent("esx:onPlayerSpawn")
|
||||
TriggerEvent("esx:loadingScreenOff")
|
||||
ShutdownLoadingScreen()
|
||||
ShutdownLoadingScreenNui()
|
||||
end)
|
||||
end
|
||||
|
||||
while not DoesEntityExist(ESX.PlayerData.ped) do
|
||||
Wait(20)
|
||||
end
|
||||
|
||||
ESX.PlayerLoaded = true
|
||||
|
||||
local timer = GetGameTimer()
|
||||
while not HaveAllStreamingRequestsCompleted(ESX.PlayerData.ped) and (GetGameTimer() - timer) < 2000 do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
Adjustments:Load()
|
||||
|
||||
ClearPedTasksImmediately(ESX.PlayerData.ped)
|
||||
|
||||
if not Config.Multichar then
|
||||
Core.FreezePlayer(false)
|
||||
end
|
||||
|
||||
if IsScreenFadedOut() then
|
||||
DoScreenFadeIn(500)
|
||||
end
|
||||
|
||||
Actions:Init()
|
||||
StartPointsLoop()
|
||||
StartServerSyncLoops()
|
||||
NetworkSetLocalPlayerSyncLookAt(true)
|
||||
end)
|
||||
|
||||
local isFirstSpawn = true
|
||||
ESX.SecureNetEvent("esx:onPlayerLogout", function()
|
||||
ESX.PlayerLoaded = false
|
||||
isFirstSpawn = true
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:setMaxWeight", function(newMaxWeight)
|
||||
ESX.SetPlayerData("maxWeight", newMaxWeight)
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:setInventory", function(newInventory)
|
||||
ESX.SetPlayerData("inventory", newInventory)
|
||||
end)
|
||||
|
||||
local function onPlayerSpawn()
|
||||
ESX.SetPlayerData("ped", PlayerPedId())
|
||||
ESX.SetPlayerData("dead", false)
|
||||
end
|
||||
|
||||
AddEventHandler("playerSpawned", onPlayerSpawn)
|
||||
AddEventHandler("esx:onPlayerSpawn", function()
|
||||
onPlayerSpawn()
|
||||
|
||||
if isFirstSpawn then
|
||||
isFirstSpawn = false
|
||||
|
||||
if ESX.PlayerData.metadata.health and (ESX.PlayerData.metadata.health > 0 or Config.SaveDeathStatus) then
|
||||
SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health)
|
||||
end
|
||||
|
||||
if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then
|
||||
SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:onPlayerDeath", function()
|
||||
ESX.SetPlayerData("ped", PlayerPedId())
|
||||
ESX.SetPlayerData("dead", true)
|
||||
end)
|
||||
|
||||
AddEventHandler("skinchanger:modelLoaded", function()
|
||||
while not ESX.PlayerLoaded do
|
||||
Wait(100)
|
||||
end
|
||||
TriggerEvent("esx:restoreLoadout")
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:restoreLoadout", function()
|
||||
ESX.SetPlayerData("ped", PlayerPedId())
|
||||
|
||||
if not Config.CustomInventory then
|
||||
local ammoTypes = {}
|
||||
RemoveAllPedWeapons(ESX.PlayerData.ped, true)
|
||||
|
||||
for _, v in ipairs(ESX.PlayerData.loadout) do
|
||||
local weaponName = v.name
|
||||
local weaponHash = joaat(weaponName)
|
||||
|
||||
GiveWeaponToPed(ESX.PlayerData.ped, weaponHash, 0, false, false)
|
||||
SetPedWeaponTintIndex(ESX.PlayerData.ped, weaponHash, v.tintIndex)
|
||||
|
||||
local ammoType = GetPedAmmoTypeFromWeapon(ESX.PlayerData.ped, weaponHash)
|
||||
|
||||
for _, v2 in ipairs(v.components) do
|
||||
local componentHash = ESX.GetWeaponComponent(weaponName, v2).hash
|
||||
GiveWeaponComponentToPed(ESX.PlayerData.ped, weaponHash, componentHash)
|
||||
end
|
||||
|
||||
if not ammoTypes[ammoType] then
|
||||
AddAmmoToPed(ESX.PlayerData.ped, weaponHash, v.ammo)
|
||||
ammoTypes[ammoType] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
---@diagnostic disable-next-line: param-type-mismatch
|
||||
AddStateBagChangeHandler("VehicleProperties", nil, function(bagName, _, value)
|
||||
if not value then
|
||||
return
|
||||
end
|
||||
|
||||
bagName = bagName:gsub("entity:", "")
|
||||
local netId = tonumber(bagName)
|
||||
if not netId then
|
||||
error("Tried to set vehicle properties with invalid netId")
|
||||
return
|
||||
end
|
||||
|
||||
local tries = 0
|
||||
|
||||
while not NetworkDoesEntityExistWithNetworkId(netId) do
|
||||
Wait(200)
|
||||
tries = tries + 1
|
||||
if tries > 20 then
|
||||
return error(("Invalid entity - ^5%s^7!"):format(netId))
|
||||
end
|
||||
end
|
||||
|
||||
local vehicle = NetToVeh(netId)
|
||||
|
||||
if NetworkGetEntityOwner(vehicle) ~= ESX.playerId then
|
||||
return
|
||||
end
|
||||
|
||||
ESX.Game.SetVehicleProperties(vehicle, value)
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:setAccountMoney", function(account)
|
||||
for i = 1, #ESX.PlayerData.accounts do
|
||||
if ESX.PlayerData.accounts[i].name == account.name then
|
||||
ESX.PlayerData.accounts[i] = account
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
ESX.SetPlayerData("accounts", ESX.PlayerData.accounts)
|
||||
end)
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.SecureNetEvent("esx:addInventoryItem", function(item, count, showNotification)
|
||||
for k, v in ipairs(ESX.PlayerData.inventory) do
|
||||
if v.name == item then
|
||||
ESX.UI.ShowInventoryItemNotification(true, v.label, count - v.count)
|
||||
ESX.PlayerData.inventory[k].count = count
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if showNotification then
|
||||
ESX.UI.ShowInventoryItemNotification(true, item, count)
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:removeInventoryItem", function(item, count, showNotification)
|
||||
for i = 1, #ESX.PlayerData.inventory do
|
||||
if ESX.PlayerData.inventory[i].name == item then
|
||||
ESX.UI.ShowInventoryItemNotification(false, ESX.PlayerData.inventory[i].label, ESX.PlayerData.inventory[i].count - count)
|
||||
ESX.PlayerData.inventory[i].count = count
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if showNotification then
|
||||
ESX.UI.ShowInventoryItemNotification(false, item, count)
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:addLoadoutItem", function(weaponName, weaponLabel, ammo)
|
||||
table.insert(ESX.PlayerData.loadout, {
|
||||
name = weaponName,
|
||||
ammo = ammo,
|
||||
label = weaponLabel,
|
||||
components = {},
|
||||
tintIndex = 0,
|
||||
})
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:removeLoadoutItem", function(weaponName, weaponLabel)
|
||||
for i = 1, #ESX.PlayerData.loadout do
|
||||
if ESX.PlayerData.loadout[i].name == weaponName then
|
||||
table.remove(ESX.PlayerData.loadout, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:addWeapon", function()
|
||||
error("event ^5'esx:addWeapon'^1 Has Been Removed. Please use ^5xPlayer.addWeapon^1 Instead!")
|
||||
end)
|
||||
|
||||
|
||||
RegisterNetEvent("esx:addWeaponComponent", function()
|
||||
error("event ^5'esx:addWeaponComponent'^1 Has Been Removed. Please use ^5xPlayer.addWeaponComponent^1 Instead!")
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:setWeaponAmmo", function()
|
||||
error("event ^5'esx:setWeaponAmmo'^1 Has Been Removed. Please use ^5xPlayer.addWeaponAmmo^1 Instead!")
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:setWeaponTint", function(weapon, weaponTintIndex)
|
||||
SetPedWeaponTintIndex(ESX.PlayerData.ped, joaat(weapon), weaponTintIndex)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:removeWeapon", function()
|
||||
error("event ^5'esx:removeWeapon'^1 Has Been Removed. Please use ^5xPlayer.removeWeapon^1 Instead!")
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:removeWeaponComponent", function(weapon, weaponComponent)
|
||||
local componentHash = ESX.GetWeaponComponent(weapon, weaponComponent).hash
|
||||
RemoveWeaponComponentFromPed(ESX.PlayerData.ped, joaat(weapon), componentHash)
|
||||
end)
|
||||
end
|
||||
|
||||
ESX.SecureNetEvent("esx:setJob", function(Job)
|
||||
ESX.SetPlayerData("job", Job)
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:setGroup", function(group)
|
||||
ESX.SetPlayerData("group", group)
|
||||
end)
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.SecureNetEvent("esx:createPickup", function(pickupId, label, coords, itemType, name, components, tintIndex)
|
||||
local function setObjectProperties(object)
|
||||
SetEntityAsMissionEntity(object, true, false)
|
||||
PlaceObjectOnGroundProperly(object)
|
||||
FreezeEntityPosition(object, true)
|
||||
SetEntityCollision(object, false, true)
|
||||
|
||||
pickups[pickupId] = {
|
||||
obj = object,
|
||||
label = label,
|
||||
inRange = false,
|
||||
coords = coords,
|
||||
}
|
||||
end
|
||||
|
||||
if itemType == "item_weapon" then
|
||||
local weaponHash = joaat(name)
|
||||
ESX.Streaming.RequestWeaponAsset(weaponHash)
|
||||
local pickupObject = CreateWeaponObject(weaponHash, 50, coords.x, coords.y, coords.z, true, 1.0, 0)
|
||||
SetWeaponObjectTintIndex(pickupObject, tintIndex)
|
||||
|
||||
for _, v in ipairs(components) do
|
||||
local component = ESX.GetWeaponComponent(name, v)
|
||||
if component then
|
||||
GiveWeaponComponentToWeaponObject(pickupObject, component.hash)
|
||||
end
|
||||
end
|
||||
|
||||
setObjectProperties(pickupObject)
|
||||
else
|
||||
ESX.Game.SpawnLocalObject("prop_money_bag_01", coords, setObjectProperties)
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:createMissingPickups", function(missingPickups)
|
||||
for pickupId, pickup in pairs(missingPickups) do
|
||||
TriggerEvent("esx:createPickup", pickupId, pickup.label, vector3(pickup.coords.x, pickup.coords.y, pickup.coords.z - 1.0), pickup.type, pickup.name, pickup.components, pickup.tintIndex)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ESX.SecureNetEvent("esx:registerSuggestions", function(registeredCommands)
|
||||
for name, command in pairs(registeredCommands) do
|
||||
if command.suggestion then
|
||||
TriggerEvent("chat:addSuggestion", ("/%s"):format(name), command.suggestion.help, command.suggestion.arguments)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.SecureNetEvent("esx:removePickup", function(pickupId)
|
||||
if pickups[pickupId] and pickups[pickupId].obj then
|
||||
ESX.Game.DeleteObject(pickups[pickupId].obj)
|
||||
pickups[pickupId] = nil
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function StartServerSyncLoops()
|
||||
if Config.CustomInventory then return end
|
||||
|
||||
local currentWeapon = {
|
||||
---@type number
|
||||
---@diagnostic disable-next-line: assign-type-mismatch
|
||||
hash = `WEAPON_UNARMED`,
|
||||
ammo = 0,
|
||||
}
|
||||
|
||||
local function updateCurrentWeaponAmmo(weaponName)
|
||||
local newAmmo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash)
|
||||
|
||||
if newAmmo ~= currentWeapon.ammo then
|
||||
currentWeapon.ammo = newAmmo
|
||||
TriggerServerEvent("esx:updateWeaponAmmo", weaponName, newAmmo)
|
||||
end
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
while ESX.PlayerLoaded do
|
||||
currentWeapon.hash = GetSelectedPedWeapon(ESX.PlayerData.ped)
|
||||
|
||||
if currentWeapon.hash ~= `WEAPON_UNARMED` then
|
||||
local weaponConfig = ESX.GetWeaponFromHash(currentWeapon.hash)
|
||||
|
||||
if weaponConfig then
|
||||
currentWeapon.ammo = GetAmmoInPedWeapon(ESX.PlayerData.ped, currentWeapon.hash)
|
||||
|
||||
while GetSelectedPedWeapon(ESX.PlayerData.ped) == currentWeapon.hash do
|
||||
updateCurrentWeaponAmmo(weaponConfig.name)
|
||||
Wait(1000)
|
||||
end
|
||||
|
||||
updateCurrentWeaponAmmo(weaponConfig.name)
|
||||
end
|
||||
end
|
||||
Wait(250)
|
||||
end
|
||||
end)
|
||||
|
||||
CreateThread(function()
|
||||
local PARACHUTE_OPENING <const> = 1
|
||||
local PARACHUTE_OPEN <const> = 2
|
||||
|
||||
while ESX.PlayerLoaded do
|
||||
local parachuteState = GetPedParachuteState(ESX.PlayerData.ped)
|
||||
|
||||
if parachuteState == PARACHUTE_OPENING or parachuteState == PARACHUTE_OPEN then
|
||||
TriggerServerEvent("esx:updateWeaponAmmo", "GADGET_PARACHUTE", 0)
|
||||
|
||||
while GetPedParachuteState(ESX.PlayerData.ped) ~= -1 do Wait(1000) end
|
||||
end
|
||||
Wait(500)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
if not Config.CustomInventory then
|
||||
CreateThread(function()
|
||||
while true do
|
||||
local Sleep = 1500
|
||||
local playerCoords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
local _, closestDistance = ESX.Game.GetClosestPlayer(playerCoords)
|
||||
|
||||
for pickupId, pickup in pairs(pickups) do
|
||||
local distance = #(playerCoords - pickup.coords)
|
||||
|
||||
if distance < 5 then
|
||||
Sleep = 0
|
||||
local label = pickup.label
|
||||
|
||||
if distance < 1 then
|
||||
if IsControlJustReleased(0, 38) then
|
||||
if IsPedOnFoot(ESX.PlayerData.ped) and (closestDistance == -1 or closestDistance > 3) and not pickup.inRange then
|
||||
pickup.inRange = true
|
||||
|
||||
local dict, anim = "weapons@first_person@aim_rng@generic@projectile@sticky_bomb@", "plant_floor"
|
||||
ESX.Streaming.RequestAnimDict(dict)
|
||||
TaskPlayAnim(ESX.PlayerData.ped, dict, anim, 8.0, 1.0, 1000, 16, 0.0, false, false, false)
|
||||
RemoveAnimDict(dict)
|
||||
Wait(1000)
|
||||
|
||||
TriggerServerEvent("esx:onPickup", pickupId)
|
||||
PlaySoundFrontend(-1, "PICK_UP", "HUD_FRONTEND_DEFAULT_SOUNDSET", false)
|
||||
end
|
||||
end
|
||||
|
||||
label = ("%s~n~%s"):format(label, TranslateCap("threw_pickup_prompt"))
|
||||
end
|
||||
|
||||
local textCoords = pickup.coords + vector3(0.0, 0.0, 0.25)
|
||||
ESX.Game.Utils.DrawText3D(textCoords, label, 1.2, 1)
|
||||
elseif pickup.inRange then
|
||||
pickup.inRange = false
|
||||
end
|
||||
end
|
||||
Wait(Sleep)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
----- Admin commands from esx_adminplus
|
||||
RegisterNetEvent("esx:tpm", function()
|
||||
local GetEntityCoords = GetEntityCoords
|
||||
local GetGroundZFor_3dCoord = GetGroundZFor_3dCoord
|
||||
local GetFirstBlipInfoId = GetFirstBlipInfoId
|
||||
local DoesBlipExist = DoesBlipExist
|
||||
local DoScreenFadeOut = DoScreenFadeOut
|
||||
local GetBlipInfoIdCoord = GetBlipInfoIdCoord
|
||||
local GetVehiclePedIsIn = GetVehiclePedIsIn
|
||||
|
||||
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
|
||||
if not admin then
|
||||
return
|
||||
end
|
||||
local blipMarker = GetFirstBlipInfoId(8)
|
||||
if not DoesBlipExist(blipMarker) then
|
||||
ESX.ShowNotification(TranslateCap("tpm_nowaypoint"), "error")
|
||||
return "marker"
|
||||
end
|
||||
|
||||
-- Fade screen to hide how clients get teleported.
|
||||
DoScreenFadeOut(650)
|
||||
while not IsScreenFadedOut() do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
local ped, coords = ESX.PlayerData.ped, GetBlipInfoIdCoord(blipMarker)
|
||||
local vehicle = GetVehiclePedIsIn(ped, false)
|
||||
local oldCoords = GetEntityCoords(ped)
|
||||
|
||||
-- Unpack coords instead of having to unpack them while iterating.
|
||||
-- 825.0 seems to be the max a player can reach while 0.0 being the lowest.
|
||||
local x, y, groundZ, Z_START = coords["x"], coords["y"], 850.0, 950.0
|
||||
local found = false
|
||||
FreezeEntityPosition(vehicle > 0 and vehicle or ped, true)
|
||||
|
||||
for i = Z_START, 0, -25.0 do
|
||||
local z = i
|
||||
if (i % 2) ~= 0 then
|
||||
z = Z_START - i
|
||||
end
|
||||
|
||||
NewLoadSceneStart(x, y, z, x, y, z, 50.0, 0)
|
||||
local curTime = GetGameTimer()
|
||||
while IsNetworkLoadingScene() do
|
||||
if GetGameTimer() - curTime > 1000 then
|
||||
break
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
NewLoadSceneStop()
|
||||
SetPedCoordsKeepVehicle(ped, x, y, z)
|
||||
|
||||
while not HasCollisionLoadedAroundEntity(ped) do
|
||||
RequestCollisionAtCoord(x, y, z)
|
||||
if GetGameTimer() - curTime > 1000 then
|
||||
break
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
-- Get ground coord. As mentioned in the natives, this only works if the client is in render distance.
|
||||
found, groundZ = GetGroundZFor_3dCoord(x, y, z, false)
|
||||
if found then
|
||||
Wait(0)
|
||||
SetPedCoordsKeepVehicle(ped, x, y, groundZ)
|
||||
break
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
-- Remove black screen once the loop has ended.
|
||||
DoScreenFadeIn(650)
|
||||
FreezeEntityPosition(vehicle > 0 and vehicle or ped, false)
|
||||
|
||||
if not found then
|
||||
-- If we can't find the coords, set the coords to the old ones.
|
||||
-- We don't unpack them before since they aren't in a loop and only called once.
|
||||
SetPedCoordsKeepVehicle(ped, oldCoords["x"], oldCoords["y"], oldCoords["z"] - 1.0)
|
||||
ESX.ShowNotification(TranslateCap("tpm_success"), "success")
|
||||
end
|
||||
|
||||
-- If Z coord was found, set coords in found coords.
|
||||
SetPedCoordsKeepVehicle(ped, x, y, groundZ)
|
||||
ESX.ShowNotification(TranslateCap("tpm_success"), "success")
|
||||
end)
|
||||
end)
|
||||
|
||||
local noclip = false
|
||||
local noclip_pos = vector3(0, 0, 70)
|
||||
local heading = 0
|
||||
|
||||
local function noclipThread()
|
||||
while noclip do
|
||||
SetEntityCoordsNoOffset(ESX.PlayerData.ped, noclip_pos.x, noclip_pos.y, noclip_pos.z, false, false, true)
|
||||
|
||||
if IsControlPressed(1, 34) then
|
||||
heading = heading + 1.5
|
||||
if heading > 360 then
|
||||
heading = 0
|
||||
end
|
||||
|
||||
SetEntityHeading(ESX.PlayerData.ped, heading)
|
||||
end
|
||||
|
||||
if IsControlPressed(1, 9) then
|
||||
heading = heading - 1.5
|
||||
if heading < 0 then
|
||||
heading = 360
|
||||
end
|
||||
|
||||
SetEntityHeading(ESX.PlayerData.ped, heading)
|
||||
end
|
||||
|
||||
if IsControlPressed(1, 8) then
|
||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 1.0, 0.0)
|
||||
end
|
||||
|
||||
if IsControlPressed(1, 32) then
|
||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, -1.0, 0.0)
|
||||
end
|
||||
|
||||
if IsControlPressed(1, 27) then
|
||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, 1.0)
|
||||
end
|
||||
|
||||
if IsControlPressed(1, 173) then
|
||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, -1.0)
|
||||
end
|
||||
Wait(0)
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent("esx:noclip", function()
|
||||
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
|
||||
if not admin then
|
||||
return
|
||||
end
|
||||
|
||||
if not noclip then
|
||||
noclip_pos = GetEntityCoords(ESX.PlayerData.ped, false)
|
||||
heading = GetEntityHeading(ESX.PlayerData.ped)
|
||||
end
|
||||
|
||||
noclip = not noclip
|
||||
if noclip then
|
||||
CreateThread(noclipThread)
|
||||
end
|
||||
|
||||
if noclip then
|
||||
ESX.ShowNotification(TranslateCap("noclip_message", Translate("enabled")), "success")
|
||||
else
|
||||
ESX.ShowNotification(TranslateCap("noclip_message", Translate("disabled")), "error")
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:killPlayer", function()
|
||||
SetEntityHealth(ESX.PlayerData.ped, 0)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:repairPedVehicle", function()
|
||||
local ped = ESX.PlayerData.ped
|
||||
local vehicle = GetVehiclePedIsIn(ped, false)
|
||||
SetVehicleEngineHealth(vehicle, 1000)
|
||||
SetVehicleEngineOn(vehicle, true, true, false)
|
||||
SetVehicleFixed(vehicle)
|
||||
SetVehicleDirtLevel(vehicle, 0)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:freezePlayer", function(input)
|
||||
if input == "freeze" then
|
||||
SetEntityCollision(ESX.PlayerData.ped, false, false)
|
||||
FreezeEntityPosition(ESX.PlayerData.ped, true)
|
||||
SetPlayerInvincible(ESX.playerId, true)
|
||||
elseif input == "unfreeze" then
|
||||
SetEntityCollision(ESX.PlayerData.ped, true, true)
|
||||
FreezeEntityPosition(ESX.PlayerData.ped, false)
|
||||
SetPlayerInvincible(ESX.playerId, false)
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model)
|
||||
cb(ESX.GetVehicleTypeClient(model))
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent('esx:updatePlayerData', function(key, val)
|
||||
ESX.SetPlayerData(key, val)
|
||||
end)
|
||||
|
||||
---@param command string
|
||||
ESX.SecureNetEvent("esx:executeCommand", function(command)
|
||||
ExecuteCommand(command)
|
||||
end)
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
if Core.Events[resource] then
|
||||
for i = 1, #Core.Events[resource] do
|
||||
RemoveEventHandler(Core.Events[resource][i])
|
||||
end
|
||||
end
|
||||
end)
|
||||
38
resources/[core]/es_extended/client/modules/interactions.lua
Normal file
38
resources/[core]/es_extended/client/modules/interactions.lua
Normal file
@@ -0,0 +1,38 @@
|
||||
local interactions = {}
|
||||
local pressedInteractions = {}
|
||||
|
||||
function ESX.RemoveInteraction(name)
|
||||
if not interactions[name] then return end
|
||||
interactions[name] = nil
|
||||
end
|
||||
|
||||
ESX.RegisterInteraction = function(name, onPress, condition)
|
||||
interactions[name] = {
|
||||
condition = condition or function() return true end,
|
||||
onPress = onPress,
|
||||
creator = GetInvokingResource() or "es_extended"
|
||||
}
|
||||
end
|
||||
|
||||
function ESX.GetInteractKey()
|
||||
local hash = joaat('esx_interact') | 0x80000000
|
||||
return GetControlInstructionalButton(0, hash, true):sub(3)
|
||||
end
|
||||
|
||||
ESX.RegisterInput("esx_interact", "Interact", "keyboard", "e", function()
|
||||
for _, interaction in pairs(interactions) do
|
||||
local success, result = pcall(interaction.condition)
|
||||
if success and result then
|
||||
pressedInteractions[#pressedInteractions+1] = interaction
|
||||
interaction.onPress()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
for name, interaction in pairs(interactions) do
|
||||
if interaction.creator == resource then
|
||||
interactions[name] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
57
resources/[core]/es_extended/client/modules/npwd.lua
Normal file
57
resources/[core]/es_extended/client/modules/npwd.lua
Normal file
@@ -0,0 +1,57 @@
|
||||
local npwd = GetResourceState("npwd"):find("start") and exports.npwd or nil
|
||||
|
||||
local function checkPhone()
|
||||
if not npwd then
|
||||
return
|
||||
end
|
||||
|
||||
local phoneItem <const> = ESX.SearchInventory("phone")
|
||||
npwd:setPhoneDisabled((phoneItem and phoneItem.count or 0) <= 0)
|
||||
end
|
||||
|
||||
RegisterNetEvent("esx:playerLoaded", checkPhone)
|
||||
|
||||
AddEventHandler("onClientResourceStart", function(resource)
|
||||
if resource ~= "npwd" then
|
||||
return
|
||||
end
|
||||
|
||||
npwd = GetResourceState("npwd"):find("start") and exports.npwd or nil
|
||||
|
||||
if ESX.PlayerLoaded then
|
||||
checkPhone()
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("onClientResourceStop", function(resource)
|
||||
if resource == "npwd" then
|
||||
npwd = nil
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:onPlayerLogout", function()
|
||||
if not npwd then
|
||||
return
|
||||
end
|
||||
|
||||
npwd:setPhoneVisible(false)
|
||||
npwd:setPhoneDisabled(true)
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:removeInventoryItem", function(item, count)
|
||||
if not npwd then
|
||||
return
|
||||
end
|
||||
|
||||
if item == "phone" and count == 0 then
|
||||
npwd:setPhoneDisabled(true)
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:addInventoryItem", function(item)
|
||||
if not npwd or item ~= "phone" then
|
||||
return
|
||||
end
|
||||
|
||||
npwd:setPhoneDisabled(false)
|
||||
end)
|
||||
54
resources/[core]/es_extended/client/modules/points.lua
Normal file
54
resources/[core]/es_extended/client/modules/points.lua
Normal file
@@ -0,0 +1,54 @@
|
||||
local points = {}
|
||||
|
||||
function ESX.CreatePointInternal(coords, distance, hidden, enter, leave)
|
||||
local point = {
|
||||
coords = coords,
|
||||
distance = distance,
|
||||
hidden = hidden,
|
||||
enter = enter,
|
||||
leave = leave,
|
||||
resource = GetInvokingResource()
|
||||
}
|
||||
local handle = ESX.Table.SizeOf(points) + 1
|
||||
points[handle] = point
|
||||
return handle
|
||||
end
|
||||
|
||||
function ESX.RemovePointInternal(handle)
|
||||
points[handle] = nil
|
||||
end
|
||||
|
||||
function ESX.HidePointInternal(handle, hidden)
|
||||
if points[handle] then
|
||||
points[handle].hidden = hidden
|
||||
end
|
||||
end
|
||||
|
||||
function StartPointsLoop()
|
||||
CreateThread(function()
|
||||
while true do
|
||||
local coords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
for handle, point in pairs(points) do
|
||||
if not point.hidden and #(coords - point.coords) <= point.distance then
|
||||
if not point.nearby then
|
||||
points[handle].nearby = true
|
||||
points[handle].enter()
|
||||
end
|
||||
elseif point.nearby then
|
||||
points[handle].nearby = false
|
||||
points[handle].leave()
|
||||
end
|
||||
end
|
||||
Wait(500)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
AddEventHandler('onResourceStop', function(resource)
|
||||
for handle, point in pairs(points) do
|
||||
if point.resource == resource then
|
||||
points[handle] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
99
resources/[core]/es_extended/client/modules/scaleform.lua
Normal file
99
resources/[core]/es_extended/client/modules/scaleform.lua
Normal file
@@ -0,0 +1,99 @@
|
||||
ESX.Scaleform = {}
|
||||
ESX.Scaleform.Utils = {}
|
||||
|
||||
function ESX.Scaleform.ShowFreemodeMessage(title, msg, sec)
|
||||
local scaleform = ESX.Scaleform.Utils.RunMethod("MP_BIG_MESSAGE_FREEMODE", "SHOW_SHARD_WASTED_MP_MESSAGE", false, title, msg)
|
||||
|
||||
local endTime = GetGameTimer() + (sec * 1000)
|
||||
while GetGameTimer() < endTime do
|
||||
Wait(0)
|
||||
DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0)
|
||||
end
|
||||
|
||||
SetScaleformMovieAsNoLongerNeeded(scaleform)
|
||||
end
|
||||
|
||||
function ESX.Scaleform.ShowBreakingNews(title, msg, bottom, sec)
|
||||
local scaleform = ESX.Scaleform.Utils.RunMethod("BREAKING_NEWS", "SET_TEXT", false, msg, bottom)
|
||||
ESX.Scaleform.Utils.RunMethod(scaleform, "SET_SCROLL_TEXT", false, 0, 0, title)
|
||||
ESX.Scaleform.Utils.RunMethod(scaleform, "DISPLAY_SCROLL_TEXT", false, 0, 0)
|
||||
|
||||
local endTime = GetGameTimer() + (sec * 1000)
|
||||
while GetGameTimer() < endTime do
|
||||
Wait(0)
|
||||
DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0)
|
||||
end
|
||||
|
||||
SetScaleformMovieAsNoLongerNeeded(scaleform)
|
||||
end
|
||||
|
||||
function ESX.Scaleform.ShowPopupWarning(title, msg, bottom, sec)
|
||||
local scaleform = ESX.Scaleform.Utils.RunMethod("POPUP_WARNING", "SHOW_POPUP_WARNING", false, 500.0, title, msg, bottom, true)
|
||||
|
||||
local endTime = GetGameTimer() + (sec * 1000)
|
||||
while GetGameTimer() < endTime do
|
||||
Wait(0)
|
||||
DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0)
|
||||
end
|
||||
|
||||
SetScaleformMovieAsNoLongerNeeded(scaleform)
|
||||
end
|
||||
|
||||
function ESX.Scaleform.ShowTrafficMovie(sec)
|
||||
local scaleform = ESX.Scaleform.Utils.RunMethod("TRAFFIC_CAM", "PLAY_CAM_MOVIE", false)
|
||||
|
||||
local endTime = GetGameTimer() + (sec * 1000)
|
||||
while GetGameTimer() < endTime do
|
||||
Wait(0)
|
||||
DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0)
|
||||
end
|
||||
|
||||
SetScaleformMovieAsNoLongerNeeded(scaleform)
|
||||
end
|
||||
|
||||
function ESX.Scaleform.Utils.RequestScaleformMovie(movie)
|
||||
local scaleform = RequestScaleformMovie(movie)
|
||||
|
||||
while not HasScaleformMovieLoaded(scaleform) do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
return scaleform
|
||||
end
|
||||
|
||||
--- Executes a method on a scaleform movie with optional arguments and return value.
|
||||
--- The caller is responsible for disposing of the scaleform using `SetScaleformMovieAsNoLongerNeeded`.
|
||||
---@param scaleform number|string # Scaleform handle or name to request the scaleform movie
|
||||
---@param methodName string # The method name to call on the scaleform
|
||||
---@param returnValue? boolean # Whether to return the value from the method
|
||||
---@param ... number|string|boolean # Arguments to pass to the method
|
||||
---@return number, number? # The scaleform handle, and the return value if `returnValue` is true
|
||||
function ESX.Scaleform.Utils.RunMethod(scaleform, methodName, returnValue, ...)
|
||||
scaleform = type(scaleform) == "number" and scaleform or ESX.Scaleform.Utils.RequestScaleformMovie(scaleform)
|
||||
BeginScaleformMovieMethod(scaleform, methodName)
|
||||
|
||||
local args = { ... }
|
||||
for _, arg in ipairs(args) do
|
||||
local typeArg = type(arg)
|
||||
|
||||
if typeArg == "number" then
|
||||
if math.type(arg) == "float" then
|
||||
ScaleformMovieMethodAddParamFloat(arg)
|
||||
else
|
||||
ScaleformMovieMethodAddParamInt(arg)
|
||||
end
|
||||
elseif typeArg == "string" then
|
||||
ScaleformMovieMethodAddParamTextureNameString(arg)
|
||||
elseif typeArg == "boolean" then
|
||||
ScaleformMovieMethodAddParamBool(arg)
|
||||
end
|
||||
end
|
||||
|
||||
if returnValue then
|
||||
return scaleform, EndScaleformMovieMethodReturnValue()
|
||||
end
|
||||
|
||||
EndScaleformMovieMethod()
|
||||
|
||||
return scaleform
|
||||
end
|
||||
70
resources/[core]/es_extended/client/modules/streaming.lua
Normal file
70
resources/[core]/es_extended/client/modules/streaming.lua
Normal file
@@ -0,0 +1,70 @@
|
||||
ESX.Streaming = {}
|
||||
|
||||
---@param modelHash number | string
|
||||
---@param cb? function
|
||||
---@return number | nil
|
||||
function ESX.Streaming.RequestModel(modelHash, cb)
|
||||
modelHash = type(modelHash) == "number" and modelHash or joaat(modelHash)
|
||||
|
||||
if not IsModelInCdimage(modelHash) then return end
|
||||
|
||||
RequestModel(modelHash)
|
||||
while not HasModelLoaded(modelHash) do Wait(500) end
|
||||
|
||||
return cb and cb(modelHash) or modelHash
|
||||
end
|
||||
|
||||
---@param textureDict string
|
||||
---@param cb? function
|
||||
---@return string | nil
|
||||
function ESX.Streaming.RequestStreamedTextureDict(textureDict, cb)
|
||||
RequestStreamedTextureDict(textureDict, false)
|
||||
|
||||
while not HasStreamedTextureDictLoaded(textureDict) do Wait(500) end
|
||||
|
||||
return cb and cb(textureDict) or textureDict
|
||||
end
|
||||
|
||||
---@param assetName string
|
||||
---@param cb? function
|
||||
---@return string | nil
|
||||
function ESX.Streaming.RequestNamedPtfxAsset(assetName, cb)
|
||||
RequestNamedPtfxAsset(assetName)
|
||||
|
||||
while not HasNamedPtfxAssetLoaded(assetName) do Wait(500) end
|
||||
|
||||
return cb and cb(assetName) or assetName
|
||||
end
|
||||
|
||||
---@param animSet string
|
||||
---@param cb? function
|
||||
---@return string | nil
|
||||
function ESX.Streaming.RequestAnimSet(animSet, cb)
|
||||
RequestAnimSet(animSet)
|
||||
|
||||
while not HasAnimSetLoaded(animSet) do Wait(500) end
|
||||
|
||||
return cb and cb(animSet) or animSet
|
||||
end
|
||||
|
||||
---@param animDict string
|
||||
---@param cb? function
|
||||
---@return string | nil
|
||||
function ESX.Streaming.RequestAnimDict(animDict, cb)
|
||||
RequestAnimDict(animDict)
|
||||
|
||||
while not HasAnimDictLoaded(animDict) do Wait(500) end
|
||||
|
||||
return cb and cb(animDict) or animDict
|
||||
end
|
||||
|
||||
---@param weaponHash number | string
|
||||
---@param cb? function
|
||||
---@return string | number | nil
|
||||
function ESX.Streaming.RequestWeaponAsset(weaponHash, cb)
|
||||
RequestWeaponAsset(weaponHash, 31, 0)
|
||||
|
||||
while not HasWeaponAssetLoaded(weaponHash) do Wait(500) end
|
||||
|
||||
return cb and cb(weaponHash) or weaponHash
|
||||
end
|
||||
14
resources/[core]/es_extended/client/modules/wrapper.lua
Normal file
14
resources/[core]/es_extended/client/modules/wrapper.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
local Chunks = {}
|
||||
|
||||
RegisterNUICallback("__chunk", function(data, cb)
|
||||
Chunks[data.id] = Chunks[data.id] or ""
|
||||
Chunks[data.id] = Chunks[data.id] .. data.chunk
|
||||
|
||||
if data["end"] then
|
||||
local msg = json.decode(Chunks[data.id])
|
||||
TriggerEvent(GetCurrentResourceName() .. ":message:" .. data.__type, msg)
|
||||
Chunks[data.id] = nil
|
||||
end
|
||||
|
||||
cb("")
|
||||
end)
|
||||
59
resources/[core]/es_extended/es_extended.sql
Normal file
59
resources/[core]/es_extended/es_extended.sql
Normal file
@@ -0,0 +1,59 @@
|
||||
CREATE DATABASE IF NOT EXISTS `es_extended`;
|
||||
|
||||
ALTER DATABASE `es_extended`
|
||||
DEFAULT CHARACTER SET UTF8MB4;
|
||||
|
||||
ALTER DATABASE `es_extended`
|
||||
DEFAULT COLLATE UTF8MB4_UNICODE_CI;
|
||||
|
||||
USE `es_extended`;
|
||||
|
||||
CREATE TABLE `users` (
|
||||
`identifier` VARCHAR(60) NOT NULL,
|
||||
`ssn` VARCHAR(11) NOT NULL,
|
||||
`accounts` LONGTEXT NULL DEFAULT NULL,
|
||||
`group` VARCHAR(50) NULL DEFAULT 'user',
|
||||
`inventory` LONGTEXT NULL DEFAULT NULL,
|
||||
`job` VARCHAR(20) NULL DEFAULT 'unemployed',
|
||||
`job_grade` INT NULL DEFAULT 0,
|
||||
`loadout` LONGTEXT NULL DEFAULT NULL,
|
||||
`metadata` LONGTEXT NULL DEFAULT NULL,
|
||||
`position` longtext NULL DEFAULT NULL,
|
||||
|
||||
PRIMARY KEY (`identifier`),
|
||||
UNIQUE KEY `unique_ssn` (`ssn`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `items` (
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`label` VARCHAR(50) NOT NULL,
|
||||
`weight` INT NOT NULL DEFAULT 1,
|
||||
`rare` TINYINT NOT NULL DEFAULT 0,
|
||||
`can_remove` TINYINT NOT NULL DEFAULT 1,
|
||||
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `job_grades` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`job_name` VARCHAR(50) DEFAULT NULL,
|
||||
`grade` INT NOT NULL,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`label` VARCHAR(50) NOT NULL,
|
||||
`salary` INT NOT NULL,
|
||||
`skin_male` LONGTEXT NOT NULL,
|
||||
`skin_female` LONGTEXT NOT NULL,
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO `job_grades` VALUES (1,'unemployed',0,'unemployed','Unemployed',200,'{}','{}');
|
||||
|
||||
CREATE TABLE `jobs` (
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`label` VARCHAR(50) DEFAULT NULL,
|
||||
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO `jobs` VALUES ('unemployed','Unemployed');
|
||||
87
resources/[core]/es_extended/fxmanifest.lua
Normal file
87
resources/[core]/es_extended/fxmanifest.lua
Normal file
@@ -0,0 +1,87 @@
|
||||
fx_version 'cerulean'
|
||||
|
||||
game 'gta5'
|
||||
description 'The Core resource that provides the functionalities for all other resources.'
|
||||
lua54 'yes'
|
||||
version '1.13.5'
|
||||
|
||||
shared_scripts {
|
||||
'locale.lua',
|
||||
|
||||
'shared/config/main.lua',
|
||||
'shared/config/weapons.lua',
|
||||
'shared/config/adjustments.lua',
|
||||
|
||||
'shared/main.lua',
|
||||
'shared/functions.lua',
|
||||
'shared/modules/*.lua',
|
||||
}
|
||||
|
||||
server_scripts {
|
||||
'@oxmysql/lib/MySQL.lua',
|
||||
'shared/config/logs.lua',
|
||||
|
||||
'server/core.lua',
|
||||
'server/functions.lua',
|
||||
'server/common.lua',
|
||||
'server/modules/callback.lua',
|
||||
'server/classes/player.lua',
|
||||
'server/classes/vehicle.lua',
|
||||
'server/classes/overrides/*.lua',
|
||||
'server/modules/onesync.lua',
|
||||
'server/modules/paycheck.lua',
|
||||
|
||||
'server/main.lua',
|
||||
'server/modules/commands.lua',
|
||||
|
||||
'server/bridge/**/*.lua',
|
||||
'server/modules/npwd.lua',
|
||||
'server/modules/createJob.lua',
|
||||
'server/migration/**/main.lua',
|
||||
'server/migration/main.lua',
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
'client/main.lua',
|
||||
'client/functions.lua',
|
||||
'client/modules/wrapper.lua',
|
||||
'client/modules/callback.lua',
|
||||
'client/modules/adjustments.lua',
|
||||
'client/modules/points.lua',
|
||||
|
||||
'client/modules/events.lua',
|
||||
|
||||
'client/modules/actions.lua',
|
||||
'client/modules/death.lua',
|
||||
'client/modules/npwd.lua',
|
||||
'client/modules/interactions.lua',
|
||||
'client/modules/scaleform.lua',
|
||||
'client/modules/streaming.lua',
|
||||
}
|
||||
|
||||
ui_page {
|
||||
'html/ui.html'
|
||||
}
|
||||
|
||||
files {
|
||||
'imports.lua',
|
||||
'locales/*.lua',
|
||||
'locale.js',
|
||||
'html/ui.html',
|
||||
|
||||
'html/css/app.css',
|
||||
|
||||
'html/js/mustache.min.js',
|
||||
'html/js/wrapper.js',
|
||||
'html/js/app.js',
|
||||
|
||||
'html/fonts/pdown.ttf',
|
||||
'html/fonts/bankgothic.ttf',
|
||||
"client/imports/*.lua",
|
||||
}
|
||||
|
||||
dependencies {
|
||||
'/native:0x6AE51D4B',
|
||||
'/native:0xA61C8FC6',
|
||||
'oxmysql',
|
||||
}
|
||||
75
resources/[core]/es_extended/html/css/app.css
Normal file
75
resources/[core]/es_extended/html/css/app.css
Normal file
@@ -0,0 +1,75 @@
|
||||
@font-face {
|
||||
font-family: "Pricedown";
|
||||
src: url("../fonts/pdown.ttf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "bankgothic";
|
||||
src: url("../fonts/bankgothic.ttf");
|
||||
}
|
||||
|
||||
html {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#inventory_notifications {
|
||||
font-family: bankgothic;
|
||||
position: absolute;
|
||||
right: 40;
|
||||
bottom: 40;
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
|
||||
}
|
||||
|
||||
.menu {
|
||||
font-family: "Open Sans", sans-serif;
|
||||
min-width: 400px;
|
||||
min-height: 250px;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
left: 40;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.menu .head {
|
||||
font-family: "Open Sans", sans-serif;
|
||||
font-size: 28px;
|
||||
padding: 10px;
|
||||
background: #1a1a1a;
|
||||
border-bottom: 3px solid #bc1635;
|
||||
border-radius: 10px 10px 0 0;
|
||||
-webkit-border-radius: 10px 10px 0 0;
|
||||
-moz-border-radius: 10px 10px 0 0;
|
||||
-o-border-radius: 10px 10px 0 0;
|
||||
box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
|
||||
-webkit-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
|
||||
-moz-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
|
||||
-o-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
|
||||
box-shadow: 1px 1px 10px 4px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.menu .head span {
|
||||
font-family: "Pricedown";
|
||||
font-size: 28px;
|
||||
padding-left: 15px;
|
||||
padding-top: 6px;
|
||||
}
|
||||
|
||||
.menu .menu-items .menu-item {
|
||||
font-family: "Open Sans", sans-serif;
|
||||
font-size: 14px;
|
||||
height: 40px;
|
||||
display: block;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: inset 1px 0px 0px 1px #b8b8b8;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
color: #3a3a3a;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.menu .menu-items .menu-item.selected {
|
||||
background-color: #ccc;
|
||||
}
|
||||
BIN
resources/[core]/es_extended/html/fonts/bankgothic.ttf
Normal file
BIN
resources/[core]/es_extended/html/fonts/bankgothic.ttf
Normal file
Binary file not shown.
BIN
resources/[core]/es_extended/html/fonts/pdown.ttf
Normal file
BIN
resources/[core]/es_extended/html/fonts/pdown.ttf
Normal file
Binary file not shown.
40
resources/[core]/es_extended/html/js/app.js
Normal file
40
resources/[core]/es_extended/html/js/app.js
Normal file
@@ -0,0 +1,40 @@
|
||||
(() => {
|
||||
ESX = {};
|
||||
|
||||
ESX.inventoryNotification = function (add, label, count) {
|
||||
let notif = "";
|
||||
|
||||
if (add) {
|
||||
notif += "+";
|
||||
} else {
|
||||
notif += "-";
|
||||
}
|
||||
|
||||
if (count) {
|
||||
notif += count + " " + label;
|
||||
} else {
|
||||
notif += " " + label;
|
||||
}
|
||||
|
||||
let elem = $("<div>" + notif + "</div>");
|
||||
$("#inventory_notifications").append(elem);
|
||||
|
||||
$(elem)
|
||||
.delay(3000)
|
||||
.fadeOut(1000, function () {
|
||||
elem.remove();
|
||||
});
|
||||
};
|
||||
|
||||
window.onData = (data) => {
|
||||
if (data.action === "inventoryNotification") {
|
||||
ESX.inventoryNotification(data.add, data.item, data.count);
|
||||
}
|
||||
};
|
||||
|
||||
window.onload = function (e) {
|
||||
window.addEventListener("message", (event) => {
|
||||
onData(event.data);
|
||||
});
|
||||
};
|
||||
})();
|
||||
347
resources/[core]/es_extended/html/js/mustache.min.js
vendored
Normal file
347
resources/[core]/es_extended/html/js/mustache.min.js
vendored
Normal file
@@ -0,0 +1,347 @@
|
||||
(function defineMustache(global, factory) {
|
||||
if (typeof exports === "object" && exports && typeof exports.nodeName !== "string") {
|
||||
factory(exports);
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(["exports"], factory);
|
||||
} else {
|
||||
global.Mustache = {};
|
||||
factory(global.Mustache);
|
||||
}
|
||||
})(this, function mustacheFactory(mustache) {
|
||||
var objectToString = Object.prototype.toString;
|
||||
var isArray =
|
||||
Array.isArray ||
|
||||
function isArrayPolyfill(object) {
|
||||
return objectToString.call(object) === "[object Array]";
|
||||
};
|
||||
function isFunction(object) {
|
||||
return typeof object === "function";
|
||||
}
|
||||
function typeStr(obj) {
|
||||
return isArray(obj) ? "array" : typeof obj;
|
||||
}
|
||||
function escapeRegExp(string) {
|
||||
return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
|
||||
}
|
||||
function hasProperty(obj, propName) {
|
||||
return obj != null && typeof obj === "object" && propName in obj;
|
||||
}
|
||||
var regExpTest = RegExp.prototype.test;
|
||||
function testRegExp(re, string) {
|
||||
return regExpTest.call(re, string);
|
||||
}
|
||||
var nonSpaceRe = /\S/;
|
||||
function isWhitespace(string) {
|
||||
return !testRegExp(nonSpaceRe, string);
|
||||
}
|
||||
var entityMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/", "`": "`", "=": "=" };
|
||||
function escapeHtml(string) {
|
||||
return String(string).replace(/[&<>"'`=\/]/g, function fromEntityMap(s) {
|
||||
return entityMap[s];
|
||||
});
|
||||
}
|
||||
var whiteRe = /\s*/;
|
||||
var spaceRe = /\s+/;
|
||||
var equalsRe = /\s*=/;
|
||||
var curlyRe = /\s*\}/;
|
||||
var tagRe = /#|\^|\/|>|\{|&|=|!/;
|
||||
function parseTemplate(template, tags) {
|
||||
if (!template) return [];
|
||||
var sections = [];
|
||||
var tokens = [];
|
||||
var spaces = [];
|
||||
var hasTag = false;
|
||||
var nonSpace = false;
|
||||
function stripSpace() {
|
||||
if (hasTag && !nonSpace) {
|
||||
while (spaces.length) delete tokens[spaces.pop()];
|
||||
} else {
|
||||
spaces = [];
|
||||
}
|
||||
hasTag = false;
|
||||
nonSpace = false;
|
||||
}
|
||||
var openingTagRe, closingTagRe, closingCurlyRe;
|
||||
function compileTags(tagsToCompile) {
|
||||
if (typeof tagsToCompile === "string") tagsToCompile = tagsToCompile.split(spaceRe, 2);
|
||||
if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error("Invalid tags: " + tagsToCompile);
|
||||
openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + "\\s*");
|
||||
closingTagRe = new RegExp("\\s*" + escapeRegExp(tagsToCompile[1]));
|
||||
closingCurlyRe = new RegExp("\\s*" + escapeRegExp("}" + tagsToCompile[1]));
|
||||
}
|
||||
compileTags(tags || mustache.tags);
|
||||
var scanner = new Scanner(template);
|
||||
var start, type, value, chr, token, openSection;
|
||||
while (!scanner.eos()) {
|
||||
start = scanner.pos;
|
||||
value = scanner.scanUntil(openingTagRe);
|
||||
if (value) {
|
||||
for (var i = 0, valueLength = value.length; i < valueLength; ++i) {
|
||||
chr = value.charAt(i);
|
||||
if (isWhitespace(chr)) {
|
||||
spaces.push(tokens.length);
|
||||
} else {
|
||||
nonSpace = true;
|
||||
}
|
||||
tokens.push(["text", chr, start, start + 1]);
|
||||
start += 1;
|
||||
if (chr === "\n") stripSpace();
|
||||
}
|
||||
}
|
||||
if (!scanner.scan(openingTagRe)) break;
|
||||
hasTag = true;
|
||||
type = scanner.scan(tagRe) || "name";
|
||||
scanner.scan(whiteRe);
|
||||
if (type === "=") {
|
||||
value = scanner.scanUntil(equalsRe);
|
||||
scanner.scan(equalsRe);
|
||||
scanner.scanUntil(closingTagRe);
|
||||
} else if (type === "{") {
|
||||
value = scanner.scanUntil(closingCurlyRe);
|
||||
scanner.scan(curlyRe);
|
||||
scanner.scanUntil(closingTagRe);
|
||||
type = "&";
|
||||
} else {
|
||||
value = scanner.scanUntil(closingTagRe);
|
||||
}
|
||||
if (!scanner.scan(closingTagRe)) throw new Error("Unclosed tag at " + scanner.pos);
|
||||
token = [type, value, start, scanner.pos];
|
||||
tokens.push(token);
|
||||
if (type === "#" || type === "^") {
|
||||
sections.push(token);
|
||||
} else if (type === "/") {
|
||||
openSection = sections.pop();
|
||||
if (!openSection) throw new Error('Unopened section "' + value + '" at ' + start);
|
||||
if (openSection[1] !== value) throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
|
||||
} else if (type === "name" || type === "{" || type === "&") {
|
||||
nonSpace = true;
|
||||
} else if (type === "=") {
|
||||
compileTags(value);
|
||||
}
|
||||
}
|
||||
openSection = sections.pop();
|
||||
if (openSection) throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
|
||||
return nestTokens(squashTokens(tokens));
|
||||
}
|
||||
function squashTokens(tokens) {
|
||||
var squashedTokens = [];
|
||||
var token, lastToken;
|
||||
for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
|
||||
token = tokens[i];
|
||||
if (token) {
|
||||
if (token[0] === "text" && lastToken && lastToken[0] === "text") {
|
||||
lastToken[1] += token[1];
|
||||
lastToken[3] = token[3];
|
||||
} else {
|
||||
squashedTokens.push(token);
|
||||
lastToken = token;
|
||||
}
|
||||
}
|
||||
}
|
||||
return squashedTokens;
|
||||
}
|
||||
function nestTokens(tokens) {
|
||||
var nestedTokens = [];
|
||||
var collector = nestedTokens;
|
||||
var sections = [];
|
||||
var token, section;
|
||||
for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
|
||||
token = tokens[i];
|
||||
switch (token[0]) {
|
||||
case "#":
|
||||
case "^":
|
||||
collector.push(token);
|
||||
sections.push(token);
|
||||
collector = token[4] = [];
|
||||
break;
|
||||
case "/":
|
||||
section = sections.pop();
|
||||
section[5] = token[2];
|
||||
collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;
|
||||
break;
|
||||
default:
|
||||
collector.push(token);
|
||||
}
|
||||
}
|
||||
return nestedTokens;
|
||||
}
|
||||
function Scanner(string) {
|
||||
this.string = string;
|
||||
this.tail = string;
|
||||
this.pos = 0;
|
||||
}
|
||||
Scanner.prototype.eos = function eos() {
|
||||
return this.tail === "";
|
||||
};
|
||||
Scanner.prototype.scan = function scan(re) {
|
||||
var match = this.tail.match(re);
|
||||
if (!match || match.index !== 0) return "";
|
||||
var string = match[0];
|
||||
this.tail = this.tail.substring(string.length);
|
||||
this.pos += string.length;
|
||||
return string;
|
||||
};
|
||||
Scanner.prototype.scanUntil = function scanUntil(re) {
|
||||
var index = this.tail.search(re),
|
||||
match;
|
||||
switch (index) {
|
||||
case -1:
|
||||
match = this.tail;
|
||||
this.tail = "";
|
||||
break;
|
||||
case 0:
|
||||
match = "";
|
||||
break;
|
||||
default:
|
||||
match = this.tail.substring(0, index);
|
||||
this.tail = this.tail.substring(index);
|
||||
}
|
||||
this.pos += match.length;
|
||||
return match;
|
||||
};
|
||||
function Context(view, parentContext) {
|
||||
this.view = view;
|
||||
this.cache = { ".": this.view };
|
||||
this.parent = parentContext;
|
||||
}
|
||||
Context.prototype.push = function push(view) {
|
||||
return new Context(view, this);
|
||||
};
|
||||
Context.prototype.lookup = function lookup(name) {
|
||||
var cache = this.cache;
|
||||
var value;
|
||||
if (cache.hasOwnProperty(name)) {
|
||||
value = cache[name];
|
||||
} else {
|
||||
var context = this,
|
||||
names,
|
||||
index,
|
||||
lookupHit = false;
|
||||
while (context) {
|
||||
if (name.indexOf(".") > 0) {
|
||||
value = context.view;
|
||||
names = name.split(".");
|
||||
index = 0;
|
||||
while (value != null && index < names.length) {
|
||||
if (index === names.length - 1) lookupHit = hasProperty(value, names[index]);
|
||||
value = value[names[index++]];
|
||||
}
|
||||
} else {
|
||||
value = context.view[name];
|
||||
lookupHit = hasProperty(context.view, name);
|
||||
}
|
||||
if (lookupHit) break;
|
||||
context = context.parent;
|
||||
}
|
||||
cache[name] = value;
|
||||
}
|
||||
if (isFunction(value)) value = value.call(this.view);
|
||||
return value;
|
||||
};
|
||||
function Writer() {
|
||||
this.cache = {};
|
||||
}
|
||||
Writer.prototype.clearCache = function clearCache() {
|
||||
this.cache = {};
|
||||
};
|
||||
Writer.prototype.parse = function parse(template, tags) {
|
||||
var cache = this.cache;
|
||||
var tokens = cache[template];
|
||||
if (tokens == null) tokens = cache[template] = parseTemplate(template, tags);
|
||||
return tokens;
|
||||
};
|
||||
Writer.prototype.render = function render(template, view, partials) {
|
||||
var tokens = this.parse(template);
|
||||
var context = view instanceof Context ? view : new Context(view);
|
||||
return this.renderTokens(tokens, context, partials, template);
|
||||
};
|
||||
Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate) {
|
||||
var buffer = "";
|
||||
var token, symbol, value;
|
||||
for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
|
||||
value = undefined;
|
||||
token = tokens[i];
|
||||
symbol = token[0];
|
||||
if (symbol === "#") value = this.renderSection(token, context, partials, originalTemplate);
|
||||
else if (symbol === "^") value = this.renderInverted(token, context, partials, originalTemplate);
|
||||
else if (symbol === ">") value = this.renderPartial(token, context, partials, originalTemplate);
|
||||
else if (symbol === "&") value = this.unescapedValue(token, context);
|
||||
else if (symbol === "name") value = this.escapedValue(token, context);
|
||||
else if (symbol === "text") value = this.rawValue(token);
|
||||
if (value !== undefined) buffer += value;
|
||||
}
|
||||
return buffer;
|
||||
};
|
||||
Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) {
|
||||
var self = this;
|
||||
var buffer = "";
|
||||
var value = context.lookup(token[1]);
|
||||
function subRender(template) {
|
||||
return self.render(template, context, partials);
|
||||
}
|
||||
if (!value) return;
|
||||
if (isArray(value)) {
|
||||
for (var j = 0, valueLength = value.length; j < valueLength; ++j) {
|
||||
buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);
|
||||
}
|
||||
} else if (typeof value === "object" || typeof value === "string" || typeof value === "number") {
|
||||
buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);
|
||||
} else if (isFunction(value)) {
|
||||
if (typeof originalTemplate !== "string") throw new Error("Cannot use higher-order sections without the original template");
|
||||
value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);
|
||||
if (value != null) buffer += value;
|
||||
} else {
|
||||
buffer += this.renderTokens(token[4], context, partials, originalTemplate);
|
||||
}
|
||||
return buffer;
|
||||
};
|
||||
Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) {
|
||||
var value = context.lookup(token[1]);
|
||||
if (!value || (isArray(value) && value.length === 0)) return this.renderTokens(token[4], context, partials, originalTemplate);
|
||||
};
|
||||
Writer.prototype.renderPartial = function renderPartial(token, context, partials) {
|
||||
if (!partials) return;
|
||||
var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];
|
||||
if (value != null) return this.renderTokens(this.parse(value), context, partials, value);
|
||||
};
|
||||
Writer.prototype.unescapedValue = function unescapedValue(token, context) {
|
||||
var value = context.lookup(token[1]);
|
||||
if (value != null) return value;
|
||||
};
|
||||
Writer.prototype.escapedValue = function escapedValue(token, context) {
|
||||
var value = context.lookup(token[1]);
|
||||
if (value != null) return mustache.escape(value);
|
||||
};
|
||||
Writer.prototype.rawValue = function rawValue(token) {
|
||||
return token[1];
|
||||
};
|
||||
mustache.name = "mustache.js";
|
||||
mustache.version = "2.3.0";
|
||||
mustache.tags = ["{{", "}}"];
|
||||
var defaultWriter = new Writer();
|
||||
mustache.clearCache = function clearCache() {
|
||||
return defaultWriter.clearCache();
|
||||
};
|
||||
mustache.parse = function parse(template, tags) {
|
||||
return defaultWriter.parse(template, tags);
|
||||
};
|
||||
mustache.render = function render(template, view, partials) {
|
||||
if (typeof template !== "string") {
|
||||
throw new TypeError('Invalid template! Template should be a "string" ' + 'but "' + typeStr(template) + '" was given as the first ' + "argument for mustache#render(template, view, partials)");
|
||||
}
|
||||
return defaultWriter.render(template, view, partials);
|
||||
};
|
||||
mustache.to_html = function to_html(template, view, partials, send) {
|
||||
var result = mustache.render(template, view, partials);
|
||||
if (isFunction(send)) {
|
||||
send(result);
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
mustache.escape = escapeHtml;
|
||||
mustache.Scanner = Scanner;
|
||||
mustache.Context = Context;
|
||||
mustache.Writer = Writer;
|
||||
return mustache;
|
||||
});
|
||||
34
resources/[core]/es_extended/html/js/wrapper.js
Normal file
34
resources/[core]/es_extended/html/js/wrapper.js
Normal file
@@ -0,0 +1,34 @@
|
||||
(() => {
|
||||
let ESXWrapper = {};
|
||||
ESXWrapper.MessageSize = 1024;
|
||||
ESXWrapper.messageId = 0;
|
||||
|
||||
window.SendMessage = function (namespace, type, msg) {
|
||||
ESXWrapper.messageId = ESXWrapper.messageId < 65535 ? ESXWrapper.messageId + 1 : 0;
|
||||
const str = JSON.stringify(msg);
|
||||
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
let count = 0;
|
||||
let chunk = "";
|
||||
|
||||
while (count < ESXWrapper.MessageSize && i < str.length) {
|
||||
chunk += str[i];
|
||||
|
||||
count++;
|
||||
i++;
|
||||
}
|
||||
|
||||
i--;
|
||||
|
||||
const data = {
|
||||
__type: type,
|
||||
id: ESXWrapper.messageId,
|
||||
chunk: chunk,
|
||||
};
|
||||
|
||||
if (i === str.length - 1) data.end = true;
|
||||
|
||||
$.post("http://" + namespace + "/__chunk", JSON.stringify(data));
|
||||
}
|
||||
};
|
||||
})();
|
||||
12
resources/[core]/es_extended/html/ui.html
Normal file
12
resources/[core]/es_extended/html/ui.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="css/app.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="inventory_notifications"></div>
|
||||
|
||||
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
|
||||
<script src="js/mustache.min.js"></script>
|
||||
<script src="js/app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
346
resources/[core]/es_extended/imports.lua
Normal file
346
resources/[core]/es_extended/imports.lua
Normal file
@@ -0,0 +1,346 @@
|
||||
ESX = exports["es_extended"]:getSharedObject()
|
||||
ESX.currentResourceName = GetCurrentResourceName()
|
||||
|
||||
OnPlayerData = function(key, val, last) end
|
||||
|
||||
local function TrackPedCoordsOnce()
|
||||
if not ESX or not ESX.PlayerData then
|
||||
return
|
||||
end
|
||||
|
||||
ESX.PlayerData.coords = nil
|
||||
|
||||
setmetatable(ESX.PlayerData, {
|
||||
__index = function(self, key)
|
||||
if key ~= "coords" then
|
||||
return
|
||||
end
|
||||
|
||||
local coords = GetEntityCoords(ESX.PlayerData.ped)
|
||||
|
||||
return coords
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
if not IsDuplicityVersion() then -- Only register this event for the client
|
||||
AddEventHandler("esx:setPlayerData", function(key, val, last)
|
||||
if GetInvokingResource() == "es_extended" then
|
||||
ESX.PlayerData[key] = val
|
||||
if OnPlayerData then
|
||||
OnPlayerData(key, val, last)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:playerLoaded", function(xPlayer)
|
||||
ESX.PlayerData = xPlayer
|
||||
while not ESX.PlayerData.ped or not DoesEntityExist(ESX.PlayerData.ped) do Wait(0) end
|
||||
ESX.PlayerLoaded = true
|
||||
|
||||
TrackPedCoordsOnce()
|
||||
end)
|
||||
|
||||
TrackPedCoordsOnce()
|
||||
|
||||
ESX.SecureNetEvent("esx:onPlayerLogout", function()
|
||||
ESX.PlayerLoaded = false
|
||||
ESX.PlayerData = {}
|
||||
end)
|
||||
|
||||
if not ESX.GetConfig("CustomInventory") then
|
||||
ESX.SecureNetEvent("esx:addInventoryItem", function(item, count, showNotification)
|
||||
for i = 1, #ESX.PlayerData.inventory do
|
||||
if ESX.PlayerData.inventory[i].name == item then
|
||||
ESX.PlayerData.inventory[i].count = count
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:removeInventoryItem", function(item, count, showNotification)
|
||||
for i = 1, #ESX.PlayerData.inventory do
|
||||
if ESX.PlayerData.inventory[i].name == item then
|
||||
ESX.PlayerData.inventory[i].count = count
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:addLoadoutItem", function(weaponName, weaponLabel, ammo)
|
||||
table.insert(ESX.PlayerData.loadout, {
|
||||
name = weaponName,
|
||||
ammo = ammo,
|
||||
label = weaponLabel,
|
||||
components = {},
|
||||
tintIndex = 0,
|
||||
})
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:removeLoadoutItem", function(weaponName, weaponLabel)
|
||||
for i = 1, #ESX.PlayerData.loadout do
|
||||
if ESX.PlayerData.loadout[i].name == weaponName then
|
||||
table.remove(ESX.PlayerData.loadout, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local external = { { "Class", "class.lua" }, { "Point", "point.lua" } }
|
||||
for i = 1, #external do
|
||||
local module = external[i]
|
||||
local path = string.format("client/imports/%s", module[2])
|
||||
|
||||
local file = LoadResourceFile("es_extended", path)
|
||||
if file then
|
||||
local fn, err = load(file, ('@@es_extended/%s'):format(path))
|
||||
|
||||
if not fn or err then
|
||||
return error(('\n^1Error importing module (%s)'):format(external[i]))
|
||||
end
|
||||
|
||||
ESX[module[1]] = fn()
|
||||
else
|
||||
return error(('\n^1Error loading module (%s)'):format(external[i]))
|
||||
end
|
||||
end
|
||||
else
|
||||
---@param src number
|
||||
---@return StaticPlayer
|
||||
local function createStaticPlayer(src)
|
||||
return setmetatable({ src = src }, {
|
||||
__index = function(self, method)
|
||||
return function(...)
|
||||
return exports.es_extended:RunStaticPlayerMethod(self.src, method, ...)
|
||||
end
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
---@param src number|string
|
||||
---@return StaticPlayer?
|
||||
function ESX.Player(src)
|
||||
if type(src) ~= "number" then
|
||||
src = ESX.GetPlayerIdFromIdentifier(src)
|
||||
if not src then return end
|
||||
elseif not ESX.IsPlayerLoaded(src) then
|
||||
return
|
||||
end
|
||||
|
||||
return createStaticPlayer(src)
|
||||
end
|
||||
|
||||
---@param key? string
|
||||
---@param val? string|string[]
|
||||
---@return StaticPlayer[] | table<any, StaticPlayer[]>
|
||||
function ESX.ExtendedPlayers(key, val)
|
||||
local playerIds = ESX.GetExtendedPlayers(key, val, true)
|
||||
|
||||
if key and type(val) == "table" then
|
||||
---@cast playerIds table<any, number[]>
|
||||
local retVal = {}
|
||||
for group, ids in pairs(playerIds) do
|
||||
retVal[group] = {}
|
||||
for i = 1, #ids do
|
||||
retVal[group][i] = createStaticPlayer(ids[i])
|
||||
end
|
||||
end
|
||||
return retVal
|
||||
else
|
||||
---@cast playerIds number[]
|
||||
local retVal = {}
|
||||
for i = 1, #playerIds do
|
||||
retVal[i] = createStaticPlayer(playerIds[i])
|
||||
end
|
||||
return retVal
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if GetResourceState("ox_lib") == "missing" then
|
||||
---@Credits: https://github.com/overextended/ox_lib/blob/master/imports/require/shared.lua - Licensed under the GNU Lesser General Public License v3.0
|
||||
local loaded = {}
|
||||
local _require = require
|
||||
|
||||
package = {
|
||||
path = './?.lua;./?/init.lua',
|
||||
preload = {},
|
||||
loaded = setmetatable({}, {
|
||||
__index = loaded,
|
||||
__newindex = function() end,
|
||||
__metatable = false,
|
||||
})
|
||||
}
|
||||
|
||||
---@param modName string
|
||||
---@return string
|
||||
---@return string
|
||||
local function getModuleInfo(modName)
|
||||
local resource = modName:match('^@(.-)/.+') --[[@as string?]]
|
||||
|
||||
if resource then
|
||||
return resource, modName:sub(#resource + 3)
|
||||
end
|
||||
|
||||
local idx = 4 -- call stack depth (kept slightly lower than expected depth "just in case")
|
||||
|
||||
while true do
|
||||
local dbgInfo = debug.getinfo(idx, 'S')
|
||||
local src = dbgInfo and dbgInfo.source
|
||||
|
||||
if not src then
|
||||
return ESX.currentResourceName, modName
|
||||
end
|
||||
|
||||
resource = src:match('^@@([^/]+)/.+')
|
||||
|
||||
if resource and not src:find('^@@es_extended/imports') then
|
||||
return resource, modName
|
||||
end
|
||||
|
||||
idx = idx + 1
|
||||
end
|
||||
end
|
||||
|
||||
local tempData = {}
|
||||
|
||||
---@param name string
|
||||
---@param path string
|
||||
---@return string? filename
|
||||
---@return string? errmsg
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
function package.searchpath(name, path)
|
||||
local resource, modName = getModuleInfo(name:gsub('%.', '/'))
|
||||
local tried = {}
|
||||
|
||||
for template in path:gmatch('[^;]+') do
|
||||
local fileName = template:gsub('^%./', ''):gsub('?', modName:gsub('%.', '/') or modName)
|
||||
local file = LoadResourceFile(resource, fileName)
|
||||
|
||||
if file then
|
||||
tempData[1] = file
|
||||
tempData[2] = resource
|
||||
return fileName
|
||||
end
|
||||
|
||||
tried[#tried + 1] = ("no file '@%s/%s'"):format(resource, fileName)
|
||||
end
|
||||
|
||||
return nil, table.concat(tried, "\n\t")
|
||||
end
|
||||
|
||||
---Attempts to load a module at the given path relative to the resource root directory.\
|
||||
---Returns a function to load the module chunk, or a string containing all tested paths.
|
||||
---@param modName string
|
||||
---@param env? table
|
||||
local function loadModule(modName, env)
|
||||
local fileName, err = package.searchpath(modName, package.path)
|
||||
|
||||
if fileName then
|
||||
local file = tempData[1]
|
||||
local resource = tempData[2]
|
||||
|
||||
ESX.Table.Wipe(tempData)
|
||||
return assert(load(file, ('@@%s/%s'):format(resource, fileName), 't', env or _ENV))
|
||||
end
|
||||
|
||||
return nil, err or 'unknown error'
|
||||
end
|
||||
|
||||
---@diagnostic disable-next-line: duplicate-doc-alias
|
||||
---@alias PackageSearcher
|
||||
---| fun(modName: string): function loader
|
||||
---| fun(modName: string): nil|false, string errmsg
|
||||
|
||||
---@type PackageSearcher[]
|
||||
package.searchers = {
|
||||
function(modName)
|
||||
local ok, result = pcall(_require, modName)
|
||||
|
||||
if ok then return result end
|
||||
|
||||
return ok, result
|
||||
end,
|
||||
function(modName)
|
||||
if package.preload[modName] ~= nil then
|
||||
return package.preload[modName]
|
||||
end
|
||||
|
||||
return nil, ("no field package.preload['%s']"):format(modName)
|
||||
end,
|
||||
function(modName) return loadModule(modName) end,
|
||||
}
|
||||
|
||||
---@param filePath string
|
||||
---@param env? table
|
||||
---@return unknown
|
||||
---Loads and runs a Lua file at the given path. Unlike require, the chunk is not cached for future use.
|
||||
function ESX.load(filePath, env)
|
||||
if type(filePath) ~= 'string' then
|
||||
error(("file path must be a string (received '%s')"):format(filePath), 2)
|
||||
end
|
||||
|
||||
local result, err = loadModule(filePath, env)
|
||||
|
||||
if result then return result() end
|
||||
|
||||
error(("file '%s' not found\n\t%s"):format(filePath, err))
|
||||
end
|
||||
|
||||
---@param filePath string
|
||||
---@return table
|
||||
---Loads and decodes a json file at the given path.
|
||||
function ESX.loadJson(filePath)
|
||||
if type(filePath) ~= 'string' then
|
||||
error(("file path must be a string (received '%s')"):format(filePath), 2)
|
||||
end
|
||||
|
||||
local resourceSrc, modPath = getModuleInfo(filePath:gsub('%.', '/'))
|
||||
local resourceFile = LoadResourceFile(resourceSrc, ('%s.json'):format(modPath))
|
||||
|
||||
if resourceFile then
|
||||
return json.decode(resourceFile)
|
||||
end
|
||||
|
||||
error(("json file '%s' not found\n\tno file '@%s/%s.json'"):format(filePath, resourceSrc, modPath))
|
||||
end
|
||||
|
||||
---Loads the given module, returns any value returned by the seacher (`true` when `nil`).\
|
||||
---Passing `@resourceName.modName` loads a module from a remote resource.
|
||||
---@param modName string
|
||||
---@return unknown
|
||||
function ESX.require(modName)
|
||||
if type(modName) ~= 'string' then
|
||||
error(("module name must be a string (received '%s')"):format(modName), 3)
|
||||
end
|
||||
|
||||
local module = loaded[modName]
|
||||
|
||||
if module == '__loading' then
|
||||
error(("^1circular-dependency occurred when loading module '%s'^0"):format(modName), 2)
|
||||
end
|
||||
|
||||
if module ~= nil then return module end
|
||||
|
||||
loaded[modName] = '__loading'
|
||||
|
||||
local err = {}
|
||||
|
||||
for i = 1, #package.searchers do
|
||||
local result, errMsg = package.searchers[i](modName)
|
||||
if result then
|
||||
if type(result) == 'function' then result = result() end
|
||||
loaded[modName] = result or result == nil
|
||||
|
||||
return loaded[modName]
|
||||
end
|
||||
|
||||
err[#err + 1] = errMsg
|
||||
end
|
||||
|
||||
error(("%s"):format(table.concat(err, "\n\t")))
|
||||
end
|
||||
|
||||
require = ESX.require
|
||||
end
|
||||
65
resources/[core]/es_extended/locale.js
Normal file
65
resources/[core]/es_extended/locale.js
Normal file
@@ -0,0 +1,65 @@
|
||||
var locale = [];
|
||||
|
||||
/**
|
||||
* Similar to the concept of gettext, this function returns the
|
||||
* localized string for the parsed string. The function supports
|
||||
* wrapping.
|
||||
*
|
||||
* @param {string} args The string we want localized
|
||||
* @return {string} Returns the localized string
|
||||
*
|
||||
*/
|
||||
function _U() {
|
||||
var args = arguments;
|
||||
var string = args[0];
|
||||
|
||||
// Was a string specified?
|
||||
if (!string) {
|
||||
console.log('locale.js: no string was parsed');
|
||||
return 'locale.js: no string was parsed';
|
||||
}
|
||||
|
||||
// Has the locale file been set?
|
||||
if (locale.length === 0) {
|
||||
console.log('locale.js: no locale has been set');
|
||||
return 'locale.js: no locale has been set';
|
||||
}
|
||||
|
||||
// Does the translation exist?
|
||||
if (!locale[string]) {
|
||||
console.log('locale.js: translation [{0}] does not exist'.format(string));
|
||||
return 'locale.js: translation [{0}] does not exist'.format(string);
|
||||
}
|
||||
|
||||
// Do we need to format the string?
|
||||
if (args.length === 1) {
|
||||
return capitalize(locale[string]);
|
||||
} else {
|
||||
return formatString(args);
|
||||
}
|
||||
}
|
||||
|
||||
function formatString(args) {
|
||||
var string = capitalize(locale[args[0]]);
|
||||
|
||||
for (var i = 1; i < args.length; i++) {
|
||||
string = string.replace(/%s/, args[i]);
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
function capitalize(string) {
|
||||
return string[0].toUpperCase() + string.slice(1);
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/a/35359503
|
||||
String.prototype.format = function () {
|
||||
var args = arguments;
|
||||
return this.replace(/{(\d+)}/g, function (match, number) {
|
||||
return typeof args[number] != 'undefined'
|
||||
? args[number]
|
||||
: match
|
||||
;
|
||||
});
|
||||
};
|
||||
41
resources/[core]/es_extended/locale.lua
Normal file
41
resources/[core]/es_extended/locale.lua
Normal file
@@ -0,0 +1,41 @@
|
||||
Locales = {}
|
||||
|
||||
function Translate(str, ...) -- Translate string
|
||||
if not str then
|
||||
error(("Resource ^5%s^1 You did not specify a parameter for the Translate function or the value is nil!"):format(GetInvokingResource() or GetCurrentResourceName()))
|
||||
end
|
||||
|
||||
--- Load the locale file if it hasn't been loaded yet
|
||||
if Locales[Config.Locale] == nil then
|
||||
local success, result = pcall(function()
|
||||
return assert(load(LoadResourceFile(GetCurrentResourceName(), ("locales/%s.lua"):format(Config.Locale))))()
|
||||
end)
|
||||
|
||||
Locales[Config.Locale] = success and result or false
|
||||
end
|
||||
|
||||
local translations = Locales[Config.Locale]
|
||||
if not translations then
|
||||
if Config.Locale == "en" then
|
||||
return "Locale [en] does not exist"
|
||||
end
|
||||
|
||||
-- Fall back to English translation if the current locale is not found
|
||||
Config.Locale = "en"
|
||||
return Translate(str, ...)
|
||||
end
|
||||
|
||||
if translations[str] then
|
||||
return translations[str]:format(...)
|
||||
end
|
||||
|
||||
return ("Translation [%s][%s] does not exist"):format(Config.Locale, str)
|
||||
end
|
||||
|
||||
function TranslateCap(str, ...) -- Translate string first char uppercase
|
||||
return _(str, ...):gsub("^%l", string.upper)
|
||||
end
|
||||
|
||||
_ = Translate
|
||||
-- luacheck: ignore _U
|
||||
_U = TranslateCap
|
||||
404
resources/[core]/es_extended/locales/cs.lua
Normal file
404
resources/[core]/es_extended/locales/cs.lua
Normal file
@@ -0,0 +1,404 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventář ( Váha %s / %s )",
|
||||
["use"] = "Použít",
|
||||
["give"] = "Darovat",
|
||||
["remove"] = "Odhodit",
|
||||
["return"] = "Vrátit",
|
||||
["give_to"] = "Darováno",
|
||||
["amount"] = "Počet",
|
||||
["giveammo"] = "Podat náboje",
|
||||
["amountammo"] = "Počet nábojů",
|
||||
["noammo"] = "Nedostatek!",
|
||||
["gave_item"] = "Daroval %sx %s pro %s",
|
||||
["received_item"] = "Získáno %sx %s od %s",
|
||||
["gave_weapon"] = "Předání %s pro %s",
|
||||
["gave_weapon_ammo"] = "Darování ~o~%sx %s do %s pro %s",
|
||||
["gave_weapon_withammo"] = "Darování %s s ~o~%sx %s pro %s",
|
||||
["gave_weapon_hasalready"] = "%s již vlastní %s",
|
||||
["gave_weapon_noweapon"] = "%s nemá tuto zbraň",
|
||||
["received_weapon"] = "Obdrženo %s od %s",
|
||||
["received_weapon_ammo"] = "Obdrženo ~o~%sx %s pro zbraň %s od %s",
|
||||
["received_weapon_withammo"] = "Obdrženo %s s ~o~%sx %s od %s",
|
||||
["received_weapon_hasalready"] = "%s se snažil darovat %s, ale již tuto zbraň máš",
|
||||
["received_weapon_noweapon"] = "%s se snažil ti dát náboje %s, ale nemáš potřebnou zbrań",
|
||||
["gave_account_money"] = "Darováno $%s (%s) pro %s",
|
||||
["received_account_money"] = "Získáno $%s (%s) od %s",
|
||||
["amount_invalid"] = "Špatné množství",
|
||||
["players_nearby"] = "Žádný hráč není poblíž",
|
||||
["ex_inv_lim"] = "Nelze sebrat,protože máš plné kapsy %s",
|
||||
["imp_invalid_quantity"] = "Neplatné množství",
|
||||
["imp_invalid_amount"] = "Nelze provést, neplatné množství",
|
||||
["threw_standard"] = "Zahozeno %sx %s",
|
||||
["threw_account"] = "Zahozeno $%s %s",
|
||||
["threw_weapon"] = "Zahozeno %s",
|
||||
["threw_weapon_ammo"] = "Zahozeno %s s ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Již vlastníš tuto zbraň",
|
||||
["threw_cannot_pickup"] = "Kapsy máš plné, nemůžeš sebrat!",
|
||||
["threw_pickup_prompt"] = "Zmáčkni E pro sebrání!",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Otevřít inventář",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Obdržel jsi: $%s",
|
||||
["received_help"] = "Obdržel jsi svůj podíl: $%s",
|
||||
["company_nomoney"] = "Firma kde pracujete je příliš chudá, aby vám zaplatila",
|
||||
["received_paycheck"] = "Obdržena platba",
|
||||
["bank"] = "Banka",
|
||||
["account_bank"] = "V bance",
|
||||
["account_black_money"] = "Špináve peníze",
|
||||
["account_money"] = "V kapse",
|
||||
|
||||
["act_imp"] = "Nelze provést",
|
||||
["in_vehicle"] = "Nelze provést, hráč je v autě",
|
||||
["not_in_vehicle"] = "Cannot Perform Action, Player isn't in a vehicle",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Přivolat si hráče k sobě",
|
||||
["command_car"] = "Spawnout vozidlo",
|
||||
["command_car_car"] = "Zadej jméno vozidla nebo spawnname",
|
||||
["command_cardel"] = "Odstranění vozidla v okolí",
|
||||
["command_cardel_radius"] = "Odstranění vozidla v určeném dosahu",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "Vymazat text v chatu",
|
||||
["command_clearall"] = "Vymazat chet pro všechny hráče",
|
||||
["command_clearinventory"] = "Vymazat všechny věci z invetáře hráče",
|
||||
["command_clearloadout"] = "Vymazat všechny zbraně z inventáře hráče",
|
||||
["command_freeze"] = "Zmrazit hráče",
|
||||
["command_unfreeze"] = "Odmrazit hráče",
|
||||
["command_giveaccountmoney"] = "Poslat peníze na účet ",
|
||||
["command_giveaccountmoney_account"] = "Převést peníze na účet",
|
||||
["command_giveaccountmoney_amount"] = "Částka k poslání",
|
||||
["command_giveaccountmoney_invalid"] = "Neplátné jméno",
|
||||
["command_giveitem"] = "Darovat věc hráči",
|
||||
["command_giveitem_item"] = "Název věci",
|
||||
["command_giveitem_count"] = "Množství",
|
||||
["command_giveweapon"] = "Dát zbraň hráči",
|
||||
["command_giveweapon_weapon"] = "Název zbraně",
|
||||
["command_giveweapon_ammo"] = "Množství náboje",
|
||||
["command_giveweapon_hasalready"] = "Hráč již má tuto zbraň",
|
||||
["command_giveweaponcomponent"] = "Darovat přídavek na zbraň",
|
||||
["command_giveweaponcomponent_component"] = "Název zbraně",
|
||||
["command_giveweaponcomponent_invalid"] = "Špatné jméno přídavku",
|
||||
["command_giveweaponcomponent_hasalready"] = "Hráč již má tento přídavek",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Hráč nemá tuto zbrań",
|
||||
["command_goto"] = "Teleportování sebe k hráči",
|
||||
["command_kill"] = "Zabití hráče",
|
||||
["command_save"] = "Uložení dat hráče",
|
||||
["command_saveall"] = "Uložení veškerých dat hráče",
|
||||
["command_setaccountmoney"] = "Nastavení určeného počtu peněz",
|
||||
["command_setaccountmoney_amount"] = "Počet peněz",
|
||||
["command_setcoords"] = "Teleportování na určené souřadnice",
|
||||
["command_setcoords_x"] = "Hodnota X",
|
||||
["command_setcoords_y"] = "Hodnota Y",
|
||||
["command_setcoords_z"] = "Hodnota Z",
|
||||
["command_setjob"] = "Nastavit práci hráči",
|
||||
["command_setjob_job"] = "Název práce",
|
||||
["command_setjob_grade"] = "Pozice ve firmě",
|
||||
["command_setjob_invalid"] = "Špatné zadání práce,hodnosti nebo i obou hodnot",
|
||||
["command_setgroup"] = "Nastavení práv hráči",
|
||||
["command_setgroup_group"] = "Název skupiny",
|
||||
["commanderror_argumentmismatch"] = "Chybný počet hodnot (správně %s, potřebných %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Chybně zadaná hodnot #%s (správně, špatně)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Chybně zadaná hodnota #%s (zadáno záporné/nula, požadováno kladné číslo)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_invaliditem"] = "Špatný předmět",
|
||||
["commanderror_invalidweapon"] = "Špatná zbraň",
|
||||
["commanderror_console"] = "příkaz nelze být zpracován v konzoli",
|
||||
["commanderror_invalidcommand"] = "Špatný příkaz - /%s",
|
||||
["commanderror_invalidplayerid"] = "Hráč není dostupný",
|
||||
["commandgeneric_playerid"] = "Id hráče",
|
||||
["command_giveammo_noweapon_found"] = "%s nemá tuto zbraň",
|
||||
["command_giveammo_weapon"] = "Název zbraně",
|
||||
["command_giveammo_ammo"] = "Počet nábojů",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "£%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dýka",
|
||||
["weapon_bat"] = "Baseballová pálka",
|
||||
["weapon_battleaxe"] = "Bitevní sekera",
|
||||
["weapon_bottle"] = "Rozbitá lahve",
|
||||
["weapon_crowbar"] = "Páčidlo",
|
||||
["weapon_flashlight"] = "Baterka",
|
||||
["weapon_golfclub"] = "Golfová hůl",
|
||||
["weapon_hammer"] = "Kladivo",
|
||||
["weapon_hatchet"] = "Sekera",
|
||||
["weapon_knife"] = "Nůž",
|
||||
["weapon_knuckle"] = "Boxer",
|
||||
["weapon_machete"] = "Mačeta",
|
||||
["weapon_nightstick"] = "Policejní obušek",
|
||||
["weapon_wrench"] = "Francouzský klíč",
|
||||
["weapon_poolcue"] = "Kulečníkové tágo",
|
||||
["weapon_stone_hatchet"] = "Kamenná sekera",
|
||||
["weapon_switchblade"] = "Vystřelovací nůž",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic pistol",
|
||||
["weapon_combatpistol"] = "Combat pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle", -- Not Translated
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Detektor kovu",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Candy Cane", -- not translated
|
||||
["weapon_acidpackage"] = "Acid Package", -- not translated
|
||||
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
|
||||
["weapon_railgunxm3"] = "Railgun", -- not translated
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Míček",
|
||||
["weapon_bzgas"] = "Smrtící slzný plyn",
|
||||
["weapon_flare"] = "Světlice",
|
||||
["weapon_grenade"] = "Granát",
|
||||
["weapon_petrolcan"] = "Kanistr",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotův koktejl",
|
||||
["weapon_proxmine"] = "Pohybová mina",
|
||||
["weapon_pipebomb"] = "Trubková bomba",
|
||||
["weapon_snowball"] = "Sněhová koule",
|
||||
["weapon_stickybomb"] = "C4",
|
||||
["weapon_smokegrenade"] = "Slzný plyn",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Hasící přístroj",
|
||||
["weapon_digiscanner"] = "Skener",
|
||||
["weapon_garbagebag"] = "Odpadkový pytel",
|
||||
["weapon_handcuffs"] = "Pouta",
|
||||
["gadget_nightvision"] = "Noční vidění",
|
||||
["gadget_parachute"] = "Padák",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "flashlight",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "round(s)",
|
||||
["ammo_shells"] = "shell(s)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "gallons of fuel",
|
||||
["ammo_firework"] = "firework(s)",
|
||||
["ammo_rockets"] = "rocket(s)",
|
||||
["ammo_grenadelauncher"] = "grenade(s)",
|
||||
["ammo_grenade"] = "grenade(s)",
|
||||
["ammo_stickybomb"] = "bomb(s)",
|
||||
["ammo_pipebomb"] = "bomb(s)",
|
||||
["ammo_smokebomb"] = "bomb(s)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mine(s)",
|
||||
["ammo_bzgas"] = "can(s)",
|
||||
["ammo_ball"] = "ball(s)",
|
||||
["ammo_snowball"] = "snowball(s)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_gray"] = "klasická šedá",
|
||||
["tint_classic_two_tone"] = "klasická dvoutónová",
|
||||
["tint_classic_white"] = "klasická bílá",
|
||||
["tint_classic_beige"] = "klasická béžová",
|
||||
["tint_classic_green"] = "klasická zelená",
|
||||
["tint_classic_blue"] = "klasická modrá",
|
||||
["tint_classic_earth"] = "klasická hnědá",
|
||||
["tint_classic_brown_black"] = "klasická hnědá-černá",
|
||||
["tint_contrast_red"] = "kontrastní červená",
|
||||
["tint_contrast_blue"] = "kontrastní modrá",
|
||||
["tint_contrast_yellow"] = "kontrastní žlutá",
|
||||
["tint_contrast_orange"] = "kontrastní oranžová",
|
||||
["tint_bold_pink"] = "odvážná růžová",
|
||||
["tint_bold_purple_yellow"] = "odvážná fialovo-žlutá",
|
||||
["tint_bold_orange"] = "odvážná oranžová",
|
||||
["tint_bold_green_purple"] = "odvážná zeleno-fialová",
|
||||
["tint_bold_red_feat"] = "odvážná červená feat",
|
||||
["tint_bold_green_feat"] = "odvážná zelená feat",
|
||||
["tint_bold_cyan_feat"] = "odvážná azurová feat",
|
||||
["tint_bold_yellow_feat"] = "odvážná žlutá feat",
|
||||
["tint_bold_red_white"] = "odvážná červená bílá",
|
||||
["tint_bold_blue_white"] = "odvážná modrá bílá",
|
||||
["tint_metallic_gold"] = "metalická zlatá",
|
||||
["tint_metallic_platinum"] = "metalická platina",
|
||||
["tint_metallic_gray_lilac"] = "metalická šedá lila",
|
||||
["tint_metallic_purple_lime"] = "metalická fialová limetka",
|
||||
["tint_metallic_red"] = "metalická červená",
|
||||
["tint_metallic_green"] = "metalická zelená",
|
||||
["tint_metallic_blue"] = "metalická modrá",
|
||||
["tint_metallic_white_aqua"] = "metalická bílá aqua",
|
||||
["tint_metallic_red_yellow"] = "metalická červená žlutá",
|
||||
}
|
||||
417
resources/[core]/es_extended/locales/de.lua
Normal file
417
resources/[core]/es_extended/locales/de.lua
Normal file
@@ -0,0 +1,417 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventar ( Gewicht %s / %s )",
|
||||
["use"] = "Benutzen",
|
||||
["give"] = "Geben",
|
||||
["remove"] = "Entsorgen",
|
||||
["return"] = "Zurück",
|
||||
["give_to"] = "Geben an",
|
||||
["amount"] = "Anzahl",
|
||||
["giveammo"] = "Munition geben",
|
||||
["amountammo"] = "Munitions Anzahl",
|
||||
["noammo"] = "Nicht Genug!",
|
||||
["gave_item"] = "Du gibst %sx %s an %s",
|
||||
["received_item"] = "Du bekommst %sx %s von %s",
|
||||
["gave_weapon"] = "Du gibst %s an %s",
|
||||
["gave_weapon_ammo"] = "Du gibst ~o~%sx %s für %s an %s",
|
||||
["gave_weapon_withammo"] = "Du gibst %s mit ~o~%sx %s an %s",
|
||||
["gave_weapon_hasalready"] = "%s hat bereits %s",
|
||||
["gave_weapon_noweapon"] = "%s hat diese Waffe nicht",
|
||||
["received_weapon"] = "Du bekommst %s von %s",
|
||||
["received_weapon_ammo"] = "Du bekommst ~o~%sx %s für deine %s von %s",
|
||||
["received_weapon_withammo"] = "Du bekommst %s mit ~o~%sx %s von %s",
|
||||
["received_weapon_hasalready"] = "%s hat versucht dir eine %s zu geben, jedoch hast du diese Waffe bereits!",
|
||||
["received_weapon_noweapon"] = "%s hat versucht dir Munition für eine %s zu geben, jedoch hast du diese Waffe nicht!",
|
||||
["gave_account_money"] = "Du gibst %s€ (%s) an %s",
|
||||
["received_account_money"] = "Du bekommst %s€ (%s) von %s",
|
||||
["amount_invalid"] = "Ungültige Anzahl",
|
||||
["players_nearby"] = "Keine Personen in der Nähe!",
|
||||
["ex_inv_lim"] = "Du kannst diese Aktion nicht ausführen!, Inventarlimit für %s überschritten.",
|
||||
["imp_invalid_quantity"] = "Du kannst diese Aktion nicht ausführen!, Ungültige Anzahl!",
|
||||
["imp_invalid_amount"] = "Du kannst diese Aktion nicht ausführen!, Ungültige Anzahl",
|
||||
["threw_standard"] = "Du entsorgst %sx %s",
|
||||
["threw_account"] = "Du Entsorgst %s€ %s",
|
||||
["threw_weapon"] = "Du entsorgst %s",
|
||||
["threw_weapon_ammo"] = "Du entsorgst %s mit ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Du hast diese Waffe bereits!",
|
||||
["threw_cannot_pickup"] = "Inventar ist voll! Du kannst dies nicht aufheben",
|
||||
["threw_pickup_prompt"] = "Drücke [E] zum aufheben",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Inventar Anzeigen",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Dein Gehaltscheck ist angekommen!: %s€",
|
||||
["received_help"] = "Deine Sozialhilfe ist angekommen: %s€",
|
||||
["company_nomoney"] = "Die Firma an der du Angestellt bist, ist leider Arm und kann dich nicht bezahlen :(",
|
||||
["received_paycheck"] = "Gehaltscheck erhalten",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Bank",
|
||||
["account_black_money"] = "Schwarzgeld",
|
||||
["account_money"] = "Bargeld",
|
||||
|
||||
["act_imp"] = "Du kannst diese Aktion nicht ausführen!",
|
||||
["in_vehicle"] = "Person darf nicht in einem Fahrzeug sein!",
|
||||
["not_in_vehicle"] = "Person muss in einem Fahrzeug sein!",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Person zu dir bringen",
|
||||
["command_car"] = "Fahrzeug Spawnen",
|
||||
["command_car_car"] = "Fahrzeug Model oder Hash",
|
||||
["command_cardel"] = "Fahrzeuge entfernen",
|
||||
["command_cardel_radius"] = "Entfernt alle Fahrzeuge in einem bestimmten Radius",
|
||||
["command_repair"] = "Fahrzeug reparieren",
|
||||
["command_repair_success"] = "Fahrzeug erfolgreich repariert.",
|
||||
["command_repair_success_target"] = "Ein Admin hat dein Fahrzeug repariert.",
|
||||
["command_clear"] = "Textchat leeren",
|
||||
["command_clearall"] = "Textchat für alle Spieler leeren",
|
||||
["command_clearinventory"] = "Alle Gegenstände vom Inventar eines Spielers entfernen",
|
||||
["command_clearloadout"] = "Alle Waffen vom Loadout eines Spielers entfernen",
|
||||
["command_freeze"] = "Spieler Freezen",
|
||||
["command_unfreeze"] = "Spieler Entfreezen",
|
||||
["command_giveaccountmoney"] = "Geld an ein bestimmtes Konto geben",
|
||||
["command_giveaccountmoney_account"] = "Konto, wohin das Geld hinzugefügt werden soll",
|
||||
["command_giveaccountmoney_amount"] = "Menge zum Hinzufügen",
|
||||
["command_giveaccountmoney_invalid"] = "Accountname ungültig!",
|
||||
["command_giveitem"] = "Spieler ein Gegenstand geben",
|
||||
["command_giveitem_item"] = "Gegenstand Name",
|
||||
["command_giveitem_count"] = "Menge",
|
||||
["command_giveweapon"] = "Spieler eine Waffe geben",
|
||||
["command_giveweapon_weapon"] = "Waffenname",
|
||||
["command_giveweapon_ammo"] = "Munitionsanzahl",
|
||||
["command_giveweapon_hasalready"] = "Spieler hat diese Waffe bereits!",
|
||||
["command_giveweaponcomponent"] = "Waffenkomponent an einen Spieler geben",
|
||||
["command_giveweaponcomponent_component"] = "Komponentenname",
|
||||
["command_giveweaponcomponent_invalid"] = "Ungültiger Komponentenname",
|
||||
["command_giveweaponcomponent_hasalready"] = "Spieler hat diese Komponente bereits!",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Spieler hat diese Waffe nicht!",
|
||||
["command_goto"] = "Teleportiere dich zu einem Spieler",
|
||||
["command_kill"] = "Spieler Töten",
|
||||
["command_save"] = "Von einem bestimmten Spieler die Spielerdaten speichern",
|
||||
["command_saveall"] = "Von allen Spielern die Spielerdaten speichern",
|
||||
["command_setaccountmoney"] = "Geld auf einem bestimmten Konto festlegen",
|
||||
["command_setaccountmoney_amount"] = "Menge",
|
||||
["command_setcoords"] = "Zu den bestimmten Koordinaten teleportieren",
|
||||
["command_setcoords_x"] = "X Koordinate",
|
||||
["command_setcoords_y"] = "Y Koordinate",
|
||||
["command_setcoords_z"] = "Z Koordinate",
|
||||
["command_setjob"] = "Job eines Spielers setzen",
|
||||
["command_setjob_job"] = "Name",
|
||||
["command_setjob_grade"] = "Job Rang",
|
||||
["command_setjob_invalid"] = "Der Rang oder der Name und Rang sind ungültig",
|
||||
["command_setgroup"] = "Setzt eine Berechtigungs Gruppe für einen Benutzer",
|
||||
["command_setgroup_group"] = "Name der Gruppe",
|
||||
["command_removeaccountmoney"] = "Entfernt Geld von einem bestimmten Konto",
|
||||
["command_removeaccountmoney_account"] = "Konto von dem es entfernt werden soll",
|
||||
["command_removeaccountmoney_amount"] = "Menge, die entfernt werden soll",
|
||||
["command_removeaccountmoney_invalid"] = "Name des Kontos ungültig",
|
||||
["commanderror_argumentmismatch"] = "Ungültiges Argument (gegeben %s, gewollt %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Ungültiges Argument #%s Datentyp (String gegeben, Nummer gefordert)",
|
||||
["commanderror_argumentmismatch_string"] = "Ungültiges Argument #%s Datentyp (Nummer gegeben, String gefordert)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Ungültiges Argument #%s Datentyp (negativ/null übergeben, positive Zahl gewünscht)",
|
||||
["commanderror_invaliditem"] = "Ungültiger Gegenstand",
|
||||
["commanderror_invalidweapon"] = "Ungültige Waffe",
|
||||
["commanderror_console"] = "Befehl kann nicht von der Konsole aus ausgeführt werden!",
|
||||
["commanderror_invalidcommand"] = "Ungültiger Befehl - /%s",
|
||||
["commanderror_invalidplayerid"] = "Angegebener Spieler ist nicht online!",
|
||||
["commandgeneric_playerid"] = "Spieler ID",
|
||||
["commandgeneric_dimension"] = "Ziel Dimension",
|
||||
["command_giveammo_noweapon_found"] = "%s besitzt diese Waffe nicht!",
|
||||
["command_giveammo_weapon"] = "Waffenname",
|
||||
["command_giveammo_ammo"] = "Munitionsanzahl",
|
||||
["command_setdim"] = "Setzt Spieler Dimension!",
|
||||
["tpm_nowaypoint"] = "Kein Wegpunkt gesetzt!",
|
||||
["tpm_success"] = "Erfolgreich teleportiert.",
|
||||
|
||||
["noclip_message"] = "Noclip wurde %s",
|
||||
["enabled"] = "~g~Aktiviert~s~",
|
||||
["disabled"] = "~r~Deaktiviert~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "%s€",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dolch",
|
||||
["weapon_bat"] = "Baseballschläger",
|
||||
["weapon_battleaxe"] = "Kampfaxt",
|
||||
["weapon_bottle"] = "Flasche",
|
||||
["weapon_crowbar"] = "Brechstange",
|
||||
["weapon_flashlight"] = "Taschenlampe",
|
||||
["weapon_golfclub"] = "Golfschläger",
|
||||
["weapon_hammer"] = "Hammer",
|
||||
["weapon_hatchet"] = "Beil",
|
||||
["weapon_knife"] = "Messer",
|
||||
["weapon_knuckle"] = "Schlagring",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Schlagstock",
|
||||
["weapon_wrench"] = "Rohrzange",
|
||||
["weapon_poolcue"] = "Billiardstange",
|
||||
["weapon_stone_hatchet"] = "Steinbeil",
|
||||
["weapon_switchblade"] = "Springmesser",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistole",
|
||||
["weapon_ceramicpistol"] = "Keramikpistole",
|
||||
["weapon_combatpistol"] = "Kampfpistole",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadgetpistole",
|
||||
["weapon_heavypistol"] = "Schwere Pistole",
|
||||
["weapon_revolver"] = "Schwerer Revolver",
|
||||
["weapon_revolver_mk2"] = "Schwerer Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Scharfschützen Pistole",
|
||||
["weapon_pistol"] = "Pistole",
|
||||
["weapon_pistol_mk2"] = "Pistole MK2",
|
||||
["weapon_pistol50"] = "Pistole 50 Kaliber",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintagepistole",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Sturmschrotflinte",
|
||||
["weapon_autoshotgun"] = "Automatische Schrotflinte",
|
||||
["weapon_bullpupshotgun"] = "Bullpup-Schrotflinte",
|
||||
["weapon_combatshotgun"] = "Kampfschrotfline",
|
||||
["weapon_dbshotgun"] = "Doppelbarrel Schrotflinte",
|
||||
["weapon_heavyshotgun"] = "Schwere Schrotflinte",
|
||||
["weapon_musket"] = "Muskete",
|
||||
["weapon_pumpshotgun"] = "Pump Schrotflinte",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Schrotflinte MK2",
|
||||
["weapon_sawnoffshotgun"] = "Abgesägte Schrotflinte",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Sturm SMG",
|
||||
["weapon_combatmg"] = "Kampf MG",
|
||||
["weapon_combatmg_mk2"] = "Kampf MG MK2",
|
||||
["weapon_combatpdw"] = "Kampf PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Maschinenpistole",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Mikro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unheiliger Höllenbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Fortgeschrittenes Gewehr",
|
||||
["weapon_assaultrifle"] = "Sturmgewehr",
|
||||
["weapon_assaultrifle_mk2"] = "Sturmgewehr MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Gewehr",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Gewehr MK2",
|
||||
["weapon_carbinerifle"] = "Karabinergewehr",
|
||||
["weapon_carbinerifle_mk2"] = "Karabinergewehr MK2",
|
||||
["weapon_compactrifle"] = "Kompaktesgewehr",
|
||||
["weapon_militaryrifle"] = "Militärgewehr",
|
||||
["weapon_specialcarbine"] = "Spezialkarabiner",
|
||||
["weapon_specialcarbine_mk2"] = "Spezialkarabiner MK2",
|
||||
["weapon_heavyrifle"] = "Schweres Gewehr",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Schwere Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Schwere Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Scharfschützengewehr",
|
||||
["weapon_marksmanrifle_mk2"] = "Scharfschützengewehr MK2",
|
||||
["weapon_sniperrifle"] = "Sniper",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Kompaktlauncher",
|
||||
["weapon_firework"] = "Feuerwerklauncher",
|
||||
["weapon_grenadelauncher"] = "Granatwerfer",
|
||||
["weapon_hominglauncher"] = "Lenkraketenwerfer",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Raketenwerfer",
|
||||
["weapon_rayminigun"] = "Witwenmacher",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metalldetektor",
|
||||
["weapon_precisionrifle"] = "Präzisionsgewehr",
|
||||
["weapon_tactilerifle"] = "Service Karabiner",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Zuckerstange",
|
||||
["weapon_acidpackage"] = "Säure Paket",
|
||||
["weapon_pistolxm3"] = "WM 29 Pistole",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Leuchtfackel",
|
||||
["weapon_grenade"] = "Granate",
|
||||
["weapon_petrolcan"] = "Benzinkanister",
|
||||
["weapon_hazardcan"] = "Gefährliche Kanister",
|
||||
["weapon_molotov"] = "Molotov Cocktail",
|
||||
["weapon_proxmine"] = "Annährungsmine",
|
||||
["weapon_pipebomb"] = "Rohrbombe",
|
||||
["weapon_snowball"] = "Schneeball",
|
||||
["weapon_stickybomb"] = "Haftbombe",
|
||||
["weapon_smokegrenade"] = "Tränengas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Feuerlöscher",
|
||||
["weapon_digiscanner"] = "Digitalscanner",
|
||||
["weapon_garbagebag"] = "Müllsack",
|
||||
["weapon_handcuffs"] = "Handschelle",
|
||||
["gadget_nightvision"] = "Nachtsicht",
|
||||
["gadget_parachute"] = "Fallschirm",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "Basismodell",
|
||||
["component_knuckle_pimp"] = "Der Pimp",
|
||||
["component_knuckle_ballas"] = "Die Ballas",
|
||||
["component_knuckle_dollar"] = "Der Hustler",
|
||||
["component_knuckle_diamond"] = "Der Stein",
|
||||
["component_knuckle_hate"] = "Der Hater",
|
||||
["component_knuckle_love"] = "Der Lover",
|
||||
["component_knuckle_player"] = "Der Player",
|
||||
["component_knuckle_king"] = "Der King",
|
||||
["component_knuckle_vagos"] = "Die Vagos",
|
||||
|
||||
["component_luxary_finish"] = "Luxuswaffenlackierung",
|
||||
|
||||
["component_handle_default"] = "Normaler Handgriff",
|
||||
["component_handle_vip"] = "VIP Handgriff",
|
||||
["component_handle_bodyguard"] = "Bodyguard Handgriff",
|
||||
|
||||
["component_vip_finish"] = "VIP Lackierung",
|
||||
["component_bodyguard_finish"] = "Bodyguard Lackierung",
|
||||
|
||||
["component_camo_finish"] = "Digitales Camouflage",
|
||||
["component_camo_finish2"] = "Pinselstrich Camouflage",
|
||||
["component_camo_finish3"] = "Holzland Camouflage",
|
||||
["component_camo_finish4"] = "Kopf Camouflage",
|
||||
["component_camo_finish5"] = "Sessebta-Nove Camouflage",
|
||||
["component_camo_finish6"] = "Perseus Camouflage",
|
||||
["component_camo_finish7"] = "Leopard Camouflage",
|
||||
["component_camo_finish8"] = "Zebra Camouflage",
|
||||
["component_camo_finish9"] = "Geometrisch Camouflage",
|
||||
["component_camo_finish10"] = "BOOM Camouflage",
|
||||
["component_camo_finish11"] = "Patriotisch Camouflage",
|
||||
|
||||
["component_camo_slide_finish"] = "Digital Rutschen Camouflage",
|
||||
["component_camo_slide_finish2"] = "Pinselstrich Rutschen Camouflage",
|
||||
["component_camo_slide_finish3"] = "Holzland Rutschen Camouflage",
|
||||
["component_camo_slide_finish4"] = "Kopf Rutschen Camouflage",
|
||||
["component_camo_slide_finish5"] = "Sessebta-Nove Nove Rutschen Camouflage",
|
||||
["component_camo_slide_finish6"] = "Perseus Rutschen Camouflage",
|
||||
["component_camo_slide_finish7"] = "Leopard Rutschen Camouflage",
|
||||
["component_camo_slide_finish8"] = "Zebra Rutschen Camouflage",
|
||||
["component_camo_slide_finish9"] = "Geometrisch Rutschen Camouflage",
|
||||
["component_camo_slide_finish10"] = "BOOM Rutschen Camouflage",
|
||||
["component_camo_slide_finish11"] = "Patriotisch Rutschen Camouflage",
|
||||
|
||||
["component_clip_default"] = "Standard Magazin",
|
||||
["component_clip_extended"] = "Erweiterters Magazin",
|
||||
["component_clip_drum"] = "Trommelmagazin",
|
||||
["component_clip_box"] = "Kastenmagazin",
|
||||
|
||||
["component_scope_holo"] = "Holographisches Zielfernrohr",
|
||||
["component_scope_small"] = "Kleines Zielfernrohr",
|
||||
["component_scope_medium"] = "Mittleres Zielfernrohr",
|
||||
["component_scope_large"] = "Großes Zielfernrohr",
|
||||
["component_scope"] = "Montiertes Zielfernrohr",
|
||||
["component_scope_advanced"] = "Fortgeschrittenes Zielfernrohr",
|
||||
["component_ironsights"] = "Ironsights",
|
||||
|
||||
["component_suppressor"] = "Entstörer",
|
||||
["component_compensator"] = "Kompensator",
|
||||
|
||||
["component_muzzle_flat"] = "Flache Mündung",
|
||||
["component_muzzle_tactical"] = "Taktische Mündung",
|
||||
["component_muzzle_fat"] = "Fettes-Ende Mündung",
|
||||
["component_muzzle_precision"] = "Präzision Mündung",
|
||||
["component_muzzle_heavy"] = "Schwere Mündung",
|
||||
["component_muzzle_slanted"] = "Schräge Mündung",
|
||||
["component_muzzle_split"] = "Geteiletes-Ende Mündung",
|
||||
["component_muzzle_squared"] = "Quadratische Mündung",
|
||||
|
||||
["component_flashlight"] = "Taschenlampe",
|
||||
["component_grip"] = "Grip",
|
||||
|
||||
["component_barrel_default"] = "Normales Fass",
|
||||
["component_barrel_heavy"] = "Schweres Fass",
|
||||
|
||||
["component_ammo_tracer"] = "Tracer Munition",
|
||||
["component_ammo_incendiary"] = "Aufruhr Munition",
|
||||
["component_ammo_hollowpoint"] = "Hohlspitze Munition",
|
||||
["component_ammo_fmj"] = "FMJ Munition",
|
||||
["component_ammo_armor"] = "Panzerbrechende Munition",
|
||||
["component_ammo_explosive"] = "Panzerbrechende brennende Munition",
|
||||
|
||||
["component_shells_default"] = "Normale Hülsen",
|
||||
["component_shells_incendiary"] = "Drachenatem Hülsen",
|
||||
["component_shells_armor"] = "Stahlschrot Hülsen",
|
||||
["component_shells_hollowpoint"] = "Flechette Hülsen",
|
||||
["component_shells_explosive"] = "Explosives Geschoss Hülsen",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "Kugel(n)",
|
||||
["ammo_shells"] = "Schrotpatrone(n)",
|
||||
["ammo_charge"] = "Nachladen",
|
||||
["ammo_petrol"] = "Benzinkanister",
|
||||
["ammo_firework"] = "Feuerwerksrakete(n)",
|
||||
["ammo_rockets"] = "Rakete(n)",
|
||||
["ammo_grenadelauncher"] = "Granate(n)",
|
||||
["ammo_grenade"] = "Granate(n)",
|
||||
["ammo_stickybomb"] = "C4(s)",
|
||||
["ammo_pipebomb"] = "Rohrbombe(n)",
|
||||
["ammo_smokebomb"] = "Rauchgranate(n)",
|
||||
["ammo_molotov"] = "Molotovcocktail(s)",
|
||||
["ammo_proxmine"] = "Annäherungsmine(n)",
|
||||
["ammo_bzgas"] = "Bzgas",
|
||||
["ammo_ball"] = "Ball",
|
||||
["ammo_snowball"] = "Schneebälle",
|
||||
["ammo_flare"] = "Signalfackel(n)",
|
||||
["ammo_flaregun"] = "Signalfackeln(munition)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "Standard",
|
||||
["tint_green"] = "Grün",
|
||||
["tint_gold"] = "Gold",
|
||||
["tint_pink"] = "Pink",
|
||||
["tint_army"] = "Camouflage",
|
||||
["tint_lspd"] = "Blau",
|
||||
["tint_orange"] = "Orange",
|
||||
["tint_platinum"] = "Platin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klassisches Schwarz",
|
||||
["tint_classic_gray"] = "klassisches Grau",
|
||||
["tint_classic_two_tone"] = "klassisches Zwei-Ton",
|
||||
["tint_classic_white"] = "klassisches Weiß",
|
||||
["tint_classic_beige"] = "klassisches Beige",
|
||||
["tint_classic_green"] = "klassisches Grün",
|
||||
["tint_classic_blue"] = "klassisches Blau",
|
||||
["tint_classic_earth"] = "klassisches Erdfarben",
|
||||
["tint_classic_brown_black"] = "klassisches Braun-Schwarz",
|
||||
["tint_contrast_red"] = "Kontrast Rot",
|
||||
["tint_contrast_blue"] = "Kontrast Blau",
|
||||
["tint_contrast_yellow"] = "Kontrast Gelb",
|
||||
["tint_contrast_orange"] = "Kontrast Orange",
|
||||
["tint_bold_pink"] = "fette Pink",
|
||||
["tint_bold_purple_yellow"] = "fette Lila-Gelb",
|
||||
["tint_bold_orange"] = "fette Orange",
|
||||
["tint_bold_green_purple"] = "fette Grün-Lila",
|
||||
["tint_bold_red_feat"] = "fette Rot feat",
|
||||
["tint_bold_green_feat"] = "fette Grün feat",
|
||||
["tint_bold_cyan_feat"] = "fette Cyan feat",
|
||||
["tint_bold_yellow_feat"] = "fette Gelb feat",
|
||||
["tint_bold_red_white"] = "fette Rot Weiß",
|
||||
["tint_bold_blue_white"] = "fette Blau Weiß",
|
||||
["tint_metallic_gold"] = "metallisches Gold",
|
||||
["tint_metallic_platinum"] = "metallisches Platin",
|
||||
["tint_metallic_gray_lilac"] = "metallisches Grau-Lila",
|
||||
["tint_metallic_purple_lime"] = "metallisches Lila-Limette",
|
||||
["tint_metallic_red"] = "metallisches Rot",
|
||||
["tint_metallic_green"] = "metallisches Grün",
|
||||
["tint_metallic_blue"] = "metallisches Blau",
|
||||
["tint_metallic_white_aqua"] = "metallisches Weiß-Aqua",
|
||||
["tint_metallic_red_yellow"] = "metallisches Rot-Gelb",
|
||||
}
|
||||
415
resources/[core]/es_extended/locales/el.lua
Normal file
415
resources/[core]/es_extended/locales/el.lua
Normal file
@@ -0,0 +1,415 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Αποθήκη ( Βάρος %s / %s )",
|
||||
["use"] = "Χρήση",
|
||||
["give"] = "Δώσε",
|
||||
["remove"] = "Πέτα",
|
||||
["return"] = "Επιστροφή",
|
||||
["give_to"] = "Δώσε σε",
|
||||
["amount"] = "Ποσότητα",
|
||||
["giveammo"] = "Δώσε σφαίρες",
|
||||
["amountammo"] = "Ποσότητα σφαιρών",
|
||||
["noammo"] = "Δεν υπάρχουν αρκετές σφαίρες!",
|
||||
["gave_item"] = "Δώσατε %sx %s στον/στην %s",
|
||||
["received_item"] = "Λάβατε %sx %s από τον/την %s",
|
||||
["gave_weapon"] = "Δίνετε %s στον/στην %s",
|
||||
["gave_weapon_ammo"] = "Δίνετε ~o~%sx %s για %s στον/στην %s",
|
||||
["gave_weapon_withammo"] = "Δίνετε %s με ~o~%sx %s στον/στην %s",
|
||||
["gave_weapon_hasalready"] = "Ο/Η %s έχει ήδη ένα %s",
|
||||
["gave_weapon_noweapon"] = "Ο/Η %s δεν έχει αυτό το όπλο",
|
||||
["received_weapon"] = "Λάβατε %s από τον/την %s",
|
||||
["received_weapon_ammo"] = "Λάβατε ~o~%sx %s για το %s από τον/την %s",
|
||||
["received_weapon_withammo"] = "Λάβατε %s για ~o~%sx %s από τον/την %s",
|
||||
["received_weapon_hasalready"] = "Ο/Η %s προσπάθησε να σας δώσει ένα %s, αλλά το έχετε ήδη",
|
||||
["received_weapon_noweapon"] = "Ο/Η %s προσπάθησε να σας δώσει σφαίρες για το %s, αλλά δεν έχετε αυτό το όπλο",
|
||||
["gave_account_money"] = "Δίνετε $%s (%s) στον/στην %s",
|
||||
["received_account_money"] = "Λάβατε $%s (%s) από τον/την %s",
|
||||
["amount_invalid"] = "Μη έγκυρη ποσότητα",
|
||||
["players_nearby"] = "Δεν υπάρχουν κοντινοί παίκτες",
|
||||
["ex_inv_lim"] = "Δεν είναι δυνατή η ενέργεια, υπέρβαση του μέγιστου βάρους των %s",
|
||||
["imp_invalid_quantity"] = "Δεν είναι δυνατή η ενέργεια, η ποσότητα δεν είναι έγκυρη",
|
||||
["imp_invalid_amount"] = "Δεν είναι δυνατή η ενέργεια, το ποσό δεν είναι έγκυρο",
|
||||
["threw_standard"] = "Ρίχνοντας %sx %s",
|
||||
["threw_account"] = "Ρίχνοντας $%s %s",
|
||||
["threw_weapon"] = "Ρίχνοντας %s",
|
||||
["threw_weapon_ammo"] = "Ρίχνοντας %s με ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Ήδη έχετε αυτό το όπλο",
|
||||
["threw_cannot_pickup"] = "Η αποθήκη είναι γεμάτη, δεν μπορείτε να σηκώσετε!",
|
||||
["threw_pickup_prompt"] = "Πατήστε E για να σηκώσετε",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Εμφάνιση Αποθήκης",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Έχετε λάβει μισθό: $%s",
|
||||
["received_help"] = "Έχετε λάβει το βοήθημά σας: $%s",
|
||||
["company_nomoney"] = "Η εταιρεία στην οποία είστε απασχολούμενος/η δεν έχει αρκετά χρήματα για να καταβάλει τον μισθό σας",
|
||||
["received_paycheck"] = "λάβατε μισθό",
|
||||
["bank"] = "Τράπεζα Maze",
|
||||
["account_bank"] = "Τραπεζικός Λογαριασμός",
|
||||
["account_black_money"] = "Βρώμικα Χρήματα",
|
||||
["account_money"] = "Μετρητά",
|
||||
|
||||
["act_imp"] = "Δεν είναι δυνατή η εκτέλεση της ενέργειας",
|
||||
["in_vehicle"] = "Δεν είναι δυνατή η εκτέλεση της ενέργειας, ο παίκτης βρίσκεται σε όχημα",
|
||||
["not_in_vehicle"] = "Δεν είναι δυνατή η εκτέλεση της ενέργειας, ο παίκτης δεν βρίσκεται σε κάποιο όχημα",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Φέρτε τον παίκτη σε εσάς",
|
||||
["command_car"] = "Κλήση οχήματος",
|
||||
["command_car_car"] = "Μοντέλο ή κωδικός οχήματος",
|
||||
["command_cardel"] = "Κατάργηση οχημάτων κοντά",
|
||||
["command_cardel_radius"] = "Καταργεί όλα τα οχήματα εντός της καθορισμένης ακτίνας",
|
||||
["command_repair"] = "Επισκέυασε το όχημα σου",
|
||||
["command_repair_success"] = "Το όχημα σου επισκευάστηκε",
|
||||
["command_repair_success_target"] = "Ένας διαχειριστής επισκεύασε το όχημα σου",
|
||||
["command_clear"] = "Καθαρισμός κειμένου στο chat",
|
||||
["command_clearall"] = "Καθαρισμός κειμένου στο chat για όλους τους παίκτες",
|
||||
["command_clearinventory"] = "Κατάργηση όλων των αντικειμένων από την αποθήκη των παικτών",
|
||||
["command_clearloadout"] = "Κατάργηση όλων των όπλων από την εξάρτηση των παικτών",
|
||||
["command_freeze"] = "Πάγωμα ενός παίκτη",
|
||||
["command_unfreeze"] = "Ξεπάγωμα ενός παίκτη",
|
||||
["command_giveaccountmoney"] = "Δώστε χρήματα σε καθορισμένο λογαριασμό",
|
||||
["command_giveaccountmoney_account"] = "Λογαριασμός προς προσθήκη",
|
||||
["command_giveaccountmoney_amount"] = "Ποσό προς προσθήκη",
|
||||
["command_giveaccountmoney_invalid"] = "Μη έγκυρο όνομα λογαριασμού",
|
||||
["command_removeaccountmoney"] = "Κατάργηση χρημάτων από καθορισμένο λογαριασμό",
|
||||
["command_removeaccountmoney_account"] = "Λογαριασμός από τον οποίο θα καταργηθούν τα χρήματα",
|
||||
["command_removeaccountmoney_amount"] = "Ποσό προς αφαίρεση",
|
||||
["command_removeaccountmoney_invalid"] = "Μη έγκυρο όνομα λογαριασμού",
|
||||
["command_giveitem"] = "Δώστε σε έναν παίκτη ένα αντικείμενο",
|
||||
["command_giveitem_item"] = "Όνομα αντικειμένου",
|
||||
["command_giveitem_count"] = "Ποσότητα",
|
||||
["command_giveweapon"] = "Δώστε σε έναν παίκτη ένα όπλο",
|
||||
["command_giveweapon_weapon"] = "Όνομα όπλου",
|
||||
["command_giveweapon_ammo"] = "Ποσότητα πυρομαχικών",
|
||||
["command_giveweapon_hasalready"] = "Ο παίκτης έχει ήδη αυτό το όπλο",
|
||||
["command_giveweaponcomponent"] = "Δώστε σε έναν παίκτη μια εξάρτηση όπλου",
|
||||
["command_giveweaponcomponent_component"] = "Όνομα εξάρτησης",
|
||||
["command_giveweaponcomponent_invalid"] = "Μη έγκυρη εξάρτηση όπλου",
|
||||
["command_giveweaponcomponent_hasalready"] = "Ο παίκτης έχει ήδη αυτήν την εξάρτηση όπλου",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Ο παίκτης δεν έχει αυτό το όπλο",
|
||||
["command_goto"] = "Τηλεμεταφέρεστε σε έναν παίκτη",
|
||||
["command_kill"] = "Σκοτώστε έναν παίκτη",
|
||||
["command_save"] = "Εξαναγκαστική αποθήκευση δεδομένων ενός παίκτη",
|
||||
["command_saveall"] = "Εξαναγκαστική αποθήκευση όλων των δεδομένων των παικτών",
|
||||
["command_setaccountmoney"] = "Ορίστε τα χρήματα σε έναν καθορισμένο λογαριασμό",
|
||||
["command_setaccountmoney_amount"] = "Ποσό",
|
||||
["command_setcoords"] = "Τηλεμεταφερθείτε σε καθορισμένες συντεταγμένες",
|
||||
["command_setcoords_x"] = "Τιμή X",
|
||||
["command_setcoords_y"] = "Τιμή Y",
|
||||
["command_setcoords_z"] = "Τιμή Z",
|
||||
["command_setjob"] = "Ορίστε το επάγγελμα ενός παίκτη",
|
||||
["command_setjob_job"] = "Όνομα",
|
||||
["command_setjob_grade"] = "Βαθμός επαγγέλματος",
|
||||
["command_setjob_invalid"] = "Το επάγγελμα, ο βαθμός ή και οι δύο είναι μη έγκυρα",
|
||||
["command_setgroup"] = "Ορίστε την ομάδα δικαιωμάτων ενός παίκτη",
|
||||
["command_setgroup_group"] = "Όνομα Ομάδας",
|
||||
["commanderror_argumentmismatch"] = "Μη έγκυρος αριθμός ορισμάτων (δόθηκαν %s, αναμενόμενα %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Μη έγκυρος τύπος δεδομένων για το όρισμα #%s (δόθηκε συμβολοσειρά, αναμενόμενος αριθμός)",
|
||||
["commanderror_argumentmismatch_string"] = "Μη έγκυρος τύπος δεδομένων για το όρισμα #%s (δόθηκε αριθμός, αναμενόμενη συμβολοσειρά)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Μη έγκυρος τύπος δεδομένων για το όρισμα #%s (δόθηκε αρνητικός/μηδέν, αναμενόμενος θετικός αριθμός)",
|
||||
["commanderror_invaliditem"] = "Μη έγκυρο αντικείμενο",
|
||||
["commanderror_invalidweapon"] = "Μη έγκυρο όπλο",
|
||||
["commanderror_console"] = "Η εντολή δεν μπορεί να εκτελεστεί από την κονσόλα",
|
||||
["commanderror_invalidcommand"] = "Μη έγκυρη εντολή - /%s",
|
||||
["commanderror_invalidplayerid"] = "Ο καθορισμένος παίκτης δεν είναι συνδεδεμένος",
|
||||
["commandgeneric_playerid"] = "Αναγνωριστικό διακομιστή του παίκτη",
|
||||
["command_giveammo_noweapon_found"] = "Ο %s δεν έχει αυτό το όπλο",
|
||||
["command_giveammo_weapon"] = "Όνομα όπλου",
|
||||
["command_giveammo_ammo"] = "Ποσότητα πυρομαχικών",
|
||||
["tpm_nowaypoint"] = "Δεν έχει οριστεί σημείο προορισμού.",
|
||||
["tpm_success"] = "Επιτυχής τηλεμεταφορά",
|
||||
|
||||
["noclip_message"] = "Το Noclip έχει %s",
|
||||
["enabled"] = "~g~ενεργοποιήθηκε~s~",
|
||||
["disabled"] = "~r~απενεργοποιήθηκε~s~",
|
||||
|
||||
-- Ρυθμίσεις τοπικής γλώσσας
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "£%s",
|
||||
|
||||
-- Όπλα
|
||||
|
||||
-- Χειροποίητα
|
||||
["weapon_dagger"] = "Στιλέτο",
|
||||
["weapon_bat"] = "Μπαστούνι",
|
||||
["weapon_battleaxe"] = "Πολεμική σείρα",
|
||||
["weapon_bottle"] = "Μπουκάλι",
|
||||
["weapon_crowbar"] = "Ροπαλάκι",
|
||||
["weapon_flashlight"] = "Φακός",
|
||||
["weapon_golfclub"] = "Γκολφ",
|
||||
["weapon_hammer"] = "Σφυρί",
|
||||
["weapon_hatchet"] = "Πέλεκυς",
|
||||
["weapon_knife"] = "Μαχαίρι",
|
||||
["weapon_knuckle"] = "Χειροπέδες",
|
||||
["weapon_machete"] = "Μαχαίρι μαχαιροπίρουνου",
|
||||
["weapon_nightstick"] = "Ρόπαλο νυχτερίδας",
|
||||
["weapon_wrench"] = "Ροκανίδι",
|
||||
["weapon_poolcue"] = "Καστήλα",
|
||||
["weapon_stone_hatchet"] = "Πέλεκυς από πέτρα",
|
||||
["weapon_switchblade"] = "Ξυραφάκι",
|
||||
|
||||
-- Πιστόλια
|
||||
["weapon_appistol"] = "AP Πιστόλι",
|
||||
["weapon_ceramicpistol"] = "Κεραμικό πιστόλι",
|
||||
["weapon_combatpistol"] = "Πολεμικό πιστόλι",
|
||||
["weapon_doubleaction"] = "Διπλής δράσης Ριβόλβερ",
|
||||
["weapon_navyrevolver"] = "Ναυτικό Ρεβόλβερ",
|
||||
["weapon_flaregun"] = "Πιστόλι αστραπών",
|
||||
["weapon_gadgetpistol"] = "Πιστόλι συσκευών",
|
||||
["weapon_heavypistol"] = "Βαρύ πιστόλι",
|
||||
["weapon_revolver"] = "Βαρύ Ρεβόλβερ",
|
||||
["weapon_revolver_mk2"] = "Βαρύ Ρεβόλβερ MK2",
|
||||
["weapon_marksmanpistol"] = "Πιστόλι μονομάχου",
|
||||
["weapon_pistol"] = "Πιστόλι",
|
||||
["weapon_pistol_mk2"] = "Πιστόλι MK2",
|
||||
["weapon_pistol50"] = "Πιστόλι .50",
|
||||
["weapon_snspistol"] = "Πιστόλι SNS",
|
||||
["weapon_snspistol_mk2"] = "Πιστόλι SNS MK2",
|
||||
["weapon_stungun"] = "Ηλεκτροπληξία",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Βιομηχανικό πιστόλι",
|
||||
|
||||
-- Καραμπίνες
|
||||
["weapon_assaultshotgun"] = "Πολεμική Καραμπίνα",
|
||||
["weapon_autoshotgun"] = "Αυτόματη Καραμπίνα",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Καραμπίνα",
|
||||
["weapon_combatshotgun"] = "Καραμπίνα πολέμου",
|
||||
["weapon_dbshotgun"] = "Διπλής κάννης Καραμπίνα",
|
||||
["weapon_heavyshotgun"] = "Βαριά Καραμπίνα",
|
||||
["weapon_musket"] = "Μουσκέτα",
|
||||
["weapon_pumpshotgun"] = "Καραμπίνα αντλίας",
|
||||
["weapon_pumpshotgun_mk2"] = "Καραμπίνα αντλίας MK2",
|
||||
["weapon_sawnoffshotgun"] = "Καραμπίνα με κοντά κάννη",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Πολεμικό SMG",
|
||||
["weapon_combatmg"] = "Πολεμικό MG",
|
||||
["weapon_combatmg_mk2"] = "Πολεμικό MG MK2",
|
||||
["weapon_combatpdw"] = "Πολεμικό PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Πιστόλι Αυτόματης Καραμπίνας",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Μικρό SMG",
|
||||
["weapon_minismg"] = "Μικρό SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Ανεξίτηλο Hellbringer",
|
||||
|
||||
-- Καραμπίνες
|
||||
["weapon_advancedrifle"] = "Προηγμένη Καραμπίνα",
|
||||
["weapon_assaultrifle"] = "Καραμπίνα Επίθεσης",
|
||||
["weapon_assaultrifle_mk2"] = "Καραμπίνα Επίθεσης MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Καραμπίνα",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Καραμπίνα MK2",
|
||||
["weapon_carbinerifle"] = "Καραμπίνα",
|
||||
["weapon_carbinerifle_mk2"] = "Καραμπίνα MK2",
|
||||
["weapon_compactrifle"] = "Συμπαγής Καραμπίνα",
|
||||
["weapon_militaryrifle"] = "Στρατιωτική Καραμπίνα",
|
||||
["weapon_specialcarbine"] = "Ειδική Καραμπίνα",
|
||||
["weapon_specialcarbine_mk2"] = "Ειδική Καραμπίνα MK2",
|
||||
|
||||
-- Κυνηγετικά
|
||||
["weapon_heavysniper"] = "Βαρύ Κυνηγετικό Ρίφλε",
|
||||
["weapon_heavysniper_mk2"] = "Βαρύ Κυνηγετικό Ρίφλε MK2",
|
||||
["weapon_marksmanrifle"] = "Ρίφλε Επαγγελματία Σκοπευτή",
|
||||
["weapon_marksmanrifle_mk2"] = "Ρίφλε Επαγγελματία Σκοπευτή MK2",
|
||||
["weapon_sniperrifle"] = "Κυνηγετικό Ρίφλε",
|
||||
["weapon_heavyrifle"] = "βαρύ τουφέκι",
|
||||
|
||||
-- Βαριά / Εκτοξευτές
|
||||
["weapon_compactlauncher"] = "Συμπαγής Εκτοξευτής",
|
||||
["weapon_firework"] = "Εκτοξευτής Πυροτεχνημάτων",
|
||||
["weapon_grenadelauncher"] = "Εκτοξευτής Γρανατών",
|
||||
["weapon_hominglauncher"] = "Εκτοξευτής Εξόρυξης",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Εκτοξευτής Πυραύλων",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Επιπλέον Όπλα από το Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Ανιχνευτής Μετάλλων",
|
||||
["weapon_precisionrifle"] = "Όπλο Ακρίβειας",
|
||||
["weapon_tactilerifle"] = "Όπλο Εξυπηρέτησης",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "Candycane",
|
||||
["weapon_acidpackage"] = "Acid Package",
|
||||
["weapon_pistolxm3"] = "Pistol8 x3m",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Ρίψεις
|
||||
["weapon_ball"] = "Μπάλα",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Πυροτεχνήματα",
|
||||
["weapon_grenade"] = "Χειροβομβίδα",
|
||||
["weapon_petrolcan"] = "Κανέλα Βενζίνης",
|
||||
["weapon_hazardcan"] = "Κανέλα Επικίνδυνης Υλικότητας",
|
||||
["weapon_molotov"] = "Μολότοφ",
|
||||
["weapon_proxmine"] = "Νάρκη Εγγύτητας",
|
||||
["weapon_pipebomb"] = "Βόμβα Σωλήνα",
|
||||
["weapon_snowball"] = "Χιονόμπαλα",
|
||||
["weapon_stickybomb"] = "Κολλητή Βόμβα",
|
||||
["weapon_smokegrenade"] = "Δακρυγόνο",
|
||||
|
||||
-- Ειδικά
|
||||
["weapon_fireextinguisher"] = "Πυροσβεστήρας",
|
||||
["weapon_digiscanner"] = "Ψηφιακός Σαρωτής",
|
||||
["weapon_garbagebag"] = "Σακούλα Απορριμμάτων",
|
||||
["weapon_handcuffs"] = "Χειροπέδες",
|
||||
["gadget_nightvision"] = "Νυχτερινή Όραση",
|
||||
["gadget_parachute"] = "Αλεξίπτωτο",
|
||||
|
||||
-- Συστατικά Όπλων
|
||||
["component_knuckle_base"] = "Βασικό Μοντέλο",
|
||||
["component_knuckle_pimp"] = "Ο Φιλότιμος",
|
||||
["component_knuckle_ballas"] = "Οι Ballas",
|
||||
["component_knuckle_dollar"] = "Ο Εξαπατητής",
|
||||
["component_knuckle_diamond"] = "Η Ρόκα",
|
||||
["component_knuckle_hate"] = "Ο Μισητός",
|
||||
["component_knuckle_love"] = "Ο Εραστής",
|
||||
["component_knuckle_player"] = "Ο Παίκτης",
|
||||
["component_knuckle_king"] = "Ο Βασιλιάς",
|
||||
["component_knuckle_vagos"] = "Οι Vagos",
|
||||
|
||||
["component_luxary_finish"] = "Πολυτελές Φινίρισμα Όπλου",
|
||||
|
||||
["component_handle_default"] = "Προεπιλεγμένη Χειρολαβή",
|
||||
["component_handle_vip"] = "Χειρολαβή VIP",
|
||||
["component_handle_bodyguard"] = "Χειρολαβή Σωματοφύλακα",
|
||||
|
||||
["component_vip_finish"] = "Πολυτελές Φινίρισμα VIP",
|
||||
["component_bodyguard_finish"] = "Πολυτελές Φινίρισμα Σωματοφύλακα",
|
||||
|
||||
["component_camo_finish"] = "Ψηφιακό Καμουφλάζ",
|
||||
["component_camo_finish2"] = "Καμουφλάζ Πινελίου",
|
||||
["component_camo_finish3"] = "Καμουφλάζ Δάσους",
|
||||
["component_camo_finish4"] = "Καμουφλάζ Κρανίου",
|
||||
["component_camo_finish5"] = "Καμουφλάζ Sessanta Nove",
|
||||
["component_camo_finish6"] = "Καμουφλάζ Perseus",
|
||||
["component_camo_finish7"] = "Καμουφλάζ Λεοπάρδαλης",
|
||||
["component_camo_finish8"] = "Καμουφλάζ Ζέβρας",
|
||||
["component_camo_finish9"] = "Γεωμετρικό Καμουφλάζ",
|
||||
["component_camo_finish10"] = "Καμουφλάζ Boom",
|
||||
["component_camo_finish11"] = "Πατριωτικό Καμουφλάζ",
|
||||
|
||||
["component_camo_slide_finish"] = "Ψηφιακό Καμουφλάζ Slide",
|
||||
["component_camo_slide_finish2"] = "Καμουφλάζ Πινελίου Slide",
|
||||
["component_camo_slide_finish3"] = "Καμουφλάζ Δάσους Slide",
|
||||
["component_camo_slide_finish4"] = "Καμουφλάζ Κρανίου Slide",
|
||||
["component_camo_slide_finish5"] = "Καμουφλάζ Sessanta Nove Slide",
|
||||
["component_camo_slide_finish6"] = "Καμουφλάζ Perseus Slide",
|
||||
["component_camo_slide_finish7"] = "Καμουφλάζ Λεοπάρδαλης Slide",
|
||||
["component_camo_slide_finish8"] = "Καμουφλάζ Ζέβρας Slide",
|
||||
["component_camo_slide_finish9"] = "Γεωμετρικό Καμουφλάζ Slide",
|
||||
["component_camo_slide_finish10"] = "Καμουφλάζ Boom Slide",
|
||||
["component_camo_slide_finish11"] = "Πατριωτικό Καμουφλάζ Slide",
|
||||
|
||||
["component_clip_default"] = "Προεπιλεγμένο Περιοδικό",
|
||||
["component_clip_extended"] = "Επέκταση Περιοδικού",
|
||||
["component_clip_drum"] = "Περιοδικό Κάδος",
|
||||
["component_clip_box"] = "Περιοδικό Κιβώτιο",
|
||||
|
||||
["component_scope_holo"] = "Ολογραφική Σκοπευτική Συσκευή",
|
||||
["component_scope_small"] = "Μικρή Σκοπευτική Συσκευή",
|
||||
["component_scope_medium"] = "Μεσαία Σκοπευτική Συσκευή",
|
||||
["component_scope_large"] = "Μεγάλη Σκοπευτική Συσκευή",
|
||||
["component_scope"] = "Σκοπευτική Συσκευή Εγκατεστημένη",
|
||||
["component_scope_advanced"] = "Προηγμένη Σκοπευτική Συσκευή",
|
||||
["component_ironsights"] = "Σκοπευτικά Σιδερά",
|
||||
|
||||
["component_suppressor"] = "Καταστεναγματοποιητής",
|
||||
["component_compensator"] = "Αποζημιωτής",
|
||||
|
||||
["component_muzzle_flat"] = "Επίπεδο Φρένο Αέρα",
|
||||
["component_muzzle_tactical"] = "Τακτικό Φρένο Αέρα",
|
||||
["component_muzzle_fat"] = "Φρένο Αέρα Παχύ Άκρο",
|
||||
["component_muzzle_precision"] = "Φρένο Αέρα Ακρίβειας",
|
||||
["component_muzzle_heavy"] = "Φρένο Αέρα Βαρέως Τύπου",
|
||||
["component_muzzle_slanted"] = "Φρένο Αέρα Ανοιγοκλειστό",
|
||||
["component_muzzle_split"] = "Φρένο Αέρα Υποκλιμακούμενο",
|
||||
["component_muzzle_squared"] = "Φρένο Αέρα Τετραγωνισμένο",
|
||||
|
||||
["component_flashlight"] = "Φακός",
|
||||
["component_grip"] = "Λαβή",
|
||||
|
||||
["component_barrel_default"] = "Προεπιλεγμένο Κάννα",
|
||||
["component_barrel_heavy"] = "Βαριά Κάννα",
|
||||
|
||||
["component_ammo_tracer"] = "Σφαίρες με Ιχνηθέν Φωτός",
|
||||
["component_ammo_incendiary"] = "Σφαίρες Φωτιάς",
|
||||
["component_ammo_hollowpoint"] = "Σφαίρες Κενές Άκρες",
|
||||
["component_ammo_fmj"] = "Σφαίρες FMJ",
|
||||
["component_ammo_armor"] = "Σφαίρες Διάτρησης Θωράκισης",
|
||||
["component_ammo_explosive"] = "Εκρηκτικές Σφαίρες Διάτρησης Θωράκισης",
|
||||
|
||||
["component_shells_default"] = "Προεπιλεγμένες Φυσίγγια",
|
||||
["component_shells_incendiary"] = "Φυσίγγια Διαμαντινών",
|
||||
["component_shells_armor"] = "Φυσίγγια Θωράκισης Χάλυβα",
|
||||
["component_shells_hollowpoint"] = "Φυσίγγια Κενών Άκρων",
|
||||
["component_shells_explosive"] = "Φυσίγγια Εκρηκτικών",
|
||||
|
||||
-- Πυρομαχικά Όπλων
|
||||
["ammo_rounds"] = "σφαιρίδιο(α)",
|
||||
["ammo_shells"] = "φυσίγγιο(α)",
|
||||
["ammo_charge"] = "φορτίο",
|
||||
["ammo_petrol"] = "γαλόνια καυσίμου",
|
||||
["ammo_firework"] = "πυροτεχνήματο(α)",
|
||||
["ammo_rockets"] = "πύραυλο(ι)",
|
||||
["ammo_grenadelauncher"] = "χειροβομβίδα(ες)",
|
||||
["ammo_grenade"] = "χειροβομβίδα(ες)",
|
||||
["ammo_stickybomb"] = "βόμβα(ες)",
|
||||
["ammo_pipebomb"] = "βόμβα(ες)",
|
||||
["ammo_smokebomb"] = "βόμβα(ες) καπνού",
|
||||
["ammo_molotov"] = "κοκτέιλ μολότοφ(α)",
|
||||
["ammo_proxmine"] = "μίνα(ες) εγγύτητας",
|
||||
["ammo_bzgas"] = "κανίστρα(ες)",
|
||||
["ammo_ball"] = "μπάλα(ες)",
|
||||
["ammo_snowball"] = "χιονόμπαλα(ες)",
|
||||
["ammo_flare"] = "φλογοβολίδα(ες)",
|
||||
["ammo_flaregun"] = "φλογοβολίδα(ες)",
|
||||
|
||||
-- Επιστρώσεις Όπλων
|
||||
["tint_default"] = "προεπιλεγμένο δέρμα",
|
||||
["tint_green"] = "πράσινο δέρμα",
|
||||
["tint_gold"] = "χρυσό δέρμα",
|
||||
["tint_pink"] = "ροζ δέρμα",
|
||||
["tint_army"] = "στρατιωτικό δέρμα",
|
||||
["tint_lspd"] = "μπλε δέρμα",
|
||||
["tint_orange"] = "πορτοκαλί δέρμα",
|
||||
["tint_platinum"] = "πλατίνενο δέρμα",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "κλασικό μαύρο",
|
||||
["tint_classic_gray"] = "κλασικό γκρι",
|
||||
["tint_classic_two_tone"] = "κλασικό δίχρωμο",
|
||||
["tint_classic_white"] = "κλασικό λευκό",
|
||||
["tint_classic_beige"] = "κλασικό μπεζ",
|
||||
["tint_classic_green"] = "κλασικό πράσινο",
|
||||
["tint_classic_blue"] = "κλασικό μπλε",
|
||||
["tint_classic_earth"] = "κλασική γή",
|
||||
["tint_classic_brown_black"] = "κλασικό καφέ-μαύρο",
|
||||
["tint_contrast_red"] = "αντίθεση κόκκινο",
|
||||
["tint_contrast_blue"] = "αντίθεση μπλε",
|
||||
["tint_contrast_yellow"] = "αντίθεση κίτρινο",
|
||||
["tint_contrast_orange"] = "αντίθεση πορτοκαλί",
|
||||
["tint_bold_pink"] = "τολμηρό ροζ",
|
||||
["tint_bold_purple_yellow"] = "τολμηρό μοβ-κίτρινο",
|
||||
["tint_bold_orange"] = "τολμηρό πορτοκαλί",
|
||||
["tint_bold_green_purple"] = "τολμηρό πράσινο-μοβ",
|
||||
["tint_bold_red_feat"] = "τολμηρό κόκκινο feat",
|
||||
["tint_bold_green_feat"] = "τολμηρό πράσινο feat",
|
||||
["tint_bold_cyan_feat"] = "τολμηρό κυανό feat",
|
||||
["tint_bold_yellow_feat"] = "τολμηρό κίτρινο feat",
|
||||
["tint_bold_red_white"] = "τολμηρό κόκκινο λευκό",
|
||||
["tint_bold_blue_white"] = "τολμηρό μπλε λευκό",
|
||||
["tint_metallic_gold"] = "μεταλλικό χρυσό",
|
||||
["tint_metallic_platinum"] = "μεταλλικό πλατίνα",
|
||||
["tint_metallic_gray_lilac"] = "μεταλλικό γκρι λιλά",
|
||||
["tint_metallic_purple_lime"] = "μεταλλικό μοβ-λάιμ",
|
||||
["tint_metallic_red"] = "μεταλλικό κόκκινο",
|
||||
["tint_metallic_green"] = "μεταλλικό πράσινο",
|
||||
["tint_metallic_blue"] = "μεταλλικό μπλε",
|
||||
["tint_metallic_white_aqua"] = "μεταλλικό λευκό aqua",
|
||||
["tint_metallic_red_yellow"] = "μεταλλικό κόκκινο-κίτρινο",
|
||||
}
|
||||
428
resources/[core]/es_extended/locales/en.lua
Normal file
428
resources/[core]/es_extended/locales/en.lua
Normal file
@@ -0,0 +1,428 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventory ( Weight %s / %s )",
|
||||
["use"] = "Use",
|
||||
["give"] = "Give",
|
||||
["remove"] = "Throw",
|
||||
["return"] = "Return",
|
||||
["give_to"] = "Give to",
|
||||
["amount"] = "Amount",
|
||||
["giveammo"] = "Give ammo",
|
||||
["amountammo"] = "Ammo Amount",
|
||||
["noammo"] = "Not Enough!",
|
||||
["gave_item"] = "Giving %sx %s to %s",
|
||||
["received_item"] = "Received %sx %s from %s",
|
||||
["gave_weapon"] = "Giving %s to %s",
|
||||
["gave_weapon_ammo"] = "Giving ~o~%sx %s for %s to %s",
|
||||
["gave_weapon_withammo"] = "Giving %s with ~o~%sx %s to %s",
|
||||
["gave_weapon_hasalready"] = "%s already has a %s",
|
||||
["gave_weapon_noweapon"] = "%s does not have that weapon",
|
||||
["received_weapon"] = "Received %s from %s",
|
||||
["received_weapon_ammo"] = "Received ~o~%sx %s for your %s from %s",
|
||||
["received_weapon_withammo"] = "Received %s with ~o~%sx %s from %s",
|
||||
["received_weapon_hasalready"] = "%s has attempted to give you a %s, but you already this weapon",
|
||||
["received_weapon_noweapon"] = "%s has attempted to give you ammo for a %s, but you do not have this weapon",
|
||||
["gave_account_money"] = "Giving $%s (%s) to %s",
|
||||
["received_account_money"] = "Received $%s (%s) from %s",
|
||||
["amount_invalid"] = "Invalid quantity",
|
||||
["players_nearby"] = "No nearby Players",
|
||||
["ex_inv_lim"] = "Cannot perfom action,exceeding max weight of %s",
|
||||
["imp_invalid_quantity"] = "Cannot perfom action, the quantity is invalid",
|
||||
["imp_invalid_amount"] = "Cannot perfom action, the amount is invalid",
|
||||
["threw_standard"] = "Throwing %sx %s",
|
||||
["threw_account"] = "Throwing $%s %s",
|
||||
["threw_weapon"] = "Throwing %s",
|
||||
["threw_weapon_ammo"] = "Throwing %s with ~o~%sx %s",
|
||||
["threw_weapon_already"] = "You already have this weapon",
|
||||
["threw_cannot_pickup"] = "Inventory is full, Cannot Pickup!",
|
||||
["threw_pickup_prompt"] = "Press E to Pickup",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Show Inventory",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "You have been paid: $%s",
|
||||
["received_help"] = "You have been paid your welfare check: $%s",
|
||||
["company_nomoney"] = "the company you're employeed at is too poor to pay out your salary",
|
||||
["received_paycheck"] = "received paycheck",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Bank",
|
||||
["account_black_money"] = "Dirty Money",
|
||||
["account_money"] = "Cash",
|
||||
|
||||
["act_imp"] = "Cannot Perform Action",
|
||||
["in_vehicle"] = "Cannot Perform Action, Player is in a vehicle",
|
||||
["not_in_vehicle"] = "Cannot Perform Action, Player isn't in a vehicle",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Bring player to you",
|
||||
["command_car"] = "Spawn a vehicle",
|
||||
["command_car_car"] = "Vehicle model or hash",
|
||||
["command_cardel"] = "Remove vehicles in proximity",
|
||||
["command_cardel_radius"] = "Removes all vehicles within the specified radius",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "Clear chat Text",
|
||||
["command_clearall"] = "Clear chat Text for all players",
|
||||
["command_refreshitems"] = "Reload all items from the database.",
|
||||
["command_refreshitems_success"] = "Successfully reloaded %d items.",
|
||||
["command_clearinventory"] = "Remove All items from the Players Inventory",
|
||||
["command_clearloadout"] = "Remove All weapons from the Players Loadout",
|
||||
["command_freeze"] = "Freeze a player",
|
||||
["command_unfreeze"] = "Unfreeze a player",
|
||||
["command_giveaccountmoney"] = "Give Money to a specified Account",
|
||||
["command_giveaccountmoney_account"] = "Account to add to",
|
||||
["command_giveaccountmoney_amount"] = "Amount to add",
|
||||
["command_giveaccountmoney_invalid"] = "Account Name Invalid",
|
||||
["command_removeaccountmoney"] = "Remove Money from a specified Account",
|
||||
["command_removeaccountmoney_account"] = "Account to remove from",
|
||||
["command_removeaccountmoney_amount"] = "Amount to remove",
|
||||
["command_removeaccountmoney_invalid"] = "Account Name Invalid",
|
||||
["command_giveitem"] = "Give Player an item",
|
||||
["command_giveitem_item"] = "Item name",
|
||||
["command_giveitem_count"] = "Quantity",
|
||||
["command_giveweapon"] = "Give player a weapon",
|
||||
["command_giveweapon_weapon"] = "Weapon name",
|
||||
["command_giveweapon_ammo"] = "Ammo Quantity",
|
||||
["command_giveweapon_hasalready"] = "Player already has this weapon",
|
||||
["command_giveweaponcomponent"] = "Give weapon component to player",
|
||||
["command_giveweaponcomponent_component"] = "Component name",
|
||||
["command_giveweaponcomponent_invalid"] = "Invalid weapon component",
|
||||
["command_giveweaponcomponent_hasalready"] = "Player already has this weapon component",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Player does not have this weapon",
|
||||
["command_goto"] = "Teleport yourself to a player",
|
||||
["command_kill"] = "Kill a player",
|
||||
["command_save"] = "Force Save a player`s Data",
|
||||
["command_saveall"] = "Force Save all player data",
|
||||
["command_setaccountmoney"] = "Set the money within a specified account",
|
||||
["command_setaccountmoney_amount"] = "Amount",
|
||||
["command_setcoords"] = "Teleport to specified Coordinates",
|
||||
["command_setcoords_x"] = "X value",
|
||||
["command_setcoords_y"] = "Y value",
|
||||
["command_setcoords_z"] = "Z value",
|
||||
["command_setjob"] = "Set a player`s job",
|
||||
["command_setjob_job"] = "Name",
|
||||
["command_setjob_grade"] = "Job grade",
|
||||
["command_setjob_invalid"] = "the job, grade or both are invalid",
|
||||
["command_setgroup"] = "Set a players permission group",
|
||||
["command_setgroup_group"] = "Name of Group",
|
||||
["commanderror_argumentmismatch"] = "Invalid Argument Count (passed %s, wanted %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Invalid Argument #%s data type (passed string, wanted number)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Invalid Argument #%s data type (passed negative/zero, wanted positive number)",
|
||||
["commanderror_invaliditem"] = "Invalid item",
|
||||
["commanderror_invalidweapon"] = "Invalid weapon",
|
||||
["commanderror_console"] = "Command Cannot be executed from console",
|
||||
["commanderror_invalidcommand"] = "Invalid Command - /%s",
|
||||
["commanderror_invalidplayerid"] = "Specified Player is not online",
|
||||
["commandgeneric_playerid"] = "Player`s Server Id",
|
||||
["commandgeneric_dimension"] = "Target Dimension",
|
||||
["command_giveammo_noweapon_found"] = "%s does not have that weapon",
|
||||
["command_giveammo_weapon"] = "Weapon name",
|
||||
["command_giveammo_ammo"] = "Ammo Quantity",
|
||||
["command_setdim"] = "Set a players dimension",
|
||||
["tpm_nowaypoint"] = "No Waypoint Set.",
|
||||
["tpm_success"] = "Successfully Teleported",
|
||||
|
||||
["noclip_message"] = "Noclip has been %s",
|
||||
["enabled"] = "~g~enabled~s~",
|
||||
["disabled"] = "~r~disabled~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "£%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dagger",
|
||||
["weapon_bat"] = "Bat",
|
||||
["weapon_battleaxe"] = "Battle Axe",
|
||||
["weapon_bottle"] = "Bottle",
|
||||
["weapon_crowbar"] = "Crowbar",
|
||||
["weapon_flashlight"] = "Flashlight",
|
||||
["weapon_golfclub"] = "Golf Club",
|
||||
["weapon_hammer"] = "Hammer",
|
||||
["weapon_hatchet"] = "Hatchet",
|
||||
["weapon_knife"] = "Knife",
|
||||
["weapon_knuckle"] = "Knuckledusters",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Nightstick",
|
||||
["weapon_wrench"] = "Pipe Wrench",
|
||||
["weapon_poolcue"] = "Pool Cue",
|
||||
["weapon_stone_hatchet"] = "Stone Hatchet",
|
||||
["weapon_switchblade"] = "Switchblade",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic Pistol",
|
||||
["weapon_combatpistol"] = "Combat Pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
["weapon_tecpistol"] = "Tactical SMG",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle",
|
||||
["weapon_battlerifle"] = "Battle Rifle",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metal Detector",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "Candycane",
|
||||
["weapon_acidpackage"] = "Acid Package",
|
||||
["weapon_pistolxm3"] = "Pistol8 x3m",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Chop Shop DLC
|
||||
["weapon_snowlauncher"] = "Snow Launcher",
|
||||
["weapon_hackingdevice"] = "Hacking Device",
|
||||
|
||||
-- Bottom Dollar Bounties DLC
|
||||
["weapon_stunrod"] = "The Shocker",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Grenade",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotov Cocktail",
|
||||
["weapon_proxmine"] = "Proximity Mine",
|
||||
["weapon_pipebomb"] = "Pipe Bomb",
|
||||
["weapon_snowball"] = "Snowball",
|
||||
["weapon_stickybomb"] = "Sticky Bomb",
|
||||
["weapon_smokegrenade"] = "Tear Gas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Fire Extinguisher",
|
||||
["weapon_digiscanner"] = "Digital Scanner",
|
||||
["weapon_garbagebag"] = "Garbage Bag",
|
||||
["weapon_handcuffs"] = "Handcuffs",
|
||||
["gadget_nightvision"] = "Night Vision",
|
||||
["gadget_parachute"] = "parachute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "flashlight",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "round(s)",
|
||||
["ammo_shells"] = "shell(s)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "gallons of fuel",
|
||||
["ammo_firework"] = "firework(s)",
|
||||
["ammo_rockets"] = "rocket(s)",
|
||||
["ammo_grenadelauncher"] = "grenade(s)",
|
||||
["ammo_grenade"] = "grenade(s)",
|
||||
["ammo_stickybomb"] = "bomb(s)",
|
||||
["ammo_pipebomb"] = "bomb(s)",
|
||||
["ammo_smokebomb"] = "bomb(s)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mine(s)",
|
||||
["ammo_bzgas"] = "can(s)",
|
||||
["ammo_ball"] = "ball(s)",
|
||||
["ammo_snowball"] = "snowball(s)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "classic black",
|
||||
["tint_classic_gray"] = "classic gray",
|
||||
["tint_classic_two_tone"] = "classic two-tone",
|
||||
["tint_classic_white"] = "classic white",
|
||||
["tint_classic_beige"] = "classic beige",
|
||||
["tint_classic_green"] = "classic green",
|
||||
["tint_classic_blue"] = "classic blue",
|
||||
["tint_classic_earth"] = "classic earth",
|
||||
["tint_classic_brown_black"] = "classic brown-black",
|
||||
["tint_contrast_red"] = "contrast red",
|
||||
["tint_contrast_blue"] = "contrast blue",
|
||||
["tint_contrast_yellow"] = "contrast yellow",
|
||||
["tint_contrast_orange"] = "contrast orange",
|
||||
["tint_bold_pink"] = "bold pink",
|
||||
["tint_bold_purple_yellow"] = "bold purple-yellow",
|
||||
["tint_bold_orange"] = "bold orange",
|
||||
["tint_bold_green_purple"] = "bold green-purple",
|
||||
["tint_bold_red_feat"] = "bold red feat",
|
||||
["tint_bold_green_feat"] = "bold green feat",
|
||||
["tint_bold_cyan_feat"] = "bold cyan feat",
|
||||
["tint_bold_yellow_feat"] = "bold yellow feat",
|
||||
["tint_bold_red_white"] = "bold red-white",
|
||||
["tint_bold_blue_white"] = "bold blue-white",
|
||||
["tint_metallic_gold"] = "metallic gold",
|
||||
["tint_metallic_platinum"] = "metallic platinum",
|
||||
["tint_metallic_gray_lilac"] = "metallic gray-lilac",
|
||||
["tint_metallic_purple_lime"] = "metallic purple-lime",
|
||||
["tint_metallic_red"] = "metallic red",
|
||||
["tint_metallic_green"] = "metallic green",
|
||||
["tint_metallic_blue"] = "metallic blue",
|
||||
["tint_metallic_white_aqua"] = "metallic white-aqua",
|
||||
["tint_metallic_red_yellow"] = "metallic red-yellow",
|
||||
}
|
||||
426
resources/[core]/es_extended/locales/es.lua
Normal file
426
resources/[core]/es_extended/locales/es.lua
Normal file
@@ -0,0 +1,426 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventario (Peso %s / %s)",
|
||||
["use"] = "Usar",
|
||||
["give"] = "Dar",
|
||||
["remove"] = "Tirar",
|
||||
["return"] = "Devolver",
|
||||
["give_to"] = "Dar a",
|
||||
["amount"] = "Cantidad",
|
||||
["giveammo"] = "Dar munición",
|
||||
["amountammo"] = "Cantidad de munición",
|
||||
["noammo"] = "¡Insuficiente!",
|
||||
["gave_item"] = "Dando %sx %s a %s",
|
||||
["received_item"] = "Recibido %sx %s de %s",
|
||||
["gave_weapon"] = "Dando %s a %s",
|
||||
["gave_weapon_ammo"] = "Dando ~o~%sx %s para %s a %s",
|
||||
["gave_weapon_withammo"] = "Dando %s con ~o~%sx %s a %s",
|
||||
["gave_weapon_hasalready"] = "%s ya tiene un %s",
|
||||
["gave_weapon_noweapon"] = "%s no tiene esa arma",
|
||||
["received_weapon"] = "Recibido %s de %s",
|
||||
["received_weapon_ammo"] = "Recibido ~o~%sx %s para tu %s de %s",
|
||||
["received_weapon_withammo"] = "Recibido %s con ~o~%sx %s de %s",
|
||||
["received_weapon_hasalready"] = "%s ha intentado darte un %s, pero ya tienes esta arma",
|
||||
["received_weapon_noweapon"] = "%s ha intentado darte munición para un %s, pero no tienes esta arma",
|
||||
["gave_account_money"] = "Dando $%s (%s) a %s",
|
||||
["received_account_money"] = "Recibido $%s (%s) de %s",
|
||||
["amount_invalid"] = "Cantidad inválida",
|
||||
["players_nearby"] = "No hay jugadores cerca",
|
||||
["ex_inv_lim"] = "No se puede realizar la acción, se excede el peso máximo de %s",
|
||||
["imp_invalid_quantity"] = "No se puede realizar la acción, la cantidad es inválida",
|
||||
["imp_invalid_amount"] = "No se puede realizar la acción, la cantidad es inválida",
|
||||
["threw_standard"] = "Tirando %sx %s",
|
||||
["threw_account"] = "Tirando $%s %s",
|
||||
["threw_weapon"] = "Tirando %s",
|
||||
["threw_weapon_ammo"] = "Tirando %s con ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Ya tienes esta arma",
|
||||
["threw_cannot_pickup"] = "¡Inventario lleno, no se puede recoger!",
|
||||
["threw_pickup_prompt"] = "Pulsa E para recoger",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Mostrar inventario",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Has cobrado: $%s",
|
||||
["received_help"] = "Has cobrado tu subsidio: $%s",
|
||||
["company_nomoney"] = "La empresa para la que trabajas es demasiado pobre para pagarte el sueldo",
|
||||
["received_paycheck"] = "Nómina recibida",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Banco",
|
||||
["account_black_money"] = "Dinero negro",
|
||||
["account_money"] = "Efectivo",
|
||||
|
||||
["act_imp"] = "No se puede realizar la acción",
|
||||
["in_vehicle"] = "No se puede realizar la acción, el jugador está en un vehículo",
|
||||
["not_in_vehicle"] = "No se puede realizar la acción, el jugador no está en un vehículo",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Traer jugador hacia ti",
|
||||
["command_car"] = "Generar un vehículo",
|
||||
["command_car_car"] = "Modelo o hash del vehículo",
|
||||
["command_cardel"] = "Eliminar vehículos cercanos",
|
||||
["command_cardel_radius"] = "Elimina todos los vehículos dentro del radio especificado",
|
||||
["command_repair"] = "Reparar tu vehículo",
|
||||
["command_repair_success"] = "Vehículo reparado con éxito",
|
||||
["command_repair_success_target"] = "Un administrador reparó tu vehículo",
|
||||
["command_clear"] = "Limpiar texto del chat",
|
||||
["command_clearall"] = "Limpiar texto del chat para todos los jugadores",
|
||||
["command_clearinventory"] = "Eliminar todos los objetos del inventario del jugador",
|
||||
["command_clearloadout"] = "Eliminar todas las armas del equipamiento del jugador",
|
||||
["command_freeze"] = "Congelar a un jugador",
|
||||
["command_unfreeze"] = "Descongelar a un jugador",
|
||||
["command_giveaccountmoney"] = "Dar dinero a una cuenta específica",
|
||||
["command_giveaccountmoney_account"] = "Cuenta a la que añadir",
|
||||
["command_giveaccountmoney_amount"] = "Cantidad a añadir",
|
||||
["command_giveaccountmoney_invalid"] = "Nombre de cuenta inválido",
|
||||
["command_removeaccountmoney"] = "Quitar dinero de una cuenta específica",
|
||||
["command_removeaccountmoney_account"] = "Cuenta de la que quitar",
|
||||
["command_removeaccountmoney_amount"] = "Cantidad a quitar",
|
||||
["command_removeaccountmoney_invalid"] = "Nombre de cuenta inválido",
|
||||
["command_giveitem"] = "Dar un objeto al jugador",
|
||||
["command_giveitem_item"] = "Nombre del objeto",
|
||||
["command_giveitem_count"] = "Cantidad",
|
||||
["command_giveweapon"] = "Dar un arma al jugador",
|
||||
["command_giveweapon_weapon"] = "Nombre del arma",
|
||||
["command_giveweapon_ammo"] = "Cantidad de munición",
|
||||
["command_giveweapon_hasalready"] = "El jugador ya tiene esta arma",
|
||||
["command_giveweaponcomponent"] = "Dar componente de arma al jugador",
|
||||
["command_giveweaponcomponent_component"] = "Nombre del componente",
|
||||
["command_giveweaponcomponent_invalid"] = "Componente de arma inválido",
|
||||
["command_giveweaponcomponent_hasalready"] = "El jugador ya tiene este componente de arma",
|
||||
["command_giveweaponcomponent_missingweapon"] = "El jugador no tiene esta arma",
|
||||
["command_goto"] = "Teletransportarte a un jugador",
|
||||
["command_kill"] = "Matar a un jugador",
|
||||
["command_save"] = "Forzar guardado de datos de un jugador",
|
||||
["command_saveall"] = "Forzar guardado de todos los datos de los jugadores",
|
||||
["command_setaccountmoney"] = "Establecer el dinero en una cuenta específica",
|
||||
["command_setaccountmoney_amount"] = "Cantidad",
|
||||
["command_setcoords"] = "Teletransportar a coordenadas específicas",
|
||||
["command_setcoords_x"] = "Valor X",
|
||||
["command_setcoords_y"] = "Valor Y",
|
||||
["command_setcoords_z"] = "Valor Z",
|
||||
["command_setjob"] = "Establecer el trabajo de un jugador",
|
||||
["command_setjob_job"] = "Nombre",
|
||||
["command_setjob_grade"] = "Rango del trabajo",
|
||||
["command_setjob_invalid"] = "El trabajo, el rango o ambos son inválidos",
|
||||
["command_setgroup"] = "Establecer el grupo de permisos de un jugador",
|
||||
["command_setgroup_group"] = "Nombre del grupo",
|
||||
["commanderror_argumentmismatch"] = "Número de argumentos inválido (pasados %s, esperados %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Tipo de datos del argumento #%s inválido (pasado string, esperado número)",
|
||||
["commanderror_argumentmismatch_string"] = "Tipo de datos del argumento #%s inválido (pasado número, esperado string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Argumento inválido #%s tipo de datos (pasado negativo/cero, se requiere número positivo)",
|
||||
["commanderror_invaliditem"] = "Objeto inválido",
|
||||
["commanderror_invalidweapon"] = "Arma inválida",
|
||||
["commanderror_console"] = "El comando no se puede ejecutar desde la consola",
|
||||
["commanderror_invalidcommand"] = "Comando inválido - /%s",
|
||||
["commanderror_invalidplayerid"] = "El jugador especificado no está en línea",
|
||||
["commandgeneric_playerid"] = "ID del servidor del jugador",
|
||||
["commandgeneric_dimension"] = "Dimensión de destino",
|
||||
["command_giveammo_noweapon_found"] = "%s no tiene esa arma",
|
||||
["command_giveammo_weapon"] = "Nombre del arma",
|
||||
["command_giveammo_ammo"] = "Cantidad de munición",
|
||||
["command_setdim"] = "Establecer la dimensión de un jugador",
|
||||
["tpm_nowaypoint"] = "No hay punto de ruta establecido.",
|
||||
["tpm_success"] = "Teletransportado con éxito",
|
||||
|
||||
["noclip_message"] = "Noclip ha sido %s",
|
||||
["enabled"] = "~g~activado~s~",
|
||||
["disabled"] = "~r~desactivado~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ".",
|
||||
["locale_currency"] = "%s€",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Daga",
|
||||
["weapon_bat"] = "Bate",
|
||||
["weapon_battleaxe"] = "Hacha de guerra",
|
||||
["weapon_bottle"] = "Botella",
|
||||
["weapon_crowbar"] = "Palanca",
|
||||
["weapon_flashlight"] = "Linterna",
|
||||
["weapon_golfclub"] = "Palo de golf",
|
||||
["weapon_hammer"] = "Martillo",
|
||||
["weapon_hatchet"] = "Hachuela",
|
||||
["weapon_knife"] = "Cuchillo",
|
||||
["weapon_knuckle"] = "Puño americano",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Porra",
|
||||
["weapon_wrench"] = "Llave inglesa",
|
||||
["weapon_poolcue"] = "Taco de billar",
|
||||
["weapon_stone_hatchet"] = "Hacha de piedra",
|
||||
["weapon_switchblade"] = "Navaja automática",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "Pistola PA",
|
||||
["weapon_ceramicpistol"] = "Pistola de cerámica",
|
||||
["weapon_combatpistol"] = "Pistola de combate",
|
||||
["weapon_doubleaction"] = "Revólver de doble acción",
|
||||
["weapon_navyrevolver"] = "Revólver de la Marina",
|
||||
["weapon_flaregun"] = "Pistola de bengalas",
|
||||
["weapon_gadgetpistol"] = "Pistola de Cayo Perico",
|
||||
["weapon_heavypistol"] = "Pistola pesada",
|
||||
["weapon_revolver"] = "Revólver pesado",
|
||||
["weapon_revolver_mk2"] = "Revólver pesado Mk2",
|
||||
["weapon_marksmanpistol"] = "Pistola de tirador",
|
||||
["weapon_pistol"] = "Pistola",
|
||||
["weapon_pistol_mk2"] = "Pistola Mk2",
|
||||
["weapon_pistol50"] = "Pistola .50",
|
||||
["weapon_snspistol"] = "Pistola SNS",
|
||||
["weapon_snspistol_mk2"] = "Pistola SNS Mk2",
|
||||
["weapon_stungun"] = "Pistola eléctrica",
|
||||
["weapon_raypistol"] = "Pistola de Rayos",
|
||||
["weapon_vintagepistol"] = "Pistola vintage",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Escopeta de asalto",
|
||||
["weapon_autoshotgun"] = "Escopeta automática",
|
||||
["weapon_bullpupshotgun"] = "Escopeta bullpup",
|
||||
["weapon_combatshotgun"] = "Escopeta de combate",
|
||||
["weapon_dbshotgun"] = "Escopeta de dos cañones",
|
||||
["weapon_heavyshotgun"] = "Escopeta pesada",
|
||||
["weapon_musket"] = "Mosquete",
|
||||
["weapon_pumpshotgun"] = "Escopeta de corredera",
|
||||
["weapon_pumpshotgun_mk2"] = "Escopeta de corredera Mk2",
|
||||
["weapon_sawnoffshotgun"] = "Escopeta recortada",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Subfusil de asalto",
|
||||
["weapon_combatmg"] = "Ametralladora de combate",
|
||||
["weapon_combatmg_mk2"] = "Ametralladora de combate Mk2",
|
||||
["weapon_combatpdw"] = "PDW de combate",
|
||||
["weapon_gusenberg"] = "Subfusil Gusenberg",
|
||||
["weapon_machinepistol"] = "Pistola ametralladora",
|
||||
["weapon_mg"] = "Ametralladora",
|
||||
["weapon_microsmg"] = "Microsubfusil",
|
||||
["weapon_minismg"] = "Minisubfusil",
|
||||
["weapon_smg"] = "Subfusil",
|
||||
["weapon_smg_mk2"] = "Subfusil Mk2",
|
||||
["weapon_raycarbine"] = "Carabina de Rayos",
|
||||
["weapon_tecpistol"] = "Subfusil táctico",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Fusil avanzado",
|
||||
["weapon_assaultrifle"] = "Fusil de asalto",
|
||||
["weapon_assaultrifle_mk2"] = "Fusil de asalto Mk2",
|
||||
["weapon_bullpuprifle"] = "Fusil bullpup",
|
||||
["weapon_bullpuprifle_mk2"] = "Fusil bullpup Mk2",
|
||||
["weapon_carbinerifle"] = "Carabina",
|
||||
["weapon_carbinerifle_mk2"] = "Carabina Mk2",
|
||||
["weapon_compactrifle"] = "Fusil compacto",
|
||||
["weapon_militaryrifle"] = "Fusil militar",
|
||||
["weapon_specialcarbine"] = "Carabina especial",
|
||||
["weapon_specialcarbine_mk2"] = "Carabina especial Mk2",
|
||||
["weapon_heavyrifle"] = "Fusil pesado",
|
||||
["weapon_battlerifle"] = "Fusil de combate",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Francotirador pesado",
|
||||
["weapon_heavysniper_mk2"] = "Francotirador pesado Mk2",
|
||||
["weapon_marksmanrifle"] = "Fusil de tirador",
|
||||
["weapon_marksmanrifle_mk2"] = "Fusil de tirador Mk2",
|
||||
["weapon_sniperrifle"] = "Fusil de francotirador",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Lanzagranadas compacto",
|
||||
["weapon_firework"] = "Lanzador de pirotecnia",
|
||||
["weapon_grenadelauncher"] = "Lanzagranadas",
|
||||
["weapon_hominglauncher"] = "Lanzacohetes teledirigido",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Cañón de riel",
|
||||
["weapon_rpg"] = "Lanzacohetes",
|
||||
["weapon_rayminigun"] = "Ametralladora de rayos",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Detector de metales",
|
||||
["weapon_precisionrifle"] = "Fusil de precisión",
|
||||
["weapon_tactilerifle"] = "Carabina de servicio",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "Bastón de caramelo",
|
||||
["weapon_acidpackage"] = "Paquete de ácido",
|
||||
["weapon_pistolxm3"] = "Pistola WM 29",
|
||||
["weapon_railgunxm3"] = "Cañón de riel",
|
||||
|
||||
-- Chop Shop DLC
|
||||
["weapon_snowlauncher"] = "Lanzador de nieve",
|
||||
["weapon_hackingdevice"] = "Dispositivo de hackeo",
|
||||
|
||||
-- Bottom Dollar Bounties DLC
|
||||
["weapon_stunrod"] = "Porra eléctrica",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Pelota de béisbol",
|
||||
["weapon_bzgas"] = "Gas BZ",
|
||||
["weapon_flare"] = "Bengala",
|
||||
["weapon_grenade"] = "Granada",
|
||||
["weapon_petrolcan"] = "Bidón de gasolina",
|
||||
["weapon_hazardcan"] = "Bidón de material peligroso",
|
||||
["weapon_molotov"] = "Cóctel molotov",
|
||||
["weapon_proxmine"] = "Mina de proximidad",
|
||||
["weapon_pipebomb"] = "Bomba casera",
|
||||
["weapon_snowball"] = "Bola de nieve",
|
||||
["weapon_stickybomb"] = "Bomba lapa",
|
||||
["weapon_smokegrenade"] = "Granada de humo",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Extintor",
|
||||
["weapon_digiscanner"] = "Escáner digital",
|
||||
["weapon_garbagebag"] = "Bolsa de basura",
|
||||
["weapon_handcuffs"] = "Esposas",
|
||||
["gadget_nightvision"] = "Visión nocturna",
|
||||
["gadget_parachute"] = "Paracaídas",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "Modelo base",
|
||||
["component_knuckle_pimp"] = "El Chulo",
|
||||
["component_knuckle_ballas"] = "Los Ballas",
|
||||
["component_knuckle_dollar"] = "El Buscavidas",
|
||||
["component_knuckle_diamond"] = "La Roca",
|
||||
["component_knuckle_hate"] = "El Odiador",
|
||||
["component_knuckle_love"] = "El Amante",
|
||||
["component_knuckle_player"] = "El Jugador",
|
||||
["component_knuckle_king"] = "El Rey",
|
||||
["component_knuckle_vagos"] = "Los Vagos",
|
||||
|
||||
["component_luxary_finish"] = "Acabado de arma de lujo",
|
||||
|
||||
["component_handle_default"] = "Empuñadura por defecto",
|
||||
["component_handle_vip"] = "Empuñadura VIP",
|
||||
["component_handle_bodyguard"] = "Empuñadura de guardaespaldas",
|
||||
|
||||
["component_vip_finish"] = "Acabado VIP",
|
||||
["component_bodyguard_finish"] = "Acabado de guardaespaldas",
|
||||
|
||||
["component_camo_finish"] = "Camuflaje digital",
|
||||
["component_camo_finish2"] = "Camuflaje pincelada",
|
||||
["component_camo_finish3"] = "Camuflaje boscoso",
|
||||
["component_camo_finish4"] = "Camuflaje calavera",
|
||||
["component_camo_finish5"] = "Camuflaje Sessanta Nove",
|
||||
["component_camo_finish6"] = "Camuflaje Perseo",
|
||||
["component_camo_finish7"] = "Camuflaje leopardo",
|
||||
["component_camo_finish8"] = "Camuflaje cebra",
|
||||
["component_camo_finish9"] = "Camuflaje geométrico",
|
||||
["component_camo_finish10"] = "Camuflaje Boom",
|
||||
["component_camo_finish11"] = "Camuflaje patriótico",
|
||||
|
||||
["component_camo_slide_finish"] = "Camuflaje digital (corredera)",
|
||||
["component_camo_slide_finish2"] = "Camuflaje pincelada (corredera)",
|
||||
["component_camo_slide_finish3"] = "Camuflaje boscoso (corredera)",
|
||||
["component_camo_slide_finish4"] = "Camuflaje calavera (corredera)",
|
||||
["component_camo_slide_finish5"] = "Camuflaje Sessanta Nove (corredera)",
|
||||
["component_camo_slide_finish6"] = "Camuflaje Perseo (corredera)",
|
||||
["component_camo_slide_finish7"] = "Camuflaje leopardo (corredera)",
|
||||
["component_camo_slide_finish8"] = "Camuflaje cebra (corredera)",
|
||||
["component_camo_slide_finish9"] = "Camuflaje geométrico (corredera)",
|
||||
["component_camo_slide_finish10"] = "Camuflaje Boom (corredera)",
|
||||
["component_camo_slide_finish11"] = "Camuflaje patriótico (corredera)",
|
||||
|
||||
["component_clip_default"] = "Cargador por defecto",
|
||||
["component_clip_extended"] = "Cargador ampliado",
|
||||
["component_clip_drum"] = "Cargador de tambor",
|
||||
["component_clip_box"] = "Cargador de caja",
|
||||
|
||||
["component_scope_holo"] = "Mira holográfica",
|
||||
["component_scope_small"] = "Mira pequeña",
|
||||
["component_scope_medium"] = "Mira mediana",
|
||||
["component_scope_large"] = "Mira telescópica",
|
||||
["component_scope"] = "Mira óptica",
|
||||
["component_scope_advanced"] = "Mira avanzada",
|
||||
["component_ironsights"] = "Miras de hierro",
|
||||
|
||||
["component_suppressor"] = "Silenciador",
|
||||
["component_compensator"] = "Compensador",
|
||||
|
||||
["component_muzzle_flat"] = "Freno de boca plano",
|
||||
["component_muzzle_tactical"] = "Freno de boca táctico",
|
||||
["component_muzzle_fat"] = "Freno de boca grueso",
|
||||
["component_muzzle_precision"] = "Freno de boca de precisión",
|
||||
["component_muzzle_heavy"] = "Freno de boca pesado",
|
||||
["component_muzzle_slanted"] = "Freno de boca inclinado",
|
||||
["component_muzzle_split"] = "Freno de boca dividido",
|
||||
["component_muzzle_squared"] = "Freno de boca cuadrado",
|
||||
|
||||
["component_flashlight"] = "Linterna",
|
||||
["component_grip"] = "Empuñadura",
|
||||
|
||||
["component_barrel_default"] = "Cañón por defecto",
|
||||
["component_barrel_heavy"] = "Cañón pesado",
|
||||
|
||||
["component_ammo_tracer"] = "Munición trazadora",
|
||||
["component_ammo_incendiary"] = "Munición incendiaria",
|
||||
["component_ammo_hollowpoint"] = "Munición de punta hueca",
|
||||
["component_ammo_fmj"] = "Munición FMJ",
|
||||
["component_ammo_armor"] = "Munición perforante",
|
||||
["component_ammo_explosive"] = "Munición explosiva perforante",
|
||||
|
||||
["component_shells_default"] = "Cartuchos por defecto",
|
||||
["component_shells_incendiary"] = "Cartuchos Aliento de dragón",
|
||||
["component_shells_armor"] = "Cartuchos de postas de acero",
|
||||
["component_shells_hollowpoint"] = "Cartuchos de perdigones expansivos",
|
||||
["component_shells_explosive"] = "Cartuchos de postas explosivas",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "proyectil(es)",
|
||||
["ammo_shells"] = "cartucho(s)",
|
||||
["ammo_charge"] = "carga(s)",
|
||||
["ammo_petrol"] = "litros de combustible",
|
||||
["ammo_firework"] = "cohete(s) de pirotecnia",
|
||||
["ammo_rockets"] = "cohete(s)",
|
||||
["ammo_grenadelauncher"] = "granada(s)",
|
||||
["ammo_grenade"] = "granada(s)",
|
||||
["ammo_stickybomb"] = "bomba(s) lapa",
|
||||
["ammo_pipebomb"] = "bomba(s) casera",
|
||||
["ammo_smokebomb"] = "bomba(s) de humo",
|
||||
["ammo_molotov"] = "cóctel(es) molotov",
|
||||
["ammo_proxmine"] = "mina(s) de proximidad",
|
||||
["ammo_bzgas"] = "bote(s) de gas",
|
||||
["ammo_ball"] = "pelota(s)",
|
||||
["ammo_snowball"] = "bola(s) de nieve",
|
||||
["ammo_flare"] = "bengala(s)",
|
||||
["ammo_flaregun"] = "bengala(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "Diseño por defecto",
|
||||
["tint_green"] = "Diseño verde",
|
||||
["tint_gold"] = "Diseño dorado",
|
||||
["tint_pink"] = "Diseño rosa",
|
||||
["tint_army"] = "Diseño militar",
|
||||
["tint_lspd"] = "Diseño LSPD",
|
||||
["tint_orange"] = "Diseño naranja",
|
||||
["tint_platinum"] = "Diseño platino",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "Negro clásico",
|
||||
["tint_classic_gray"] = "Gris clásico",
|
||||
["tint_classic_two_tone"] = "Dos tonos clásico",
|
||||
["tint_classic_white"] = "Blanco clásico",
|
||||
["tint_classic_beige"] = "Beige clásico",
|
||||
["tint_classic_green"] = "Verde clásico",
|
||||
["tint_classic_blue"] = "Azul clásico",
|
||||
["tint_classic_earth"] = "Tierra clásico",
|
||||
["tint_classic_brown_black"] = "Marrón y negro clásico",
|
||||
["tint_contrast_red"] = "Rojo contraste",
|
||||
["tint_contrast_blue"] = "Azul contraste",
|
||||
["tint_contrast_yellow"] = "Amarillo contraste",
|
||||
["tint_contrast_orange"] = "Naranja contraste",
|
||||
["tint_bold_pink"] = "Rosa intenso",
|
||||
["tint_bold_purple_yellow"] = "Morado y amarillo intenso",
|
||||
["tint_bold_orange"] = "Naranja intenso",
|
||||
["tint_bold_green_purple"] = "Verde y morado intenso",
|
||||
["tint_bold_red_feat"] = "Rojo intenso especial",
|
||||
["tint_bold_green_feat"] = "Verde intenso especial",
|
||||
["tint_bold_cyan_feat"] = "Cian intenso especial",
|
||||
["tint_bold_yellow_feat"] = "Amarillo intenso especial",
|
||||
["tint_bold_red_white"] = "Rojo y blanco intenso",
|
||||
["tint_bold_blue_white"] = "Azul y blanco intenso",
|
||||
["tint_metallic_gold"] = "Dorado metálico",
|
||||
["tint_metallic_platinum"] = "Platino metálico",
|
||||
["tint_metallic_gray_lilac"] = "Gris lila metálico",
|
||||
["tint_metallic_purple_lime"] = "Morado lima metálico",
|
||||
["tint_metallic_red"] = "Rojo metálico",
|
||||
["tint_metallic_green"] = "Verde metálico",
|
||||
["tint_metallic_blue"] = "Azul metálico",
|
||||
["tint_metallic_white_aqua"] = "Blanco aguamarina metálico",
|
||||
["tint_metallic_red_yellow"] = "Rojo y amarillo metálico",
|
||||
}
|
||||
274
resources/[core]/es_extended/locales/fi.lua
Normal file
274
resources/[core]/es_extended/locales/fi.lua
Normal file
@@ -0,0 +1,274 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Reppu %s / %s",
|
||||
["use"] = "Käytä",
|
||||
["give"] = "Anna",
|
||||
["remove"] = "Poista",
|
||||
["return"] = "Takaisin",
|
||||
["give_to"] = "Anna henkilölle",
|
||||
["amount"] = "Määrä",
|
||||
["giveammo"] = "Anna ammuksia",
|
||||
["amountammo"] = "Ammusten määrä",
|
||||
["noammo"] = "Sinulla ei ole ammuksia!",
|
||||
["gave_item"] = "Sinä annoit %sx %s henkilölle %s",
|
||||
["received_item"] = "Sinä sait %sx %s henkilöltä %s",
|
||||
["gave_weapon"] = "Sinä annoit 1x %s henkilölle %s",
|
||||
["gave_weapon_ammo"] = "Annoit ~o~%sx %s kohteelle %s henkilölle %s",
|
||||
["gave_weapon_withammo"] = "Sinä annoit 1x %s ammuksella ~o~%sx %s henkilölle %s",
|
||||
["gave_weapon_hasalready"] = "%s omistaa jo %s",
|
||||
["gave_weapon_noweapon"] = "%s ei ole kyseistä asetta",
|
||||
["received_weapon"] = "Vastaanotit 1x %s henkilöltä %s",
|
||||
["received_weapon_ammo"] = "Sinä sait ~o~%sx %s sinun %s varten henkilöltä %s",
|
||||
["received_weapon_withammo"] = "Sinä sait 1x %s ammuksella ~o~%sx %s henkilöltä %s",
|
||||
["received_weapon_hasalready"] = "%s yritti antaa sinulle %s, mutta sinulla on jo sellainen",
|
||||
["received_weapon_noweapon"] = "%s yritti antaa sinulle ammuksia %s:lle, mutta sinulla ei ole sellaista",
|
||||
["gave_account_money"] = "Sinä annoit $%s (%s) henkilölle %s",
|
||||
["received_account_money"] = "Sinä sait $%s (%s) henkilöltä %s",
|
||||
["amount_invalid"] = "Virheellinen määrä",
|
||||
["players_nearby"] = "Ei pelaajia lähettyvillä",
|
||||
["ex_inv_lim"] = "Toiminto mahdoton, reppu alkaa olla täysi %s",
|
||||
["imp_invalid_quantity"] = "Toiminto mahdoton, virheellinen määrä",
|
||||
["imp_invalid_amount"] = "Toiminto mahdoton, virhellinen summa",
|
||||
["threw_standard"] = "Sinä heitit %sx %s",
|
||||
["threw_account"] = "Sinä heitit $%s %s",
|
||||
["threw_weapon"] = "Sinä heitit 1x %s",
|
||||
["threw_weapon_ammo"] = "Heitit 1x %s ammuksella ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Sinulla on jo sama ase",
|
||||
["threw_cannot_pickup"] = "Et voi kerätä sitä, koska reppusi on täynnä",
|
||||
["threw_pickup_prompt"] = "Paina E kerätäksesi",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Avaa reppu",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Vastaanotit palkkaa: $%s",
|
||||
["received_help"] = "Vastaanotit valtion tukea: $%s",
|
||||
["company_nomoney"] = "Yrityksellä jolle teet töitä ei ole varaa maksaa palkkaasi",
|
||||
["received_paycheck"] = "Sait palkan",
|
||||
["bank"] = "Pankki",
|
||||
["account_bank"] = "Pankki",
|
||||
["account_black_money"] = "Likainen raha",
|
||||
["account_money"] = "Käteinen",
|
||||
|
||||
["act_imp"] = "Toiminto mahdoton",
|
||||
["in_vehicle"] = "Et voi antaa ajoneuvossa olevalle mitään",
|
||||
["not_in_vehicle"] = "Toimintoa ei voida suorittaa, pelaaja ei ole ajoneuvossa",
|
||||
|
||||
-- Commands
|
||||
["command_car"] = "Luo ajoneuvo",
|
||||
["command_car_car"] = "Ajoneuvon nimi tai hash",
|
||||
["command_cardel"] = "Poistaa ajoneuvon läheltä",
|
||||
["command_cardel_radius"] = "Valinnainen, poista kaikki ajoneuvot määritetyllä säteellä",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "Tyhjennä keskustelu",
|
||||
["command_clearall"] = "Tyhjennä keskustelu kaikilta pelaajilta",
|
||||
["command_clearinventory"] = "Tyhjennä pelaajan reppu",
|
||||
["command_clearloadout"] = "Tyhjennä pelaajan varustus",
|
||||
["command_giveaccountmoney"] = "Anna tilirahaa",
|
||||
["command_giveaccountmoney_account"] = "Kelvollinen tilin nimi",
|
||||
["command_giveaccountmoney_amount"] = "Lisättävä määrä",
|
||||
["command_giveaccountmoney_invalid"] = "Virheellinen tili nimi",
|
||||
["command_giveitem"] = "Anna pelaajalle esine",
|
||||
["command_giveitem_item"] = "Esineen nimi",
|
||||
["command_giveitem_count"] = "Esineiden määrä",
|
||||
["command_giveweapon"] = "Anna pelaajalle ase",
|
||||
["command_giveweapon_weapon"] = "Aseen nimi",
|
||||
["command_giveweapon_ammo"] = "Ammusten määrä",
|
||||
["command_giveweapon_hasalready"] = "Pelaajalla on jo kyseinen ase",
|
||||
["command_giveweaponcomponent"] = "Anna aseen komponentti",
|
||||
["command_giveweaponcomponent_component"] = "Komponentin nimi",
|
||||
["command_giveweaponcomponent_invalid"] = "Virheellinen aseen komponentti",
|
||||
["command_giveweaponcomponent_hasalready"] = "Pelaajalla on jo kyseinen asekomponentti",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Pelaajalla ei ole kyseistä asetta",
|
||||
["command_save"] = "Talenna pelaaja tietokantaan",
|
||||
["command_saveall"] = "Tallenna kaikki pelaajat tietokantaan",
|
||||
["command_setaccountmoney"] = "Aseta tilirahaa pelaajalle",
|
||||
["command_setaccountmoney_amount"] = "Asetettava rahamäärä",
|
||||
["command_setcoords"] = "Teleporttaa koordinaatteihin",
|
||||
["command_setcoords_x"] = "x akseli",
|
||||
["command_setcoords_y"] = "y akseli",
|
||||
["command_setcoords_z"] = "z akseli",
|
||||
["command_setjob"] = "Aseta pelaajalle ammatti",
|
||||
["command_setjob_job"] = "Ammatti",
|
||||
["command_setjob_grade"] = "Arvo",
|
||||
["command_setjob_invalid"] = "Ammatti ja arvo tai molemmat ovat virheellisiä",
|
||||
["command_setgroup"] = "Aseta pelaajan ryhmä",
|
||||
["command_setgroup_group"] = "Ryhmän nimi",
|
||||
["commanderror_argumentmismatch"] = "Argumenttien määrä ei täsmää (hyväksytty %s, haluttu %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Argumentin #%s tyyppi ei täsmää (syötetty merkkijono, haluttu numero)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Virheellinen argumentti #%s tietotyyppi (annettu negatiivinen/nolla, haluttu positiivinen luku)",
|
||||
["commanderror_invaliditem"] = "Virheellinen esineen nimi",
|
||||
["commanderror_invalidweapon"] = "Virheellinen ase",
|
||||
["commanderror_console"] = "Komentoa ei voi suorittaa konsolissa",
|
||||
["commanderror_invalidcommand"] = "/%s ei ole kelvollinen komento!",
|
||||
["commanderror_invalidplayerid"] = "Palvelimella ei ole pelaajaa, joka vastaa annetua ID",
|
||||
["commandgeneric_playerid"] = "Pelaajan ID",
|
||||
["command_giveammo_noweapon_found"] = "%s ei ole sitä asetta",
|
||||
["command_giveammo_weapon"] = "Aseen nimi",
|
||||
["command_giveammo_ammo"] = "Ammusten määrä",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = "",
|
||||
["locale_currency"] = "€%s",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Karkkitanko",
|
||||
["weapon_acidpackage"] = "Happo pakkaus",
|
||||
["weapon_pistolxm3"] = "WM 29 Pistooli",
|
||||
["weapon_railgunxm3"] = "Raidetykki",
|
||||
|
||||
-- Weapons
|
||||
["weapon_knife"] = "Veitsi",
|
||||
["weapon_nightstick"] = "Pamppu",
|
||||
["weapon_hammer"] = "Vasara",
|
||||
["weapon_bat"] = "Pesäpallomaila",
|
||||
["weapon_golfclub"] = "Golf maila",
|
||||
["weapon_crowbar"] = "Sorkkarauta",
|
||||
["weapon_pistol"] = "Pistooli",
|
||||
["weapon_combatpistol"] = "Taistelu pistooli",
|
||||
["weapon_appistol"] = "Automaatti pistooli",
|
||||
["weapon_pistol50"] = "50 kaliiperinen pistooli",
|
||||
["weapon_microsmg"] = "Mikro konepistooli",
|
||||
["weapon_smg"] = "Konepistooli",
|
||||
["weapon_assaultsmg"] = "Rynnäkkö konepistooli",
|
||||
["weapon_assaultrifle"] = "Rynnäkkökivääri",
|
||||
["weapon_carbinerifle"] = "Karbiini kivääri",
|
||||
["weapon_advancedrifle"] = "Edistynyt kivääri",
|
||||
["weapon_mg"] = "Konekivääri",
|
||||
["weapon_combatmg"] = "Rynnäkkö konekivääri",
|
||||
["weapon_pumpshotgun"] = "Pumppu haulikko",
|
||||
["weapon_sawnoffshotgun"] = "Katkaistuhaulikko",
|
||||
["weapon_assaultshotgun"] = "Hyökkäyshaulikko",
|
||||
["weapon_bullpupshotgun"] = "Bullpup haulikko",
|
||||
["weapon_stungun"] = "Tainutusase",
|
||||
["weapon_sniperrifle"] = "Tarkkuuskivääri",
|
||||
["weapon_heavysniper"] = "Raskas tarkkuuskivääri",
|
||||
["weapon_grenadelauncher"] = "Kranaatinheitin",
|
||||
["weapon_rpg"] = "Raketinheitin",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_grenade"] = "Kranaatti",
|
||||
["weapon_stickybomb"] = "Tahma pommi",
|
||||
["weapon_smokegrenade"] = "Savukranaatti",
|
||||
["weapon_bzgas"] = "Bz-kaasu",
|
||||
["weapon_molotov"] = "Polttopullo",
|
||||
["weapon_fireextinguisher"] = "Palosammutin",
|
||||
["weapon_petrolcan"] = "Jerrykannu",
|
||||
["weapon_ball"] = "Pallo",
|
||||
["weapon_snspistol"] = "Pienpistooli",
|
||||
["weapon_bottle"] = "Pullo",
|
||||
["weapon_gusenberg"] = "Thompson-konepistooli",
|
||||
["weapon_specialcarbine"] = "G86C",
|
||||
["weapon_heavypistol"] = "Raskas pistooli",
|
||||
["weapon_bullpuprifle"] = "Bullpup kivääri",
|
||||
["weapon_dagger"] = "Tikari",
|
||||
["weapon_vintagepistol"] = "Vanha pistooli",
|
||||
["weapon_firework"] = "Ilotulite",
|
||||
["weapon_musket"] = "Musketti",
|
||||
["weapon_heavyshotgun"] = "Raskas haulikko",
|
||||
["weapon_marksmanrifle"] = "Marksman kivääri",
|
||||
["weapon_hominglauncher"] = "Ohjautuva raketinheitin",
|
||||
["weapon_proxmine"] = "Lähellä räjähtävä miina",
|
||||
["weapon_snowball"] = "Lumipallo",
|
||||
["weapon_flaregun"] = "Valopistooli",
|
||||
["weapon_combatpdw"] = "Rynnäkkö pdw",
|
||||
["weapon_marksmanpistol"] = "Marksman pistooli",
|
||||
["weapon_knuckle"] = "Nyrkkirauta",
|
||||
["weapon_hatchet"] = "Kirves",
|
||||
["weapon_railgun"] = "Raidetykki",
|
||||
["weapon_machete"] = "Viidakkoveitsi",
|
||||
["weapon_machinepistol"] = "Konepistooli",
|
||||
["weapon_switchblade"] = "Stiletti",
|
||||
["weapon_revolver"] = "Raskas revolveri",
|
||||
["weapon_dbshotgun"] = "Kaksipiippunen haulikko",
|
||||
["weapon_compactrifle"] = "Pikku AK",
|
||||
["weapon_autoshotgun"] = "Automaattinen haulikko",
|
||||
["weapon_battleaxe"] = "Taistelukirves",
|
||||
["weapon_compactlauncher"] = "Pien kranaatinheitin",
|
||||
["weapon_minismg"] = "Mini konepistooli",
|
||||
["weapon_pipebomb"] = "Putkipommi",
|
||||
["weapon_poolcue"] = "Biljardimaila",
|
||||
["weapon_wrench"] = "Putkipihdit",
|
||||
["weapon_flashlight"] = "Taskulamppu",
|
||||
["gadget_parachute"] = "Laskuvarjo",
|
||||
["weapon_flare"] = "Hätäraketti",
|
||||
["weapon_doubleaction"] = "Double action revolveri",
|
||||
["weapon_heavyrifle"] = "Raskas kivääri",
|
||||
|
||||
-- Weapon Components
|
||||
["component_clip_default"] = "Oletus lipas",
|
||||
["component_clip_extended"] = "Paranneltu lipas",
|
||||
["component_clip_drum"] = "Rumpulipas",
|
||||
["component_clip_box"] = "Laatikkolipas",
|
||||
["component_flashlight"] = "Taskulamppu",
|
||||
["component_scope"] = "Tähtäin",
|
||||
["component_scope_advanced"] = "Paranneltu tähtäin",
|
||||
["component_suppressor"] = "Äänenvaimennin",
|
||||
["component_grip"] = "Kahva",
|
||||
["component_luxary_finish"] = "Luksus ulkokuori",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "Ammukset(s)",
|
||||
["ammo_shells"] = "Hylsy(s)",
|
||||
["ammo_charge"] = "Lataa",
|
||||
["ammo_petrol"] = "Gallonaa polttoainetta",
|
||||
["ammo_firework"] = "Ilotulite(s)",
|
||||
["ammo_rockets"] = "Raketti(s)",
|
||||
["ammo_grenadelauncher"] = "Kranaatti(s)",
|
||||
["ammo_grenade"] = "Kranaatti(s)",
|
||||
["ammo_stickybomb"] = "Pommi(s)",
|
||||
["ammo_pipebomb"] = "Pommi(s)",
|
||||
["ammo_smokebomb"] = "Pommi(s)",
|
||||
["ammo_molotov"] = "Polttopullo(s)",
|
||||
["ammo_proxmine"] = "Miina(s)",
|
||||
["ammo_bzgas"] = "Tölkki(s)",
|
||||
["ammo_ball"] = "Pallo(s)",
|
||||
["ammo_snowball"] = "Lumipallo(s)",
|
||||
["ammo_flare"] = "Valoraketti(s)",
|
||||
["ammo_flaregun"] = "Valoraketti(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "Oletus ulkokuori",
|
||||
["tint_green"] = "Vihreä ulkokuori",
|
||||
["tint_gold"] = "Kultainen ulkokuori",
|
||||
["tint_pink"] = "Vaaleanpunainen ulkokuori",
|
||||
["tint_army"] = "Armeija ulkokuori",
|
||||
["tint_lspd"] = "Sininen ulkokuori",
|
||||
["tint_orange"] = "Oranssi ulkokuori",
|
||||
["tint_platinum"] = "Platina ulkokuori",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klassinen musta",
|
||||
["tint_classic_gray"] = "klassinen harmaa",
|
||||
["tint_classic_two_tone"] = "klassinen kaksivärinen",
|
||||
["tint_classic_white"] = "klassinen valkoinen",
|
||||
["tint_classic_beige"] = "klassinen beessi",
|
||||
["tint_classic_green"] = "klassinen vihreä",
|
||||
["tint_classic_blue"] = "klassinen sininen",
|
||||
["tint_classic_earth"] = "klassinen maa",
|
||||
["tint_classic_brown_black"] = "klassinen ruskea-musta",
|
||||
["tint_contrast_red"] = "kontrastinen punainen",
|
||||
["tint_contrast_blue"] = "kontrastinen sininen",
|
||||
["tint_contrast_yellow"] = "kontrastinen keltainen",
|
||||
["tint_contrast_orange"] = "kontrastinen oranssi",
|
||||
["tint_bold_pink"] = "rohkea vaaleanpunainen",
|
||||
["tint_bold_purple_yellow"] = "rohkea violetti-keltainen",
|
||||
["tint_bold_orange"] = "rohkea oranssi",
|
||||
["tint_bold_green_purple"] = "rohkea vihreä-violetti",
|
||||
["tint_bold_red_feat"] = "rohkea punainen feat",
|
||||
["tint_bold_green_feat"] = "rohkea vihreä feat",
|
||||
["tint_bold_cyan_feat"] = "rohkea syaani feat",
|
||||
["tint_bold_yellow_feat"] = "rohkea keltainen feat",
|
||||
["tint_bold_red_white"] = "rohkea punainen valkoinen",
|
||||
["tint_bold_blue_white"] = "rohkea sininen valkoinen",
|
||||
["tint_metallic_gold"] = "metallinen kulta",
|
||||
["tint_metallic_platinum"] = "metallinen platina",
|
||||
["tint_metallic_gray_lilac"] = "metallinen harmaa lila",
|
||||
["tint_metallic_purple_lime"] = "metallinen violetti limetti",
|
||||
["tint_metallic_red"] = "metallinen punainen",
|
||||
["tint_metallic_green"] = "metallinen vihreä",
|
||||
["tint_metallic_blue"] = "metallinen sininen",
|
||||
["tint_metallic_white_aqua"] = "metallinen valkoinen aqua",
|
||||
["tint_metallic_red_yellow"] = "metallinen punainen keltainen",
|
||||
}
|
||||
417
resources/[core]/es_extended/locales/fr.lua
Normal file
417
resources/[core]/es_extended/locales/fr.lua
Normal file
@@ -0,0 +1,417 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventaire ( Poids %s / %s )",
|
||||
["use"] = "Utiliser",
|
||||
["give"] = "Donner",
|
||||
["remove"] = "Jeter",
|
||||
["return"] = "Retour",
|
||||
["give_to"] = "Donner à",
|
||||
["amount"] = "Quantité",
|
||||
["giveammo"] = "Donner des munitions",
|
||||
["amountammo"] = "Nombre de munitions",
|
||||
["noammo"] = "Vous n'avez pas autant de munitions!",
|
||||
["gave_item"] = "Vous avez donné %sx %s à %s",
|
||||
["received_item"] = "Vous avez reçu %sx %s de %s",
|
||||
["gave_weapon"] = "Vous avez donné 1x %s à %s",
|
||||
["gave_weapon_ammo"] = "Vous avez donné ~o~%sx %s pour %s à %s",
|
||||
["gave_weapon_withammo"] = "Vous avez donné 1x %s avec ~o~%sx %s à %s",
|
||||
["gave_weapon_hasalready"] = "%s a déjà 1x %s",
|
||||
["gave_weapon_noweapon"] = "%s n'a pas cette arme",
|
||||
["received_weapon"] = "Vous avez reçu 1x %s de %s",
|
||||
["received_weapon_ammo"] = "Vous avez reçu ~o~%sx %s pour votre %s de %s",
|
||||
["received_weapon_withammo"] = "Vous avez reçu 1x %s avec ~o~%sx %s de %s",
|
||||
["received_weapon_hasalready"] = "%s a tenté de vous donner 1x %s, mais vous en aviez déjà un exemplaire",
|
||||
["received_weapon_noweapon"] = "%s a tenté de vous donner des munitions pour %s, mais vous n'avez pas cette arme",
|
||||
["gave_account_money"] = "Vous avez donné $%s (%s) à %s",
|
||||
["received_account_money"] = "Vous avez reçu $%s (%s) de %s",
|
||||
["amount_invalid"] = "Le montant est invalide",
|
||||
["players_nearby"] = "Aucun joueur n'est à proximité",
|
||||
["ex_inv_lim"] = "Action impossible, dépassement du poids maximum de %s",
|
||||
["imp_invalid_quantity"] = "Action impossible, la quantité est invalide",
|
||||
["imp_invalid_amount"] = "Action impossible, le montant est invalide",
|
||||
["threw_standard"] = "Vous avez jeté %sx %s",
|
||||
["threw_account"] = "Vous avez jeté $%s %s",
|
||||
["threw_weapon"] = "Vous avez jeté 1x %s",
|
||||
["threw_weapon_ammo"] = "Vous avez jeté 1x %s avec ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Vous avez déjà cette arme",
|
||||
["threw_cannot_pickup"] = "Votre inventaire est plein, vous ne pouvez donc pas ramasser cela!",
|
||||
["threw_pickup_prompt"] = "Appuyez sur E pour ramasser",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Afficher l'inventaire",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Vous avez reçu votre salaire: $%s",
|
||||
["received_help"] = "Vous avez reçu une aide de l'état: $%s",
|
||||
["company_nomoney"] = "Votre entreprise n'a pas assez d'argent pour vous payer",
|
||||
["received_paycheck"] = "Paiement reçu",
|
||||
["bank"] = "Banque",
|
||||
["account_bank"] = "Banque",
|
||||
["account_black_money"] = "Argent sale",
|
||||
["account_money"] = "Espèces",
|
||||
|
||||
["act_imp"] = "Action impossible",
|
||||
["in_vehicle"] = "Action impossible, le joueur est dans un véhicule",
|
||||
["not_in_vehicle"] = "Action impossible, le joueur n'est pas dans un véhicule",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Téléporter un joueur sur vous",
|
||||
["command_car"] = "Faire appaitre un véhicule",
|
||||
["command_car_car"] = "Nom ou hash du véhicule",
|
||||
["command_cardel"] = "Supprimer les véhicules à proximité",
|
||||
["command_cardel_radius"] = "Supprime tous les véhicules dans un rayon spécifié",
|
||||
["command_repair"] = "Réparer votre véhicule",
|
||||
["command_repair_success"] = "Véhicule réparé avec succès",
|
||||
["command_repair_success_target"] = "Votre véhicule a été réparé par un membre du staff",
|
||||
["command_clear"] = "Effacer le chat",
|
||||
["command_clearall"] = "Effacer le chat de tous les joueurs",
|
||||
["command_clearinventory"] = "Retirer tous les objets de l'inventaire du joueur",
|
||||
["command_clearloadout"] = "Retirer toutes les armes du joueur",
|
||||
["command_freeze"] = "Geler un joueur sur place",
|
||||
["command_unfreeze"] = "Dégeler un joueur",
|
||||
["command_giveaccountmoney"] = "Donner de l'argent à un compte spécifique",
|
||||
["command_giveaccountmoney_account"] = "Compte à créditer",
|
||||
["command_giveaccountmoney_amount"] = "Quantité d'argent à créditer",
|
||||
["command_giveaccountmoney_invalid"] = "Le nom de compte spécifié est invalide",
|
||||
["command_removeaccountmoney"] = "Retirer de l'argent d'un compte spécifique",
|
||||
["command_removeaccountmoney_account"] = "Compte à débiter",
|
||||
["command_removeaccountmoney_amount"] = "Quantité d'argent à débiter",
|
||||
["command_removeaccountmoney_invalid"] = "Le nom de compte spécifié est invalide",
|
||||
["command_giveitem"] = "Donner un objet à un joueur",
|
||||
["command_giveitem_item"] = "Nom de l'objet à donner",
|
||||
["command_giveitem_count"] = "Quantité à donner",
|
||||
["command_giveweapon"] = "Donner une arme à un joueur",
|
||||
["command_giveweapon_weapon"] = "Nom de l'arme à donner",
|
||||
["command_giveweapon_ammo"] = "Quantité de munitions à donner",
|
||||
["command_giveweapon_hasalready"] = "Le joueur a déjà cette arme",
|
||||
["command_giveweaponcomponent"] = "Donner un accessoire d'arme à un joueur",
|
||||
["command_giveweaponcomponent_component"] = "Nom de l'accessoire à donner",
|
||||
["command_giveweaponcomponent_invalid"] = "Le nom de l'accessoire d'arme spécifié est invalide",
|
||||
["command_giveweaponcomponent_hasalready"] = "Le joueur a déjà cet accessoire",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Le joueur n'a pas l'arme associée à cet accessoire",
|
||||
["command_goto"] = "Se téléporter vers un joueur",
|
||||
["command_kill"] = "Tuer un joueur",
|
||||
["command_save"] = "Forcer la sauvegarde des données d'un joueur",
|
||||
["command_saveall"] = "Forcer la sauvegarde des données de tous les joueurs",
|
||||
["command_setaccountmoney"] = "Définir le montant d'argent d'un compte spécifique",
|
||||
["command_setaccountmoney_amount"] = "Montant d'argent à définir",
|
||||
["command_setcoords"] = "Se téléporter à des coordonnées spécifiques",
|
||||
["command_setcoords_x"] = "Valeur de l'axe X",
|
||||
["command_setcoords_y"] = "Valeur de l'axe Y",
|
||||
["command_setcoords_z"] = "Valeur de l'axe Z",
|
||||
["command_setjob"] = "Définir le métier d'un joueur",
|
||||
["command_setjob_job"] = "Nom du métier à définir",
|
||||
["command_setjob_grade"] = "Grade du métier",
|
||||
["command_setjob_invalid"] = "Le métier, le grade, ou les deux sont invalides",
|
||||
["command_setgroup"] = "Définir le groupe de permissions d'un joueur",
|
||||
["command_setgroup_group"] = "Nom du groupe à définir",
|
||||
["commanderror_argumentmismatch"] = "Le nombre d'arguments est invalide (Argument·s donné·s: %s, Argument·s demandé·s: %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Type de données de l'argument #%s invalide (Type donné: texte, Type demandé: nombre)",
|
||||
["commanderror_argumentmismatch_string"] = "Type de données de l'argument #%s invalide (Type donné: nombre, Type demandé: texte)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Argument invalide #%s type de données (passé négatif/zéro, nombre positif requis)",
|
||||
["commanderror_invaliditem"] = "Le nom de l'objet est invalide",
|
||||
["commanderror_invalidweapon"] = "Le nom de l'arme est invalide",
|
||||
["commanderror_console"] = "Cette commande ne peut pas être éxécutée depuis la console",
|
||||
["commanderror_invalidcommand"] = "Commande invalide - /%s",
|
||||
["commanderror_invalidplayerid"] = "Le joueur spécifié n'est pas connecté",
|
||||
["commandgeneric_playerid"] = "Identifiant serveur du joueur",
|
||||
["commandgeneric_dimension"] = "Dimension de la cible",
|
||||
["command_giveammo_noweapon_found"] = "%s n'a pas cette arme",
|
||||
["command_giveammo_weapon"] = "Nom de l'arme",
|
||||
["command_giveammo_ammo"] = "Quantité de munitions",
|
||||
["command_setdim"] = "Définir la dimension d'un joueur",
|
||||
["tpm_nowaypoint"] = "Aucun point n'est défini sur la carte",
|
||||
["tpm_success"] = "Vous avez bien été téléporté",
|
||||
|
||||
["noclip_message"] = "Le mode noclip a été %s",
|
||||
["enabled"] = "~g~activé~s~",
|
||||
["disabled"] = "~r~désactivé~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = " ",
|
||||
["locale_currency"] = "$%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dague",
|
||||
["weapon_bat"] = "Batte",
|
||||
["weapon_battleaxe"] = "Hache de combat",
|
||||
["weapon_bottle"] = "Bouteille",
|
||||
["weapon_crowbar"] = "Pied de biche",
|
||||
["weapon_flashlight"] = "Lampte torche",
|
||||
["weapon_golfclub"] = "Club de golf",
|
||||
["weapon_hammer"] = "Marteau",
|
||||
["weapon_hatchet"] = "Hachette",
|
||||
["weapon_knife"] = "Couteau",
|
||||
["weapon_knuckle"] = "Poing américain",
|
||||
["weapon_machete"] = "Machette",
|
||||
["weapon_nightstick"] = "Matraque",
|
||||
["weapon_wrench"] = "Clé à pipe",
|
||||
["weapon_poolcue"] = "Queue de billard",
|
||||
["weapon_stone_hatchet"] = "Hachette en pierre",
|
||||
["weapon_switchblade"] = "Couteau à cran d'arrêt",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "Pistolet automatique",
|
||||
["weapon_ceramicpistol"] = "Pistolet en céramique",
|
||||
["weapon_combatpistol"] = "Pistolet de combat",
|
||||
["weapon_doubleaction"] = "Revolver à double action",
|
||||
["weapon_navyrevolver"] = "Revolver de marine",
|
||||
["weapon_flaregun"] = "Pistolet de détresse",
|
||||
["weapon_gadgetpistol"] = "Pistolet gadget",
|
||||
["weapon_heavypistol"] = "Pistolet lourd",
|
||||
["weapon_revolver"] = "Revolver lourd",
|
||||
["weapon_revolver_mk2"] = "Revolver lourd MK2",
|
||||
["weapon_marksmanpistol"] = "Pistolet Marksman",
|
||||
["weapon_pistol"] = "Pistolet",
|
||||
["weapon_pistol_mk2"] = "Pistolet MK2",
|
||||
["weapon_pistol50"] = "Pistolet .50",
|
||||
["weapon_snspistol"] = "Pistolet SNS",
|
||||
["weapon_snspistol_mk2"] = "Pistolet SNS MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Atomiseur",
|
||||
["weapon_vintagepistol"] = "Pistolet vintage",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Fusil d'assaut",
|
||||
["weapon_autoshotgun"] = "Fusil à pompe automatique",
|
||||
["weapon_bullpupshotgun"] = "Fusil à pompe Bullpup",
|
||||
["weapon_combatshotgun"] = "Fusil de combat",
|
||||
["weapon_dbshotgun"] = "Fusil à pompe à double canon",
|
||||
["weapon_heavyshotgun"] = "Fusil à pompe lourd",
|
||||
["weapon_musket"] = "Mousquet",
|
||||
["weapon_pumpshotgun"] = "Fusil à pompe",
|
||||
["weapon_pumpshotgun_mk2"] = "Fusil à pompe MK2",
|
||||
["weapon_sawnoffshotgun"] = "Fusil à canon scié",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "SMG s'assaut",
|
||||
["weapon_combatmg"] = "MG de combat",
|
||||
["weapon_combatmg_mk2"] = "MG de combat MK2",
|
||||
["weapon_combatpdw"] = "PDW de combat",
|
||||
["weapon_gusenberg"] = "Balayeuse Gusenberg",
|
||||
["weapon_machinepistol"] = "Pistolet-mitrailleur",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Carabine à rayons",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Fusil avancé",
|
||||
["weapon_assaultrifle"] = "Fusil d'assaut",
|
||||
["weapon_assaultrifle_mk2"] = "Fusil d'assaut MK2",
|
||||
["weapon_bullpuprifle"] = "Fusil Bullpup",
|
||||
["weapon_bullpuprifle_mk2"] = "Fusil Bullpup MK2",
|
||||
["weapon_carbinerifle"] = "Fusil carabine",
|
||||
["weapon_carbinerifle_mk2"] = "Fusil carabine MK2",
|
||||
["weapon_compactrifle"] = "Fusil compacte",
|
||||
["weapon_militaryrifle"] = "Fusil militaire",
|
||||
["weapon_specialcarbine"] = "Carabine spéciale",
|
||||
["weapon_specialcarbine_mk2"] = "Carabine spéciale MK2",
|
||||
["weapon_heavyrifle"] = "Fusil lourd",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Sniper lourd",
|
||||
["weapon_heavysniper_mk2"] = "Sniper lourd MK2",
|
||||
["weapon_marksmanrifle"] = "Fusil Marksman",
|
||||
["weapon_marksmanrifle_mk2"] = "Fusil Marksman MK2",
|
||||
["weapon_sniperrifle"] = "Fusil sniper",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Lanceur compacte",
|
||||
["weapon_firework"] = "Lanceur de feu d'artifice",
|
||||
["weapon_grenadelauncher"] = "Lanceur de grenade",
|
||||
["weapon_hominglauncher"] = "Lanceur de tête chercheuse",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Fusil à rail",
|
||||
["weapon_rpg"] = "Lanceur de rockette",
|
||||
["weapon_rayminigun"] = "Exterminateur",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Détecteur de métaux",
|
||||
["weapon_precisionrifle"] = "Fusil de précision",
|
||||
["weapon_tactilerifle"] = "Carabine tactique",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "Sucre d'orge",
|
||||
["weapon_acidpackage"] = "Paquet d'acide",
|
||||
["weapon_pistolxm3"] = "Pistolet 8 x3m",
|
||||
["weapon_railgunxm3"] = "Fusil électro-magnétique",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Base-ball",
|
||||
["weapon_bzgas"] = "Gaz BZ",
|
||||
["weapon_flare"] = "Fusée éclairante",
|
||||
["weapon_grenade"] = "Grenade",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Jerrycan dangereux",
|
||||
["weapon_molotov"] = "Cocktail Molotov",
|
||||
["weapon_proxmine"] = "Mine de proximité",
|
||||
["weapon_pipebomb"] = "Bombe tuyau",
|
||||
["weapon_snowball"] = "Boule de neige",
|
||||
["weapon_stickybomb"] = "Bombe collante",
|
||||
["weapon_smokegrenade"] = "Gaz lacrymogène",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Extincteur",
|
||||
["weapon_digiscanner"] = "Scanner",
|
||||
["weapon_garbagebag"] = "Sac d'ordures",
|
||||
["weapon_handcuffs"] = "Menottes",
|
||||
["gadget_nightvision"] = "Vision nocturne",
|
||||
["gadget_parachute"] = "Parachute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "Modèle par défaut",
|
||||
["component_knuckle_pimp"] = "le Pimp",
|
||||
["component_knuckle_ballas"] = "le Ballas",
|
||||
["component_knuckle_dollar"] = "le Hustler",
|
||||
["component_knuckle_diamond"] = "le Rock",
|
||||
["component_knuckle_hate"] = "le Hater",
|
||||
["component_knuckle_love"] = "le Lover",
|
||||
["component_knuckle_player"] = "le Joueur",
|
||||
["component_knuckle_king"] = "le Roi",
|
||||
["component_knuckle_vagos"] = "le Vagos",
|
||||
|
||||
["component_luxary_finish"] = "Finition d'arme de luxe",
|
||||
|
||||
["component_handle_default"] = "Poignée par défaut",
|
||||
["component_handle_vip"] = "Poignée VIP",
|
||||
["component_handle_bodyguard"] = "Poignée bodyguard",
|
||||
|
||||
["component_vip_finish"] = "Finition VIP",
|
||||
["component_bodyguard_finish"] = "Finition bodyguard",
|
||||
|
||||
["component_camo_finish"] = "Camouflage numérique",
|
||||
["component_camo_finish2"] = "Camouflage pinceau",
|
||||
["component_camo_finish3"] = "Camouflage des bois",
|
||||
["component_camo_finish4"] = "Camouflage crâne",
|
||||
["component_camo_finish5"] = "Camouflage sessanta Nove",
|
||||
["component_camo_finish6"] = "Camouflage perseus",
|
||||
["component_camo_finish7"] = "Camouflage léopard",
|
||||
["component_camo_finish8"] = "Camouflage zèbre",
|
||||
["component_camo_finish9"] = "Camouflage géométrique",
|
||||
["component_camo_finish10"] = "Camouflage explosif",
|
||||
["component_camo_finish11"] = "Camouflage patriotique",
|
||||
|
||||
["component_camo_slide_finish"] = "Finitions slide à camouflage numérique",
|
||||
["component_camo_slide_finish2"] = "Finitions slide à camouflage pinceau",
|
||||
["component_camo_slide_finish3"] = "Finitions slide à camouflage des bois",
|
||||
["component_camo_slide_finish4"] = "Finitions slide à camouflage crâne",
|
||||
["component_camo_slide_finish5"] = "Finitions slide à camouflage sessanta Nove",
|
||||
["component_camo_slide_finish6"] = "Finitions slide à camouflage perseus",
|
||||
["component_camo_slide_finish7"] = "Finitions slide à camouflage léopard",
|
||||
["component_camo_slide_finish8"] = "Finitions slide à camouflage zèbre",
|
||||
["component_camo_slide_finish9"] = "Finitions slide à camouflage géométrique",
|
||||
["component_camo_slide_finish10"] = "Finitions slide à camouflage explosive",
|
||||
["component_camo_slide_finish11"] = "Finitions slide à camouflage patriotique",
|
||||
|
||||
["component_clip_default"] = "Chargeur par défaut",
|
||||
["component_clip_extended"] = "Chargeur à grande capacité",
|
||||
["component_clip_drum"] = "Chargeur à tambour",
|
||||
["component_clip_box"] = "Chargeur à très grande capacité",
|
||||
|
||||
["component_scope_holo"] = "Viseur holographique",
|
||||
["component_scope_small"] = "Viseur de petite taille",
|
||||
["component_scope_medium"] = "Viseur de taille moyenne",
|
||||
["component_scope_large"] = "Viseur de grande taille",
|
||||
["component_scope"] = "Viseur monté",
|
||||
["component_scope_advanced"] = "Viseur avancé",
|
||||
["component_ironsights"] = "Viseur à marqueurs alignés",
|
||||
|
||||
["component_suppressor"] = "silencieux",
|
||||
["component_compensator"] = "compensateur",
|
||||
|
||||
["component_muzzle_flat"] = "Frein plat",
|
||||
["component_muzzle_tactical"] = "Frein tactique",
|
||||
["component_muzzle_fat"] = "Frein large",
|
||||
["component_muzzle_precision"] = "Frein de précision",
|
||||
["component_muzzle_heavy"] = "Frein polyvalent",
|
||||
["component_muzzle_slanted"] = "Frein incliné",
|
||||
["component_muzzle_split"] = "Frein fendu",
|
||||
["component_muzzle_squared"] = "Frein carré",
|
||||
|
||||
["component_flashlight"] = "lampe torche",
|
||||
["component_grip"] = "poignée",
|
||||
|
||||
["component_barrel_default"] = "Canon par défaut",
|
||||
["component_barrel_heavy"] = "Canon lourd",
|
||||
|
||||
["component_ammo_tracer"] = "Munition traceuse",
|
||||
["component_ammo_incendiary"] = "Munition incendiaire",
|
||||
["component_ammo_hollowpoint"] = "Munition à pointe creuse",
|
||||
["component_ammo_fmj"] = "Munition fMJ",
|
||||
["component_ammo_armor"] = "Munition perforante",
|
||||
["component_ammo_explosive"] = "Munition perforante et Munition incendiaire",
|
||||
|
||||
["component_shells_default"] = "Coque par défaut",
|
||||
["component_shells_incendiary"] = "Coque souffle de dragon",
|
||||
["component_shells_armor"] = "Coque à chevrotine en acier",
|
||||
["component_shells_hollowpoint"] = "Coque à fléchettes",
|
||||
["component_shells_explosive"] = "Coque à limaces explosives",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "cartouche(s)",
|
||||
["ammo_shells"] = "obus",
|
||||
["ammo_charge"] = "charge·s",
|
||||
["ammo_petrol"] = "jerrican d'essence",
|
||||
["ammo_firework"] = "feu·x d'artifice",
|
||||
["ammo_rockets"] = "roquette·s",
|
||||
["ammo_grenadelauncher"] = "grenade·s",
|
||||
["ammo_grenade"] = "grenade·s",
|
||||
["ammo_stickybomb"] = "bombe·s",
|
||||
["ammo_pipebomb"] = "bombe·s",
|
||||
["ammo_smokebomb"] = "bombe·s",
|
||||
["ammo_molotov"] = "cocktail·s",
|
||||
["ammo_proxmine"] = "mine·s",
|
||||
["ammo_bzgas"] = "grenade·s",
|
||||
["ammo_ball"] = "balle·s",
|
||||
["ammo_snowball"] = "boule·s de neige",
|
||||
["ammo_flare"] = "fusée·s éclairante·s",
|
||||
["ammo_flaregun"] = "fusée·s",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "skin par défaut",
|
||||
["tint_green"] = "skin vert",
|
||||
["tint_gold"] = "skin doré",
|
||||
["tint_pink"] = "skin rose",
|
||||
["tint_army"] = "skin militaire",
|
||||
["tint_lspd"] = "skin bleu",
|
||||
["tint_orange"] = "skin orange",
|
||||
["tint_platinum"] = "skin platine",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "noir classique",
|
||||
["tint_classic_gray"] = "gris classique",
|
||||
["tint_classic_two_tone"] = "deux tons classiques",
|
||||
["tint_classic_white"] = "blanc classique",
|
||||
["tint_classic_beige"] = "beige classique",
|
||||
["tint_classic_green"] = "vert classique",
|
||||
["tint_classic_blue"] = "bleu classique",
|
||||
["tint_classic_earth"] = "terre classique",
|
||||
["tint_classic_brown_black"] = "marron noir classique",
|
||||
["tint_contrast_red"] = "rouge contrasté",
|
||||
["tint_contrast_blue"] = "bleu contrasté",
|
||||
["tint_contrast_yellow"] = "jaune contrasté",
|
||||
["tint_contrast_orange"] = "orange contrasté",
|
||||
["tint_bold_pink"] = "rose audacieux",
|
||||
["tint_bold_purple_yellow"] = "violet jaune audacieux",
|
||||
["tint_bold_orange"] = "orange audacieux",
|
||||
["tint_bold_green_purple"] = "vert violet audacieux",
|
||||
["tint_bold_red_feat"] = "rouge audacieux feat",
|
||||
["tint_bold_green_feat"] = "vert audacieux feat",
|
||||
["tint_bold_cyan_feat"] = "cyan audacieux feat",
|
||||
["tint_bold_yellow_feat"] = "jaune audacieux feat",
|
||||
["tint_bold_red_white"] = "rouge blanc audacieux",
|
||||
["tint_bold_blue_white"] = "bleu blanc audacieux",
|
||||
["tint_metallic_gold"] = "or métallique",
|
||||
["tint_metallic_platinum"] = "platine métallique",
|
||||
["tint_metallic_gray_lilac"] = "gris lilas métallique",
|
||||
["tint_metallic_purple_lime"] = "violet lime métallique",
|
||||
["tint_metallic_red"] = "rouge métallique",
|
||||
["tint_metallic_green"] = "vert métallique",
|
||||
["tint_metallic_blue"] = "bleu métallique",
|
||||
["tint_metallic_white_aqua"] = "blanc aqua métallique",
|
||||
["tint_metallic_red_yellow"] = "rouge jaune métallique",
|
||||
}
|
||||
409
resources/[core]/es_extended/locales/he.lua
Normal file
409
resources/[core]/es_extended/locales/he.lua
Normal file
@@ -0,0 +1,409 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "מלאי ( משקל %s / %s )",
|
||||
["use"] = "השתמש",
|
||||
["give"] = "תן",
|
||||
["remove"] = "זרוק",
|
||||
["return"] = "חזור",
|
||||
["give_to"] = "תן ל",
|
||||
["amount"] = "כמות",
|
||||
["giveammo"] = "תן תחמושת",
|
||||
["amountammo"] = "כמות תחמושת",
|
||||
["noammo"] = "לא מספיק!",
|
||||
["gave_item"] = "ניתן %sx %s ל %s",
|
||||
["received_item"] = "קיבלת %sx %s מ %s",
|
||||
["gave_weapon"] = "ניתן %s ל %s",
|
||||
["gave_weapon_ammo"] = "ניתן ~o~%sx %s ל %s ל %s",
|
||||
["gave_weapon_withammo"] = "ניתן %s עם ~o~%sx %s ל %s",
|
||||
["gave_weapon_hasalready"] = "%s כבר יש לו %s",
|
||||
["gave_weapon_noweapon"] = "%s אין לו את הנשק הזה",
|
||||
["received_weapon"] = "קיבלת %s מ %s",
|
||||
["received_weapon_ammo"] = "קיבלת ~o~%sx %s ל %s שלך מ %s",
|
||||
["received_weapon_withammo"] = "קיבלת %s עם ~o~%sx %s מ %s",
|
||||
["received_weapon_hasalready"] = "%s ניסה לתת לך %s, אך יש לך כבר נשק זה",
|
||||
["received_weapon_noweapon"] = "%s ניסה לתת לך תחמושת ל %s, אך אין לך נשק זה",
|
||||
["gave_account_money"] = "ניתן $%s (%s) ל %s",
|
||||
["received_account_money"] = "קיבלת $%s (%s) מ %s",
|
||||
["amount_invalid"] = "כמות לא חוקית",
|
||||
["players_nearby"] = "אין שחקנים קרובים",
|
||||
["ex_inv_lim"] = "לא ניתן לבצע פעולה, חורג מהמשקל המרבי של %s",
|
||||
["imp_invalid_quantity"] = "לא ניתן לבצע פעולה, הכמות אינה חוקית",
|
||||
["imp_invalid_amount"] = "לא ניתן לבצע פעולה, הסכום אינו חוקי",
|
||||
["threw_standard"] = "זורק %sx %s",
|
||||
["threw_account"] = "זורק $%s %s",
|
||||
["threw_weapon"] = "זורק %s",
|
||||
["threw_weapon_ammo"] = "זורק %s עם ~o~%sx %s",
|
||||
["threw_weapon_already"] = "כבר יש לך נשק זה",
|
||||
["threw_cannot_pickup"] = "המלאי מלא, לא ניתן לאסוף!",
|
||||
["threw_pickup_prompt"] = "לחץ E כדי לאסוף",
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "הצג מלאי",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "קיבלת שכר: $%s",
|
||||
["received_help"] = "קיבלת הטבה: $%s",
|
||||
["company_nomoney"] = "החברה בה אתה עובד אינה יכולה לשלם לך את השכר",
|
||||
["received_paycheck"] = "קיבלת תלוש",
|
||||
["bank"] = "בנק מעץ",
|
||||
["account_bank"] = "בנק",
|
||||
["account_black_money"] = "כסף מטונף",
|
||||
["account_money"] = "מזומן",
|
||||
|
||||
["act_imp"] = "לא ניתן לבצע פעולה",
|
||||
["in_vehicle"] = "לא ניתן לבצע פעולה, השחקן ברכב",
|
||||
["not_in_vehicle"] = "לא ניתן לבצע פעולה, השחקן לא ברכב",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "הבא שחקן אליך",
|
||||
["command_car"] = "צור רכב",
|
||||
["command_car_car"] = "דגם הרכב או האש",
|
||||
["command_cardel"] = "הסר רכבים בקרבת מקום",
|
||||
["command_cardel_radius"] = "הסר את כל הרכבים ברדיוס המצוין",
|
||||
["command_repair"] = "תקן את הרכב שלך",
|
||||
["command_repair_success"] = "רכב תוקן בהצלחה",
|
||||
["command_repair_success_target"] = "אדמין תיקן לך את הרכב",
|
||||
["command_clear"] = 'נקה טקסט צ"אט',
|
||||
["command_clearall"] = 'נקה טקסט צ"אט לכל השחקנים',
|
||||
["command_clearinventory"] = "הסר את כל הפריטים מהמלאי של השחקן",
|
||||
["command_clearloadout"] = "הסר את כל הנשקים מהשחקן",
|
||||
["command_freeze"] = "הקפא שחקן",
|
||||
["command_unfreeze"] = "בטל הקפאה של שחקן",
|
||||
["command_giveaccountmoney"] = "תן כסף לחשבון מסוים",
|
||||
["command_giveaccountmoney_account"] = "חשבון להוספה",
|
||||
["command_giveaccountmoney_amount"] = "כמות להוספה",
|
||||
["command_giveaccountmoney_invalid"] = "שם חשבון לא חוקי",
|
||||
["command_removeaccountmoney"] = "הסר כסף מחשבון מסוים",
|
||||
["command_removeaccountmoney_account"] = "חשבון להסרה ממנו",
|
||||
["command_removeaccountmoney_amount"] = "כמות להסרה",
|
||||
["command_removeaccountmoney_invalid"] = "שם חשבון לא חוקי",
|
||||
["command_giveitem"] = "תן לשחקן פריט",
|
||||
["command_giveitem_item"] = "שם הפריט",
|
||||
["command_giveitem_count"] = "כמות",
|
||||
["command_giveweapon"] = "תן לשחקן נשק",
|
||||
["command_giveweapon_weapon"] = "שם הנשק",
|
||||
["command_giveweapon_ammo"] = "כמות תחמושת",
|
||||
["command_giveweapon_hasalready"] = "לשחקן כבר יש נשק זה",
|
||||
["command_giveweaponcomponent"] = "תן רכיב נשק לשחקן",
|
||||
["command_giveweaponcomponent_component"] = "שם הרכיב",
|
||||
["command_giveweaponcomponent_invalid"] = "רכיב נשק לא חוקי",
|
||||
["command_giveweaponcomponent_hasalready"] = "לשחקן כבר יש רכיב נשק זה",
|
||||
["command_giveweaponcomponent_missingweapon"] = "לשחקן אין נשק זה",
|
||||
["command_goto"] = "התעבר אל שחקן",
|
||||
["command_kill"] = "הרוג שחקן",
|
||||
["command_save"] = "שמור נתונים של שחקן בכפיה",
|
||||
["command_saveall"] = "שמור נתונים של כל השחקנים",
|
||||
["command_setaccountmoney"] = "קבע כמות כסף בחשבון מסוים",
|
||||
["command_setaccountmoney_amount"] = "כמות כסף להגדרה",
|
||||
["command_setcoords"] = "התעבר לקואורדינטות מסוימות",
|
||||
["command_setcoords_x"] = "ערך x",
|
||||
["command_setcoords_y"] = "ערך y",
|
||||
["command_setcoords_z"] = "ערך z",
|
||||
["command_setjob"] = "קבע משרה לשחקן",
|
||||
["command_setjob_job"] = "שם המשרה",
|
||||
["command_setjob_grade"] = "דרגת המשרה",
|
||||
["command_setjob_invalid"] = "המשרה, הדרגה או שניהם אינם חוקיים",
|
||||
["command_setgroup"] = "קבע קבוצת הרשאות לשחקן",
|
||||
["command_setgroup_group"] = "שם קבוצת הפקודות",
|
||||
["commanderror_argumentmismatch"] = "כמות וסוגי הארגומנטים אינם תואמים (נשלח %s, נדרש %s)",
|
||||
["commanderror_argumentmismatch_number"] = "טיפוס ארגומנט #%s לא תקין (נשלח מחרוזת, נדרש מספר)",
|
||||
["commanderror_argumentmismatch_string"] = "טיפוס ארגומנט #%s לא תקין (נשלח מספר, נדרש מחרוזת)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "טיפוס ארגומנט #%s לא תקין (נשלח שלילי/אפס, נדרש מספר חיובי)",
|
||||
["commanderror_invaliditem"] = "שם פריט לא חוקי",
|
||||
["commanderror_invalidweapon"] = "נשק לא חוקי",
|
||||
["commanderror_console"] = "לא ניתן להפעיל פקודה מהקונסול",
|
||||
["commanderror_invalidcommand"] = "פקודה לא חוקית - /%s",
|
||||
["commanderror_invalidplayerid"] = "אין שחקן עם מזהה זה מחובר",
|
||||
["commandgeneric_playerid"] = "מזהה השחקן בשרת",
|
||||
["command_giveammo_noweapon_found"] = "ל-%s אין נשק כזה",
|
||||
["command_giveammo_weapon"] = "שם הנשק",
|
||||
["command_giveammo_ammo"] = "כמות תחמושת",
|
||||
["tpm_nowaypoint"] = "אין נקודת דרך מוגדרת",
|
||||
["tpm_success"] = "הועברת בהצלחה",
|
||||
|
||||
["noclip_message"] = "מצב Noclip %s",
|
||||
["enabled"] = "~g~מאופשר~s~",
|
||||
["disabled"] = "~r~מנוטרל~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "₪%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "סכין",
|
||||
["weapon_bat"] = "כותרת",
|
||||
["weapon_battleaxe"] = "גרזן קרב",
|
||||
["weapon_bottle"] = "בקבוק",
|
||||
["weapon_crowbar"] = "מפתח ברזל",
|
||||
["weapon_flashlight"] = "פנס יד",
|
||||
["weapon_golfclub"] = "מקל גולף",
|
||||
["weapon_hammer"] = "פטיש",
|
||||
["weapon_hatchet"] = "גרזן",
|
||||
["weapon_knife"] = "סכין",
|
||||
["weapon_knuckle"] = "עצמאות",
|
||||
["weapon_machete"] = 'מאצ"טה',
|
||||
["weapon_nightstick"] = "מקל לילה",
|
||||
["weapon_wrench"] = "מפתח אינגליזי",
|
||||
["weapon_poolcue"] = "מקל בריכה",
|
||||
["weapon_stone_hatchet"] = "גרזן אבן",
|
||||
["weapon_switchblade"] = "סכין קפיצית",
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "אקדח AP",
|
||||
["weapon_ceramicpistol"] = "אקדח קרמי",
|
||||
["weapon_combatpistol"] = "אקדח קרב",
|
||||
["weapon_doubleaction"] = "רבולבר פעולה כפולה",
|
||||
["weapon_navyrevolver"] = "רבולבר צי",
|
||||
["weapon_flaregun"] = "אקדח זיקוקים",
|
||||
["weapon_gadgetpistol"] = "אקדח חומרה",
|
||||
["weapon_heavypistol"] = "אקדח כבד",
|
||||
["weapon_revolver"] = "רבולבר כבד",
|
||||
["weapon_revolver_mk2"] = "רבולבר כבד MK2",
|
||||
["weapon_marksmanpistol"] = "אקדח צלף",
|
||||
["weapon_pistol"] = "אקדח",
|
||||
["weapon_pistol_mk2"] = "אקדח MK2",
|
||||
["weapon_pistol50"] = "אקדח .50",
|
||||
["weapon_snspistol"] = "אקדח SNS",
|
||||
["weapon_snspistol_mk2"] = "אקדח SNS MK2",
|
||||
["weapon_stungun"] = "טייזר",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "אקדח וינטג",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "רובה סטורם",
|
||||
["weapon_autoshotgun"] = "רובה אוטומטי",
|
||||
["weapon_bullpupshotgun"] = "רובה Bullpup",
|
||||
["weapon_combatshotgun"] = "רובה קרב",
|
||||
["weapon_dbshotgun"] = "רובה קנה כפול",
|
||||
["weapon_heavyshotgun"] = "רובה כבד",
|
||||
["weapon_musket"] = "רובה חלילי",
|
||||
["weapon_pumpshotgun"] = "רובה פומפה",
|
||||
["weapon_pumpshotgun_mk2"] = "רובה פומפה MK2",
|
||||
["weapon_sawnoffshotgun"] = "רובה חתוך",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "רובה סטורם SMG",
|
||||
["weapon_combatmg"] = "רובה סטורם MG",
|
||||
["weapon_combatmg_mk2"] = "רובה סטורם MG MK2",
|
||||
["weapon_combatpdw"] = "רובה סטורם PDW",
|
||||
["weapon_gusenberg"] = "רובה גוזנברג",
|
||||
["weapon_machinepistol"] = "אקדח מכונה",
|
||||
["weapon_mg"] = "רובה מכונה",
|
||||
["weapon_microsmg"] = "רובה מכונה מיקרו",
|
||||
["weapon_minismg"] = "רובה מכונה מיני",
|
||||
["weapon_smg"] = "רובה מכונה",
|
||||
["weapon_smg_mk2"] = "רובה מכונה MK2",
|
||||
["weapon_raycarbine"] = "רובה אור",
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "רובה מתקדם",
|
||||
["weapon_assaultrifle"] = "רובה סטורם",
|
||||
["weapon_assaultrifle_mk2"] = "רובה סטורם MK2",
|
||||
["weapon_bullpuprifle"] = "רובה Bullpup",
|
||||
["weapon_bullpuprifle_mk2"] = "רובה Bullpup MK2",
|
||||
["weapon_carbinerifle"] = "רובה קרבין",
|
||||
["weapon_carbinerifle_mk2"] = "רובה קרבין MK2",
|
||||
["weapon_compactrifle"] = "רובה קומפקטי",
|
||||
["weapon_militaryrifle"] = "רובה צבאי",
|
||||
["weapon_specialcarbine"] = "רובה קרבין מיוחד",
|
||||
["weapon_specialcarbine_mk2"] = "רובה קרבין מיוחד MK2",
|
||||
["weapon_heavyrifle"] = "רובה כבד",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "רובה צלפים כבד",
|
||||
["weapon_heavysniper_mk2"] = "רובה צלפים כבד MK2",
|
||||
["weapon_marksmanrifle"] = "רובה צלפים",
|
||||
["weapon_marksmanrifle_mk2"] = "רובה צלפים MK2",
|
||||
["weapon_sniperrifle"] = "רובה צלפים",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "משגר קומפקטי",
|
||||
["weapon_firework"] = "משגר זיקוקים",
|
||||
["weapon_grenadelauncher"] = "משגר רימונים",
|
||||
["weapon_hominglauncher"] = "משגר חפצים",
|
||||
["weapon_minigun"] = "מיניגן",
|
||||
["weapon_railgun"] = "רובה רכבת",
|
||||
["weapon_rpg"] = "משגר רקטות",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "גלאי מתכות",
|
||||
["weapon_precisionrifle"] = "רובה דיוק",
|
||||
["weapon_tactilerifle"] = "רובה טקטילי",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "מקל סוכר",
|
||||
["weapon_acidpackage"] = "חומצה",
|
||||
["weapon_pistolxm3"] = "אקדח xm3",
|
||||
["weapon_railgunxm3"] = "רובה רכבת xm3",
|
||||
-- Thrown
|
||||
["weapon_ball"] = "כדור בייסבול",
|
||||
["weapon_bzgas"] = "גז BZ",
|
||||
["weapon_flare"] = "זיקוק",
|
||||
["weapon_grenade"] = "רימון",
|
||||
["weapon_petrolcan"] = "גררון דלק",
|
||||
["weapon_hazardcan"] = "גררון מסוכן",
|
||||
["weapon_molotov"] = "קוקטייל מולוטוב",
|
||||
["weapon_proxmine"] = "מוקש קרבה",
|
||||
["weapon_pipebomb"] = "פצצת צינור",
|
||||
["weapon_snowball"] = "כדור שלג",
|
||||
["weapon_stickybomb"] = "פצצה דביקה",
|
||||
["weapon_smokegrenade"] = "גז דמעות",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "מטף כיבוי",
|
||||
["weapon_digiscanner"] = "סורק דיגיטלי",
|
||||
["weapon_garbagebag"] = "שקית זבל",
|
||||
["weapon_handcuffs"] = "כפפות",
|
||||
["gadget_nightvision"] = "ראיה לילית",
|
||||
["gadget_parachute"] = "צניחה",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "דגם בסיסי",
|
||||
["component_knuckle_pimp"] = "הפימפ",
|
||||
["component_knuckle_ballas"] = "הבאלס",
|
||||
["component_knuckle_dollar"] = "ההאסטלר",
|
||||
["component_knuckle_diamond"] = "הרוק",
|
||||
["component_knuckle_hate"] = "השונא",
|
||||
["component_knuckle_love"] = "האוהב",
|
||||
["component_knuckle_player"] = "השחקן",
|
||||
["component_knuckle_king"] = "המלך",
|
||||
["component_knuckle_vagos"] = "הואגוס",
|
||||
["component_luxary_finish"] = "גימור מפואר",
|
||||
|
||||
["component_handle_default"] = "ידית רגילה",
|
||||
["component_handle_vip"] = "ידית VIP",
|
||||
["component_handle_bodyguard"] = "ידית שומר גוף",
|
||||
|
||||
["component_vip_finish"] = "גימור VIP",
|
||||
["component_bodyguard_finish"] = "גימור שומר גוף",
|
||||
|
||||
["component_camo_finish"] = "צפיעה דיגיטלית",
|
||||
["component_camo_finish2"] = "צפיעה צבעים מעורבים",
|
||||
["component_camo_finish3"] = "צפיעה יערותית",
|
||||
["component_camo_finish4"] = "צפיעה גולגולת",
|
||||
["component_camo_finish5"] = "צפיעה Sessanta Nove",
|
||||
["component_camo_finish6"] = "צפיעה Perseus",
|
||||
["component_camo_finish7"] = "צפיעה נמרים",
|
||||
["component_camo_finish8"] = "צפיעה זברה",
|
||||
["component_camo_finish9"] = "צפיעה גיאומטרית",
|
||||
["component_camo_finish10"] = "צפיעה Boom",
|
||||
["component_camo_finish11"] = "צפיעה פטריוטית",
|
||||
|
||||
["component_camo_slide_finish"] = "צפיעה דיגיטלית למחצלה",
|
||||
["component_camo_slide_finish2"] = "צפיעה צבעים מעורבים למחצלה",
|
||||
["component_camo_slide_finish3"] = "צפיעה יערותית למחצלה",
|
||||
["component_camo_slide_finish4"] = "צפיעה גולגולת למחצלה",
|
||||
["component_camo_slide_finish5"] = "צפיעה Sessanta Nove למחצלה",
|
||||
["component_camo_slide_finish6"] = "צפיעה Perseus למחצלה",
|
||||
["component_camo_slide_finish7"] = "צפיעה נמרים למחצלה",
|
||||
["component_camo_slide_finish8"] = "צפיעה זברה למחצלה",
|
||||
["component_camo_slide_finish9"] = "צפיעה גיאומטרית למחצלה",
|
||||
["component_camo_slide_finish10"] = "צפיעה Boom למחצלה",
|
||||
["component_camo_slide_finish11"] = "צפיעה פטריוטית למחצלה",
|
||||
["component_clip_default"] = "מחצירה רגילה",
|
||||
["component_clip_extended"] = "מחצירה מורחבת",
|
||||
["component_clip_drum"] = "מחצירה תוף",
|
||||
["component_clip_box"] = "מחצירה קופסה",
|
||||
|
||||
["component_scope_holo"] = "כוונת הולוגרפית",
|
||||
["component_scope_small"] = "כוונת קטנה",
|
||||
["component_scope_medium"] = "כוונת בינונית",
|
||||
["component_scope_large"] = "כוונת גדולה",
|
||||
["component_scope"] = "כוונת מותקנת",
|
||||
["component_scope_advanced"] = "כוונת מתקדמת",
|
||||
["component_ironsights"] = "כוונת ברזל",
|
||||
|
||||
["component_suppressor"] = "מרגיע",
|
||||
["component_compensator"] = "פיצוי",
|
||||
|
||||
["component_muzzle_flat"] = "מרסור שטוח",
|
||||
["component_muzzle_tactical"] = "מרסור טקטי",
|
||||
["component_muzzle_fat"] = "מרסור עגלגל",
|
||||
["component_muzzle_precision"] = "מרסור מדויק",
|
||||
["component_muzzle_heavy"] = "מרסור כבד",
|
||||
["component_muzzle_slanted"] = "מרסור מוטה",
|
||||
["component_muzzle_split"] = "מרסור פצול",
|
||||
["component_muzzle_squared"] = "מרסור מרובע",
|
||||
|
||||
["component_flashlight"] = "פנס",
|
||||
["component_grip"] = "אחיזה",
|
||||
|
||||
["component_barrel_default"] = "עצם רגיל",
|
||||
["component_barrel_heavy"] = "עצם כבד",
|
||||
|
||||
["component_ammo_tracer"] = "כדורים עקובים",
|
||||
["component_ammo_incendiary"] = "כדורים מדליקים",
|
||||
["component_ammo_hollowpoint"] = "כדורים חדים",
|
||||
["component_ammo_fmj"] = "כדורים FMJ",
|
||||
["component_ammo_armor"] = "כדורים חודרי משרוע",
|
||||
["component_ammo_explosive"] = "כדורים חודרי משרוע מדליקים",
|
||||
|
||||
["component_shells_default"] = "גלעינים רגילים",
|
||||
["component_shells_incendiary"] = "גלעינים מדליקים",
|
||||
["component_shells_armor"] = "גלעינים פלדלים",
|
||||
["component_shells_hollowpoint"] = "גלעינים חדים",
|
||||
["component_shells_explosive"] = "גלעינים מתפוצצים",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "כדור(ים)",
|
||||
["ammo_shells"] = "גלעין(ים)",
|
||||
["ammo_charge"] = "טעינה",
|
||||
["ammo_petrol"] = "גלונים של דלק",
|
||||
["ammo_firework"] = "זיקוק(ים)",
|
||||
["ammo_rockets"] = "טיל(ים)",
|
||||
["ammo_grenadelauncher"] = "רימון(ים)",
|
||||
["ammo_grenade"] = "רימון(ים)",
|
||||
["ammo_stickybomb"] = "פצצה/ות",
|
||||
["ammo_pipebomb"] = "פצצה/ות",
|
||||
["ammo_smokebomb"] = "פצצה/ות",
|
||||
["ammo_molotov"] = "קוקטייל(ים)",
|
||||
["ammo_proxmine"] = "מוקש/ים",
|
||||
["ammo_bzgas"] = "פח/ית",
|
||||
["ammo_ball"] = "כדור/ים",
|
||||
["ammo_snowball"] = "כדור/ים שלג",
|
||||
["ammo_flare"] = "זיקוק/ים",
|
||||
["ammo_flaregun"] = "זיקוק/ים",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "צבע רגיל",
|
||||
["tint_green"] = "צבע ירוק",
|
||||
["tint_gold"] = "צבע זהב",
|
||||
["tint_pink"] = "צבע ורוד",
|
||||
["tint_army"] = "צבע צבאי",
|
||||
["tint_lspd"] = "צבע כחול",
|
||||
["tint_orange"] = "צבע כתום",
|
||||
["tint_platinum"] = "צבע פלטינה",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "שחור קלאסי",
|
||||
["tint_classic_gray"] = "אפור קלאסי",
|
||||
["tint_classic_two_tone"] = "קלאסי דו-גוני",
|
||||
["tint_classic_white"] = "לבן קלאסי",
|
||||
["tint_classic_beige"] = "בז' קלאסי",
|
||||
["tint_classic_green"] = "ירוק קלאסי",
|
||||
["tint_classic_blue"] = "כחול קלאסי",
|
||||
["tint_classic_earth"] = "אדמה קלאסית",
|
||||
["tint_classic_brown_black"] = "חום שחור קלאסי",
|
||||
["tint_contrast_red"] = "אדום קונטרסט",
|
||||
["tint_contrast_blue"] = "כחול קונטרסט",
|
||||
["tint_contrast_yellow"] = "צהוב קונטרסט",
|
||||
["tint_contrast_orange"] = "כתום קונטרסט",
|
||||
["tint_bold_pink"] = "ורוד נועז",
|
||||
["tint_bold_purple_yellow"] = "סגול צהוב נועז",
|
||||
["tint_bold_orange"] = "כתום נועז",
|
||||
["tint_bold_green_purple"] = "ירוק סגול נועז",
|
||||
["tint_bold_red_feat"] = "אדום נועז feat",
|
||||
["tint_bold_green_feat"] = "ירוק נועז feat",
|
||||
["tint_bold_cyan_feat"] = "סיאן נועז feat",
|
||||
["tint_bold_yellow_feat"] = "צהוב נועז feat",
|
||||
["tint_bold_red_white"] = "אדום לבן נועז",
|
||||
["tint_bold_blue_white"] = "כחול לבן נועז",
|
||||
["tint_metallic_gold"] = "זהב מתכתי",
|
||||
["tint_metallic_platinum"] = "פלטינה מתכתית",
|
||||
["tint_metallic_gray_lilac"] = "אפור לילך מתכתי",
|
||||
["tint_metallic_purple_lime"] = "סגול ליים מתכתי",
|
||||
["tint_metallic_red"] = "אדום מתכתי",
|
||||
["tint_metallic_green"] = "ירוק מתכתי",
|
||||
["tint_metallic_blue"] = "כחול מתכתי",
|
||||
["tint_metallic_white_aqua"] = "לבן aqua מתכתי",
|
||||
["tint_metallic_red_yellow"] = "אדום צהוב מתכתי",
|
||||
}
|
||||
411
resources/[core]/es_extended/locales/hu.lua
Normal file
411
resources/[core]/es_extended/locales/hu.lua
Normal file
@@ -0,0 +1,411 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventory ( Súly %s / %s )",
|
||||
["use"] = "Használ",
|
||||
["give"] = "Átad",
|
||||
["remove"] = "Eldob",
|
||||
["return"] = "Visszatérés",
|
||||
["give_to"] = "Adni valakinek",
|
||||
["amount"] = "Mennyiség",
|
||||
["giveammo"] = "Lőszer adás",
|
||||
["amountammo"] = "Lőszer mennyiség",
|
||||
["noammo"] = "Nincsen több lövedéked!",
|
||||
["gave_item"] = "Átadtál: %sx %s neki: %s",
|
||||
["received_item"] = "Kaptál: %sx %s töle: %s",
|
||||
["gave_weapon"] = "Átadtál: %s neki: %s",
|
||||
["gave_weapon_ammo"] = "Átadtál ~o~%sx %s %s neki: %s",
|
||||
["gave_weapon_withammo"] = "Átadtál %s ~o~%sx %s neki: %s",
|
||||
["gave_weapon_hasalready"] = "%s már rendelkezik %s",
|
||||
["gave_weapon_noweapon"] = "%s nincsen ilyen fegyere",
|
||||
["received_weapon"] = "Kaptál: %s töle: %s",
|
||||
["received_weapon_ammo"] = "Kaptál ~o~%sx %s %s töle: %s",
|
||||
["received_weapon_withammo"] = "Kaptál %s ~o~%sx %s töle: %s",
|
||||
["received_weapon_hasalready"] = "%s megpróbálta átadni a következöt: %s, nem már van rendelkezel egy ilyennel",
|
||||
["received_weapon_noweapon"] = "%s átakart adni %s, de nincsen ilyen fegyvered",
|
||||
["gave_account_money"] = "Átadtál: $%s (%s) neki: %s",
|
||||
["received_account_money"] = "Kaptál: $%s (%s) töle: %s",
|
||||
["amount_invalid"] = "Érvénytelen mennyiség",
|
||||
["players_nearby"] = "Nincsen játékos a közeledben",
|
||||
["ex_inv_lim"] = "Nincsen elég szabad helyed %s",
|
||||
["imp_invalid_quantity"] = "Érvénytelen mennyiség",
|
||||
["imp_invalid_amount"] = "Érvénytelen összeg",
|
||||
["threw_standard"] = "Kidobtál: %sx %s",
|
||||
["threw_account"] = "Kidobtál: $%s %s",
|
||||
["threw_weapon"] = "Kidobtál: %s",
|
||||
["threw_weapon_ammo"] = "Kidobtál: %s ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Van már ilyen fegyvered",
|
||||
["threw_cannot_pickup"] = "Nincsen elég szabad helyed",
|
||||
["threw_pickup_prompt"] = "E hogy felvedd",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Leltár mutatása",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Megkaptad a fizetésed: $%s",
|
||||
["received_help"] = "Megkaptad a segélyt: $%s",
|
||||
["company_nomoney"] = "Nem kaptál fizetést, mert a frakciónak nincs elég pénze!",
|
||||
["received_paycheck"] = "Fizetésed érkezett!",
|
||||
["bank"] = "maze Bank",
|
||||
["account_bank"] = "bank",
|
||||
["account_black_money"] = "Piszkos pénz",
|
||||
["account_money"] = "Készpénz",
|
||||
|
||||
["act_imp"] = "Érvénytelen mennyiség",
|
||||
["in_vehicle"] = "Nem tudod átadni, mivel benne ül a jármüben",
|
||||
["not_in_vehicle"] = "Cannot Perform Action, Player isn't in a vehicle",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Játékos magadhoz teleportálása",
|
||||
["command_car"] = "Jármű lehívása",
|
||||
["command_car_car"] = "Jármű név vagy hash",
|
||||
["command_cardel"] = "Közeli járművek törlése",
|
||||
["command_cardel_radius"] = "Megadott radiusban lévő járművek törlése",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "Chat ürítése",
|
||||
["command_clearall"] = "Chat ürítése minden játékosnál",
|
||||
["command_clearinventory"] = "Minden tárgy törlése a játékos inventoryból",
|
||||
["command_clearloadout"] = "Minden fegyver elvétele a játékostól",
|
||||
["command_freeze"] = "Játékos fagyasztása",
|
||||
["command_unfreeze"] = "Játékos kiolvasztása",
|
||||
["command_giveaccountmoney"] = "Pénz adás a megadott típusban",
|
||||
["command_giveaccountmoney_account"] = "Típus",
|
||||
["command_giveaccountmoney_amount"] = "Mennyiség",
|
||||
["command_giveaccountmoney_invalid"] = "Megadott típus hibás",
|
||||
["command_giveitem"] = "Tárgy adás a játékosnak",
|
||||
["command_giveitem_item"] = "Tárgy neve",
|
||||
["command_giveitem_count"] = "Mennyiség",
|
||||
["command_giveweapon"] = "Fegyver adás játékosnak",
|
||||
["command_giveweapon_weapon"] = "Fegyver neve",
|
||||
["command_giveweapon_ammo"] = "Lőszer mennyiség",
|
||||
["command_giveweapon_hasalready"] = "Játékosnak már van ilyen fegyvere",
|
||||
["command_giveweaponcomponent"] = "Fegyver kiegészítő adás a játékosnak",
|
||||
["command_giveweaponcomponent_component"] = "Kiegészítő neve",
|
||||
["command_giveweaponcomponent_invalid"] = "Érvénytelen fegyver kiegészítő",
|
||||
["command_giveweaponcomponent_hasalready"] = "Játékosnak már van ilyen fegyver kiegészítője",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Játékosnak nincs ilyen fegyvere",
|
||||
["command_goto"] = "Teleportálás játékoshoz",
|
||||
["command_kill"] = "Játékos megölése",
|
||||
["command_save"] = "Játékos adatainak mentése",
|
||||
["command_saveall"] = "Összes játékos adatainak mentése",
|
||||
["command_setaccountmoney"] = "Játékos pénzének beállítása megadott típusban",
|
||||
["command_setaccountmoney_amount"] = "Mennyiség",
|
||||
["command_setcoords"] = "Teleportálás megadott kordinátára",
|
||||
["command_setcoords_x"] = "X érték",
|
||||
["command_setcoords_y"] = "Y érték",
|
||||
["command_setcoords_z"] = "Z érték",
|
||||
["command_setjob"] = "Játékos munkájának beállítása",
|
||||
["command_setjob_job"] = "Munka neve",
|
||||
["command_setjob_grade"] = "Rang",
|
||||
["command_setjob_invalid"] = "Munka név vagy rang érvénytelen",
|
||||
["command_setgroup"] = "Játékos jogosultsági csoportjának beállítása",
|
||||
["command_setgroup_group"] = "Csoport neve",
|
||||
["commanderror_argumentmismatch"] = "Érvénytelen argumentumszám (%s megadva, %s szükséges)",
|
||||
["commanderror_argumentmismatch_number"] = "Érvénytelen argumentum #%s adat típus (szöveg megadva, szám szükséges)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Érvénytelen argumentum #%s adattípus (negatív/nulla átadva, pozitív szám szükséges)",
|
||||
["commanderror_invaliditem"] = "Érvénytelen tárgy",
|
||||
["commanderror_invalidweapon"] = "Érvénytelen fegyver",
|
||||
["commanderror_console"] = "Parancs nem használható konzolból",
|
||||
["commanderror_invalidcommand"] = "Érvénytelen parancs - /%s",
|
||||
["commanderror_invalidplayerid"] = "Megadott játékos nem online.",
|
||||
["commandgeneric_playerid"] = "Játékos Szerver Id",
|
||||
["command_giveammo_noweapon_found"] = "Nincs ilyen fegyvered: %s",
|
||||
["command_giveammo_weapon"] = "Fegyver név",
|
||||
["command_giveammo_ammo"] = "Lőszer mennyiség",
|
||||
["tpm_nowaypoint"] = "Nincs kijelölve pozíció!",
|
||||
["tpm_success"] = "Sikeres teleportálás",
|
||||
|
||||
["noclip_message"] = "Noclip %s",
|
||||
["enabled"] = "~g~engedélyezve~s~",
|
||||
["disabled"] = "~r~letiltva~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "$%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dagger",
|
||||
["weapon_bat"] = "Bat",
|
||||
["weapon_battleaxe"] = "Battle Axe",
|
||||
["weapon_bottle"] = "Bottle",
|
||||
["weapon_crowbar"] = "Crowbar",
|
||||
["weapon_flashlight"] = "Flashlight",
|
||||
["weapon_golfclub"] = "Golf Club",
|
||||
["weapon_hammer"] = "Hammer",
|
||||
["weapon_hatchet"] = "Hatchet",
|
||||
["weapon_knife"] = "Knife",
|
||||
["weapon_knuckle"] = "Knuckledusters",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Nightstick",
|
||||
["weapon_wrench"] = "Pipe Wrench",
|
||||
["weapon_poolcue"] = "Pool Cue",
|
||||
["weapon_stone_hatchet"] = "Stone Hatchet",
|
||||
["weapon_switchblade"] = "Switchblade",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic Pistol",
|
||||
["weapon_combatpistol"] = "Combat Pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle", -- Not Translated
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Fémkereső",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Candy Cane", -- not translated
|
||||
["weapon_acidpackage"] = "Acid Package", -- not translated
|
||||
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
|
||||
["weapon_railgunxm3"] = "Railgun", -- not translated
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Grenade",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotov Cocktail",
|
||||
["weapon_proxmine"] = "Proximity Mine",
|
||||
["weapon_pipebomb"] = "Pipe Bomb",
|
||||
["weapon_snowball"] = "Snowball",
|
||||
["weapon_stickybomb"] = "Sticky Bomb",
|
||||
["weapon_smokegrenade"] = "Tear Gas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Fire Extinguisher",
|
||||
["weapon_digiscanner"] = "Digital Scanner",
|
||||
["weapon_garbagebag"] = "Garbage Bag",
|
||||
["weapon_handcuffs"] = "Handcuffs",
|
||||
["gadget_nightvision"] = "Night Vision",
|
||||
["gadget_parachute"] = "parachute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "flashlight",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "round(s)",
|
||||
["ammo_shells"] = "shell(s)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "gallons of fuel",
|
||||
["ammo_firework"] = "firework(s)",
|
||||
["ammo_rockets"] = "rocket(s)",
|
||||
["ammo_grenadelauncher"] = "grenade(s)",
|
||||
["ammo_grenade"] = "grenade(s)",
|
||||
["ammo_stickybomb"] = "bomb(s)",
|
||||
["ammo_pipebomb"] = "bomb(s)",
|
||||
["ammo_smokebomb"] = "bomb(s)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mine(s)",
|
||||
["ammo_bzgas"] = "can(s)",
|
||||
["ammo_ball"] = "ball(s)",
|
||||
["ammo_snowball"] = "snowball(s)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klasszikus fekete",
|
||||
["tint_classic_gray"] = "klasszikus szürke",
|
||||
["tint_classic_two_tone"] = "klasszikus két szín",
|
||||
["tint_classic_white"] = "klasszikus fehér",
|
||||
["tint_classic_beige"] = "klasszikus bézs",
|
||||
["tint_classic_green"] = "klasszikus zöld",
|
||||
["tint_classic_blue"] = "klasszikus kék",
|
||||
["tint_classic_earth"] = "klasszikus föld",
|
||||
["tint_classic_brown_black"] = "klasszikus barna-fekete",
|
||||
["tint_contrast_red"] = "kontraszt piros",
|
||||
["tint_contrast_blue"] = "kontraszt kék",
|
||||
["tint_contrast_yellow"] = "kontraszt sárga",
|
||||
["tint_contrast_orange"] = "kontraszt narancs",
|
||||
["tint_bold_pink"] = "merész rózsaszín",
|
||||
["tint_bold_purple_yellow"] = "merész lila-sárga",
|
||||
["tint_bold_orange"] = "merész narancs",
|
||||
["tint_bold_green_purple"] = "merész zöld-lila",
|
||||
["tint_bold_red_feat"] = "merész piros feat",
|
||||
["tint_bold_green_feat"] = "merész zöld feat",
|
||||
["tint_bold_cyan_feat"] = "merész cián feat",
|
||||
["tint_bold_yellow_feat"] = "merész sárga feat",
|
||||
["tint_bold_red_white"] = "merész piros fehér",
|
||||
["tint_bold_blue_white"] = "merész kék fehér",
|
||||
["tint_metallic_gold"] = "metál arany",
|
||||
["tint_metallic_platinum"] = "metál platina",
|
||||
["tint_metallic_gray_lilac"] = "metál szürke lila",
|
||||
["tint_metallic_purple_lime"] = "metál lila lime",
|
||||
["tint_metallic_red"] = "metál piros",
|
||||
["tint_metallic_green"] = "metál zöld",
|
||||
["tint_metallic_blue"] = "metál kék",
|
||||
["tint_metallic_white_aqua"] = "metál fehér aqua",
|
||||
["tint_metallic_red_yellow"] = "metál piros sárga",
|
||||
}
|
||||
415
resources/[core]/es_extended/locales/id.lua
Normal file
415
resources/[core]/es_extended/locales/id.lua
Normal file
@@ -0,0 +1,415 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventaris ( Berat %s / %s )",
|
||||
["use"] = "Gunakan",
|
||||
["give"] = "Beri",
|
||||
["remove"] = "Buang",
|
||||
["return"] = "Kembali",
|
||||
["give_to"] = "Beri ke",
|
||||
["amount"] = "Jumlah",
|
||||
["giveammo"] = "Beri amunisi",
|
||||
["amountammo"] = "Jumlah Amunisi",
|
||||
["noammo"] = "Tidak cukup!",
|
||||
["gave_item"] = "Memberi %sx %s ke %s",
|
||||
["received_item"] = "Menerima %sx %s dari %s",
|
||||
["gave_weapon"] = "Memberi %s ke %s",
|
||||
["gave_weapon_ammo"] = "Memberi ~o~%sx %s untuk %s ke %s",
|
||||
["gave_weapon_withammo"] = "Memberi %s dengan ~o~%sx %s ke %s",
|
||||
["gave_weapon_hasalready"] = "%s sudah memiliki %s",
|
||||
["gave_weapon_noweapon"] = "%s tidak memiliki senjata tersebut",
|
||||
["received_weapon"] = "Menerima %s dari %s",
|
||||
["received_weapon_ammo"] = "Menerima ~o~%sx %s untuk %s Anda dari %s",
|
||||
["received_weapon_withammo"] = "Menerima %s dengan ~o~%sx %s dari %s",
|
||||
["received_weapon_hasalready"] = "%s mencoba memberimu %s, tapi kamu sudah memiliki senjata ini",
|
||||
["received_weapon_noweapon"] = "%s mencoba memberimu amunisi untuk %s, tapi kamu tidak memiliki senjata ini",
|
||||
["gave_account_money"] = "Memberi $%s (%s) ke %s",
|
||||
["received_account_money"] = "Menerima $%s (%s) dari %s",
|
||||
["amount_invalid"] = "Jumlah salah",
|
||||
["players_nearby"] = "Tidak ada Player di sekitar",
|
||||
["ex_inv_lim"] = "Tidak dapat melakukan aksi, melebihi batas berat dari %s",
|
||||
["imp_invalid_quantity"] = "Tidak dapat melakukan aksi, jumlah salah",
|
||||
["imp_invalid_amount"] = "Tidak dapat melakukan aksi, jumlah salah",
|
||||
["threw_standard"] = "Membuang %sx %s",
|
||||
["threw_account"] = "Membuang $%s %s",
|
||||
["threw_weapon"] = "Membuang %s",
|
||||
["threw_weapon_ammo"] = "Membuang %s dengan ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Kamu sudah memiliki senjata ini",
|
||||
["threw_cannot_pickup"] = "Inventaris penuh, Tidak dapat mengambil!",
|
||||
["threw_pickup_prompt"] = "Tekan E untuk Mengambil",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Buka Inventaris",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Anda telah dibayar: $%s",
|
||||
["received_help"] = "Anda telah menerima dana kesejahteraan: $%s",
|
||||
["company_nomoney"] = "perusahaan tempat Anda bekerja terlalu miskin untuk membayar gaji Anda",
|
||||
["received_paycheck"] = "menerima gaji",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Bank",
|
||||
["account_black_money"] = "Dirty Money",
|
||||
["account_money"] = "Cash",
|
||||
|
||||
["act_imp"] = "Tidak dapat melakukan aksi",
|
||||
["in_vehicle"] = "Tidak dapat melakukan aksi, Player di dalam kendaraan",
|
||||
["not_in_vehicle"] = "Tidak dapat melakukan aksi, Player tidak di dalam kendaraan",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Bawa player kepadamu",
|
||||
["command_car"] = "Munculkan kendaraan",
|
||||
["command_car_car"] = "Model atau hash kendaraan",
|
||||
["command_cardel"] = "Menghilangkan kendaraan di sekitar",
|
||||
["command_cardel_radius"] = "Menghilangkan semua kendaraan dalam radius yang ditentukan",
|
||||
["command_repair"] = "Perbaiki kendaraanmu",
|
||||
["command_repair_success"] = "Berhasil memperbaiki kendaraan",
|
||||
["command_repair_success_target"] = "Admin memperbaiki kendaraanmu",
|
||||
["command_clear"] = "Bersihkan teks chat",
|
||||
["command_clearall"] = "Bersihkan teks chat untuk semua player",
|
||||
["command_clearinventory"] = "Hilangkan semua barang dari Inventaris Player",
|
||||
["command_clearloadout"] = "Hilangkan semua senjata dari Loadout Player",
|
||||
["command_freeze"] = "Bekukan player",
|
||||
["command_unfreeze"] = "Kembalikan player",
|
||||
["command_giveaccountmoney"] = "Beri uang ke rekening tertentu",
|
||||
["command_giveaccountmoney_account"] = "Rekening untuk ditambahkan",
|
||||
["command_giveaccountmoney_amount"] = "Jumlah untuk ditambahkan",
|
||||
["command_giveaccountmoney_invalid"] = "Nama Rekening Salah",
|
||||
["command_removeaccountmoney"] = "Hilangkan uang dari rekening tertentu",
|
||||
["command_removeaccountmoney_account"] = "Rekening yang akan dihapus",
|
||||
["command_removeaccountmoney_amount"] = "Jumlah yang dihapus",
|
||||
["command_removeaccountmoney_invalid"] = "Nama Rekening Salah",
|
||||
["command_giveitem"] = "Beri Player barang",
|
||||
["command_giveitem_item"] = "Nama Barang",
|
||||
["command_giveitem_count"] = "Jumlah",
|
||||
["command_giveweapon"] = "Beri player senjata",
|
||||
["command_giveweapon_weapon"] = "Nama Senjata",
|
||||
["command_giveweapon_ammo"] = "Jumlah Amunisi",
|
||||
["command_giveweapon_hasalready"] = "Player telah memiliki senjata ini",
|
||||
["command_giveweaponcomponent"] = "Beri komponen senjata ke player",
|
||||
["command_giveweaponcomponent_component"] = "Nama Komponen",
|
||||
["command_giveweaponcomponent_invalid"] = "Komponen Senjata Salah",
|
||||
["command_giveweaponcomponent_hasalready"] = "Player telah memiliki komponen senjata ini",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Player tidak memiliki senjata ini",
|
||||
["command_goto"] = "Teleportasi dirimu ke player",
|
||||
["command_kill"] = "Bunuh player",
|
||||
["command_save"] = "Paksa Simpan Data player",
|
||||
["command_saveall"] = "Paksa Simpan Data semua player",
|
||||
["command_setaccountmoney"] = "Atur uang dalam rekening tertentu",
|
||||
["command_setaccountmoney_amount"] = "Jumlah",
|
||||
["command_setcoords"] = "Teleportasi ke koordinat tertentu",
|
||||
["command_setcoords_x"] = "Posisi X",
|
||||
["command_setcoords_y"] = "Posisi Y",
|
||||
["command_setcoords_z"] = "Posisi Z",
|
||||
["command_setjob"] = "Beri player pekerjaan",
|
||||
["command_setjob_job"] = "Nama",
|
||||
["command_setjob_grade"] = "Jabatan pekerjaan",
|
||||
["command_setjob_invalid"] = "pekerjaan, jabatan atau keduanya salah",
|
||||
["command_setgroup"] = "Atur izn grup player",
|
||||
["command_setgroup_group"] = "Nama Grup",
|
||||
["commanderror_argumentmismatch"] = "Jumlah Argument Salah (passed %s, wanted %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Argument #%s salah tipe data (passed string, wanted number)",
|
||||
["commanderror_argumentmismatch_string"] = "Argument #%s salah tipe data (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Argument #%s salah tipe data (diberikan negatif/nol, diinginkan angka positif)",
|
||||
["commanderror_invaliditem"] = "Barang salah",
|
||||
["commanderror_invalidweapon"] = "Senjata salah",
|
||||
["commanderror_console"] = "Perintah tidak dapat dieksekusi dari console",
|
||||
["commanderror_invalidcommand"] = "Perintah Salah - /%s",
|
||||
["commanderror_invalidplayerid"] = "Player tersebut tidak online",
|
||||
["commandgeneric_playerid"] = "Id Server Player",
|
||||
["command_giveammo_noweapon_found"] = "%s tidak memiliki senjata tersebut",
|
||||
["command_giveammo_weapon"] = "Nama Senjata",
|
||||
["command_giveammo_ammo"] = "Jumlah Amunisi",
|
||||
["tpm_nowaypoint"] = "Titik Lokasi Tidak Diatur.",
|
||||
["tpm_success"] = "Berhasil Teleportasi",
|
||||
|
||||
["noclip_message"] = "Noclip telah %s",
|
||||
["enabled"] = "~g~diaktifkan~s~",
|
||||
["disabled"] = "~r~dimatikan~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "£%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dagger",
|
||||
["weapon_bat"] = "Bat",
|
||||
["weapon_battleaxe"] = "Battle Axe",
|
||||
["weapon_bottle"] = "Bottle",
|
||||
["weapon_crowbar"] = "Crowbar",
|
||||
["weapon_flashlight"] = "Flashlight",
|
||||
["weapon_golfclub"] = "Golf Club",
|
||||
["weapon_hammer"] = "Hammer",
|
||||
["weapon_hatchet"] = "Hatchet",
|
||||
["weapon_knife"] = "Knife",
|
||||
["weapon_knuckle"] = "Knuckledusters",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Nightstick",
|
||||
["weapon_wrench"] = "Pipe Wrench",
|
||||
["weapon_poolcue"] = "Pool Cue",
|
||||
["weapon_stone_hatchet"] = "Stone Hatchet",
|
||||
["weapon_switchblade"] = "Switchblade",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic Pistol",
|
||||
["weapon_combatpistol"] = "Combat Pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metal Detector",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "Candycane",
|
||||
["weapon_acidpackage"] = "Acid Package",
|
||||
["weapon_pistolxm3"] = "Pistol8 x3m",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Grenade",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotov Cocktail",
|
||||
["weapon_proxmine"] = "Proximity Mine",
|
||||
["weapon_pipebomb"] = "Pipe Bomb",
|
||||
["weapon_snowball"] = "Snowball",
|
||||
["weapon_stickybomb"] = "Sticky Bomb",
|
||||
["weapon_smokegrenade"] = "Tear Gas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Pemadam Api",
|
||||
["weapon_digiscanner"] = "Digital Scanner",
|
||||
["weapon_garbagebag"] = "Kantong Sampah",
|
||||
["weapon_handcuffs"] = "Borgol",
|
||||
["gadget_nightvision"] = "Night Vision",
|
||||
["gadget_parachute"] = "Parasut",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "flashlight",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "peluru",
|
||||
["ammo_shells"] = "peluru",
|
||||
["ammo_charge"] = "peluru",
|
||||
["ammo_petrol"] = "gallon bahan bakar",
|
||||
["ammo_firework"] = "kembang api",
|
||||
["ammo_rockets"] = "roket",
|
||||
["ammo_grenadelauncher"] = "granat",
|
||||
["ammo_grenade"] = "granat",
|
||||
["ammo_stickybomb"] = "bom",
|
||||
["ammo_pipebomb"] = "bom pipa",
|
||||
["ammo_smokebomb"] = "bom asap",
|
||||
["ammo_molotov"] = "molotov",
|
||||
["ammo_proxmine"] = "peledak",
|
||||
["ammo_bzgas"] = "kaleng",
|
||||
["ammo_ball"] = "bola",
|
||||
["ammo_snowball"] = "bola salju",
|
||||
["ammo_flare"] = "flare",
|
||||
["ammo_flaregun"] = "flare",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "hitam klasik",
|
||||
["tint_classic_gray"] = "abu-abu klasik",
|
||||
["tint_classic_two_tone"] = "dua warna klasik",
|
||||
["tint_classic_white"] = "putih klasik",
|
||||
["tint_classic_beige"] = "beige klasik",
|
||||
["tint_classic_green"] = "hijau klasik",
|
||||
["tint_classic_blue"] = "biru klasik",
|
||||
["tint_classic_earth"] = "tanah klasik",
|
||||
["tint_classic_brown_black"] = "coklat hitam klasik",
|
||||
["tint_contrast_red"] = "merah kontras",
|
||||
["tint_contrast_blue"] = "biru kontras",
|
||||
["tint_contrast_yellow"] = "kuning kontras",
|
||||
["tint_contrast_orange"] = "oren kontras",
|
||||
["tint_bold_pink"] = "pink berani",
|
||||
["tint_bold_purple_yellow"] = "ungu kuning berani",
|
||||
["tint_bold_orange"] = "oren berani",
|
||||
["tint_bold_green_purple"] = "hijau ungu berani",
|
||||
["tint_bold_red_feat"] = "merah berani feat",
|
||||
["tint_bold_green_feat"] = "hijau berani feat",
|
||||
["tint_bold_cyan_feat"] = "sian berani feat",
|
||||
["tint_bold_yellow_feat"] = "kuning berani feat",
|
||||
["tint_bold_red_white"] = "merah putih berani",
|
||||
["tint_bold_blue_white"] = "biru putih berani",
|
||||
["tint_metallic_gold"] = "emas metalik",
|
||||
["tint_metallic_platinum"] = "platina metalik",
|
||||
["tint_metallic_gray_lilac"] = "abu-abu lilac metalik",
|
||||
["tint_metallic_purple_lime"] = "ungu jeruk nipis metalik",
|
||||
["tint_metallic_red"] = "merah metalik",
|
||||
["tint_metallic_green"] = "hijau metalik",
|
||||
["tint_metallic_blue"] = "biru metalik",
|
||||
["tint_metallic_white_aqua"] = "putih aqua metalik",
|
||||
["tint_metallic_red_yellow"] = "merah kuning metalik",
|
||||
}
|
||||
415
resources/[core]/es_extended/locales/it.lua
Normal file
415
resources/[core]/es_extended/locales/it.lua
Normal file
@@ -0,0 +1,415 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventario ( Peso %s / %s )",
|
||||
["use"] = "Usa",
|
||||
["give"] = "Dai",
|
||||
["remove"] = "Butta",
|
||||
["return"] = "Ritorna",
|
||||
["give_to"] = "Dai a",
|
||||
["amount"] = "Quantità",
|
||||
["giveammo"] = "Dai munizioni",
|
||||
["amountammo"] = "Quantità munizioni",
|
||||
["noammo"] = "Non abbastanza!",
|
||||
["gave_item"] = "Dando %sx %s a %s",
|
||||
["received_item"] = "Ricevuto %sx %s da %s",
|
||||
["gave_weapon"] = "Dando %s a %s",
|
||||
["gave_weapon_ammo"] = "Dando ~o~%sx %s for %s to %s",
|
||||
["gave_weapon_withammo"] = "Dando %s con ~o~%sx %s a %s",
|
||||
["gave_weapon_hasalready"] = "%s possiede già %s",
|
||||
["gave_weapon_noweapon"] = "%s non ha quell' arma",
|
||||
["received_weapon"] = "Ricevuto %s da %s",
|
||||
["received_weapon_ammo"] = "Ricevuto ~o~%sx %s per il tuo %s da %s",
|
||||
["received_weapon_withammo"] = "Ricevuto %s con ~o~%sx %s per %s",
|
||||
["received_weapon_hasalready"] = "%s ha tentato di darti %s, ma hai già l'arma",
|
||||
["received_weapon_noweapon"] = "%s ha tentato di darti munizioni per %s, ma non hai l'arma",
|
||||
["gave_account_money"] = "Dando $%s (%s) a %s",
|
||||
["received_account_money"] = "Ricevuto $%s (%s) da %s",
|
||||
["amount_invalid"] = "Quantità non valida",
|
||||
["players_nearby"] = "Nessun giocatore vicino",
|
||||
["ex_inv_lim"] = "Non puoi farlo, eccedi il peso di %s",
|
||||
["imp_invalid_quantity"] = "Non puoi farlo, quantità non valida",
|
||||
["imp_invalid_amount"] = "Non puoi farlo, importo non valido",
|
||||
["threw_standard"] = "Gettando %sx %s",
|
||||
["threw_account"] = "Gettando $%s %s",
|
||||
["threw_weapon"] = "Gettando %s",
|
||||
["threw_weapon_ammo"] = "Gettando %s con ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Hai gia quest' arma",
|
||||
["threw_cannot_pickup"] = "Inventario pieno, non puoi raccogliere!",
|
||||
["threw_pickup_prompt"] = "Premi E per raccogliere",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Apri inventario",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Sei stato pagato: $%s",
|
||||
["received_help"] = "Hai ricevuto il reddito di cittadinanza: $%s",
|
||||
["company_nomoney"] = "La tua compagnia è troppo povera per pagarti",
|
||||
["received_paycheck"] = "Ricveuto stipendio",
|
||||
["bank"] = "Banca",
|
||||
["account_bank"] = "Conto",
|
||||
["account_black_money"] = "Soldi sporchi",
|
||||
["account_money"] = "Contanti",
|
||||
|
||||
["act_imp"] = "Non puoi farlo",
|
||||
["in_vehicle"] = "Non puoi farlo, il giocatore è in un veicolo",
|
||||
["not_in_vehicle"] = "Non puoi farlo, il player non è in un veicolo",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Porta il giocatore da te",
|
||||
["command_car"] = "Spawna un veicolo",
|
||||
["command_car_car"] = "Modello o hash veicolo",
|
||||
["command_cardel"] = "Rimuovi i veicoli nelle prossimità",
|
||||
["command_cardel_radius"] = "Rimuovi i veicoli nel raggio specificato",
|
||||
["command_repair"] = "Ripara il tuo veicolo",
|
||||
["command_repair_success"] = "Hai riparato il veicolo con successo",
|
||||
["command_repair_success_target"] = "Un admin ha riparato la tua macchina",
|
||||
["command_clear"] = "Pulisci la chat testuale",
|
||||
["command_clearall"] = "Pulisci la chat testuale per tutti i giocatori",
|
||||
["command_clearinventory"] = "Rimuovi tutti gli oggetti dall' inventario del giocatore",
|
||||
["command_clearloadout"] = "Rimuovi tutte le armi dal loadout del giocatore",
|
||||
["command_freeze"] = "Blocca un giocatore",
|
||||
["command_unfreeze"] = "Sblocca un giocatore",
|
||||
["command_giveaccountmoney"] = "Dai soldi a un' account specifico",
|
||||
["command_giveaccountmoney_account"] = "Account a cui aggiungere",
|
||||
["command_giveaccountmoney_amount"] = "Quantità da aggiungere",
|
||||
["command_giveaccountmoney_invalid"] = "Nome account non valido",
|
||||
["command_removeaccountmoney"] = "Rimuovi soldi da un account specifico",
|
||||
["command_removeaccountmoney_account"] = "Account a cui togliere",
|
||||
["command_removeaccountmoney_amount"] = "Quantità da rimuovere",
|
||||
["command_removeaccountmoney_invalid"] = "Nome account non valido",
|
||||
["command_giveitem"] = "Dai un oggetto ad un giocatore",
|
||||
["command_giveitem_item"] = "Nome oggetto",
|
||||
["command_giveitem_count"] = "Quantità",
|
||||
["command_giveweapon"] = "Dai un' arma ad un giocatore",
|
||||
["command_giveweapon_weapon"] = "Nome arma",
|
||||
["command_giveweapon_ammo"] = "Quantità munizioni",
|
||||
["command_giveweapon_hasalready"] = "Il giocatore ha già l'arma",
|
||||
["command_giveweaponcomponent"] = "Dai un componente arma ad un giocatore",
|
||||
["command_giveweaponcomponent_component"] = "Nome componente",
|
||||
["command_giveweaponcomponent_invalid"] = "Componente arma non valido",
|
||||
["command_giveweaponcomponent_hasalready"] = "Il giocatore ha già questo componente arma",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Il giocatore non ha l'arma",
|
||||
["command_goto"] = "Teletrasportati da un giocatore",
|
||||
["command_kill"] = "Uccidi un giocatore",
|
||||
["command_save"] = "Salva forzatamente i dati di un giocatore",
|
||||
["command_saveall"] = "Salva forzatamente i dati di tutti igiocatoria",
|
||||
["command_setaccountmoney"] = "Aggiorna i soldi dentro un account specifico",
|
||||
["command_setaccountmoney_amount"] = "Quantità",
|
||||
["command_setcoords"] = "Teletrasportati a delle coordinate specifiche",
|
||||
["command_setcoords_x"] = "Valore X",
|
||||
["command_setcoords_y"] = "Valore Y",
|
||||
["command_setcoords_z"] = "Valore Z",
|
||||
["command_setjob"] = "Setta lavoro ad un giocatore",
|
||||
["command_setjob_job"] = "Nome",
|
||||
["command_setjob_grade"] = "Grado lavoro",
|
||||
["command_setjob_invalid"] = "Il lavoro, grado o entrambi sono errati",
|
||||
["command_setgroup"] = "Setta un gruppo di permessi ad un giocatore",
|
||||
["command_setgroup_group"] = "Nome del gruppo",
|
||||
["commanderror_argumentmismatch"] = "Conta argomenti non valida (passati %s, richiesti %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Argomento #%s di tipologia errata (passato testo, richiesto numero)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Argomento #%s tipo di dato non valido (passato negativo/zero, richiesto numero positivo)",
|
||||
["commanderror_invaliditem"] = "Oggetto non valido",
|
||||
["commanderror_invalidweapon"] = "Arma non valida",
|
||||
["commanderror_console"] = "Comando non eseguibile dalla console",
|
||||
["commanderror_invalidcommand"] = "Comando non valido - /%s",
|
||||
["commanderror_invalidplayerid"] = "Il giocatore specificato non è online",
|
||||
["commandgeneric_playerid"] = "Id server del giocatore",
|
||||
["command_giveammo_noweapon_found"] = "%s non ha quell' arma",
|
||||
["command_giveammo_weapon"] = "Nome arma",
|
||||
["command_giveammo_ammo"] = "Quantità munizioni",
|
||||
["tpm_nowaypoint"] = "Nessuna meta impostata",
|
||||
["tpm_success"] = "Teletrasportato con successo",
|
||||
|
||||
["noclip_message"] = "Noclip %s",
|
||||
["enabled"] = "~g~abilitato~s~",
|
||||
["disabled"] = "~r~disabilitato~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "$%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Pugnale Antico",
|
||||
["weapon_bat"] = "Mazza",
|
||||
["weapon_battleaxe"] = "Ascia",
|
||||
["weapon_bottle"] = "Bottiglia",
|
||||
["weapon_crowbar"] = "Piede di porco",
|
||||
["weapon_flashlight"] = "Torcia",
|
||||
["weapon_golfclub"] = "Mazza da golf",
|
||||
["weapon_hammer"] = "Martello",
|
||||
["weapon_hatchet"] = "Accetta",
|
||||
["weapon_knife"] = "Coltello",
|
||||
["weapon_knuckle"] = "Tirapugni",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Manganello",
|
||||
["weapon_wrench"] = "Tubo",
|
||||
["weapon_poolcue"] = "Stecca",
|
||||
["weapon_stone_hatchet"] = "Accetta di pietra",
|
||||
["weapon_switchblade"] = "Coltello a serramanico",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "Pistola AP",
|
||||
["weapon_ceramicpistol"] = "Pistola di ceramica",
|
||||
["weapon_combatpistol"] = "Pistola da combattimento",
|
||||
["weapon_doubleaction"] = "Revolver doppia azione",
|
||||
["weapon_navyrevolver"] = "Revolver Marina",
|
||||
["weapon_flaregun"] = "Pistola lanciarazzi",
|
||||
["weapon_gadgetpistol"] = "Pistola Gadget",
|
||||
["weapon_heavypistol"] = "Pistola pesante",
|
||||
["weapon_revolver"] = "Revolver pesante",
|
||||
["weapon_revolver_mk2"] = "Revolver pesante MK2",
|
||||
["weapon_marksmanpistol"] = "Pistola da tiratore",
|
||||
["weapon_pistol"] = "Pistola",
|
||||
["weapon_pistol_mk2"] = "Pistola MK2",
|
||||
["weapon_pistol50"] = "Pistola .50",
|
||||
["weapon_snspistol"] = "Pistola SNS",
|
||||
["weapon_snspistol_mk2"] = "Pistola SNS MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizzatore",
|
||||
["weapon_vintagepistol"] = "Pistola Vintage",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Fucile a pompa d'assalto",
|
||||
["weapon_autoshotgun"] = "Fucile a pompa automatico",
|
||||
["weapon_bullpupshotgun"] = "Fucile a pompa Bullup",
|
||||
["weapon_combatshotgun"] = "Fucile a pompa da combattimento",
|
||||
["weapon_dbshotgun"] = "Fucile a pompa doppia canna",
|
||||
["weapon_heavyshotgun"] = "Fucile a pompa pesante",
|
||||
["weapon_musket"] = "Moschetto",
|
||||
["weapon_pumpshotgun"] = "Fucile a pompa",
|
||||
["weapon_pumpshotgun_mk2"] = "Fucile a pompa MK2",
|
||||
["weapon_sawnoffshotgun"] = "Fucile a canne mozza",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "SMG d'assalto",
|
||||
["weapon_combatmg"] = "MG da combattimento",
|
||||
["weapon_combatmg_mk2"] = "MG da combattimento MK2",
|
||||
["weapon_combatpdw"] = "PDW da combattimento",
|
||||
["weapon_gusenberg"] = "Mitragliatrice Gusenberg",
|
||||
["weapon_machinepistol"] = "Pistola mitragliatrice",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Hellbringer infernale",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Fucile avanzato",
|
||||
["weapon_assaultrifle"] = "Fucile d'assalto",
|
||||
["weapon_assaultrifle_mk2"] = "Fucile d' assalto MK2",
|
||||
["weapon_bullpuprifle"] = "Fucile Bullpup",
|
||||
["weapon_bullpuprifle_mk2"] = "Fucile Bullpup MK2",
|
||||
["weapon_carbinerifle"] = "Carabina",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine MK2",
|
||||
["weapon_compactrifle"] = "Fucile compatto",
|
||||
["weapon_militaryrifle"] = "Fucile militare",
|
||||
["weapon_specialcarbine"] = "Carabina speciale",
|
||||
["weapon_specialcarbine_mk2"] = "Carabina speciale MK2",
|
||||
["weapon_heavyrifle"] = "Fucile pesante",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Cecchino pesante",
|
||||
["weapon_heavysniper_mk2"] = "Cecchino pesante MK2",
|
||||
["weapon_marksmanrifle"] = "Fucile da tiratore",
|
||||
["weapon_marksmanrifle_mk2"] = "Fucile da tiratore MK2",
|
||||
["weapon_sniperrifle"] = "Cecchino",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Lanciagranate compatto",
|
||||
["weapon_firework"] = "Cannone pirotecnico",
|
||||
["weapon_grenadelauncher"] = "Lanciagranate",
|
||||
["weapon_hominglauncher"] = "Lanciarazzi a tracciamento",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Lanciarazzi",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metal Detector",
|
||||
["weapon_precisionrifle"] = "Fucile di precisione",
|
||||
["weapon_tactilerifle"] = "Carabina di servizio",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Bastoncino di zucchero",
|
||||
["weapon_acidpackage"] = "Pacco di acidi",
|
||||
["weapon_pistolxm3"] = "Pistola WM 29",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Palla",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Granata",
|
||||
["weapon_petrolcan"] = "Tanica",
|
||||
["weapon_hazardcan"] = "Tanica pericolosa",
|
||||
["weapon_molotov"] = "Molotov",
|
||||
["weapon_proxmine"] = "Mina di prossimità",
|
||||
["weapon_pipebomb"] = "Esplosivo plastico",
|
||||
["weapon_snowball"] = "Palla di neve",
|
||||
["weapon_stickybomb"] = "Bomba adesiva",
|
||||
["weapon_smokegrenade"] = "Gas lacrimogeno",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Estintore",
|
||||
["weapon_digiscanner"] = "Scanner digitale",
|
||||
["weapon_garbagebag"] = "Sacco della spazzatura",
|
||||
["weapon_handcuffs"] = "Manette",
|
||||
["gadget_nightvision"] = "Visore termico",
|
||||
["gadget_parachute"] = "Paracadute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "Modello basa",
|
||||
["component_knuckle_pimp"] = "il Pappone",
|
||||
["component_knuckle_ballas"] = "i Ballas",
|
||||
["component_knuckle_dollar"] = "il Riccone",
|
||||
["component_knuckle_diamond"] = "la Roccia",
|
||||
["component_knuckle_hate"] = "l' Hater",
|
||||
["component_knuckle_love"] = "l' Amante",
|
||||
["component_knuckle_player"] = "il Giocatore",
|
||||
["component_knuckle_king"] = "il Re",
|
||||
["component_knuckle_vagos"] = "i Vagos",
|
||||
|
||||
["component_luxary_finish"] = "rifinitura di lusso",
|
||||
|
||||
["component_handle_default"] = "impugnatura base",
|
||||
["component_handle_vip"] = "impugnatura VIP",
|
||||
["component_handle_bodyguard"] = "impugnatura guardia del corpo",
|
||||
|
||||
["component_vip_finish"] = "rifinitura VIP",
|
||||
["component_bodyguard_finish"] = "rifinitura Guardia del corpo",
|
||||
|
||||
["component_camo_finish"] = "mimetica Digitale",
|
||||
["component_camo_finish2"] = "mimetica Cespuglio",
|
||||
["component_camo_finish3"] = "mimetica Legnosa",
|
||||
["component_camo_finish4"] = "mimetica Teschio",
|
||||
["component_camo_finish5"] = "mimetica Sessanta Nove",
|
||||
["component_camo_finish6"] = "mimetica Perseo",
|
||||
["component_camo_finish7"] = "mimetica Leopardata",
|
||||
["component_camo_finish8"] = "mimetica Zebra",
|
||||
["component_camo_finish9"] = "mimetica Geometrica",
|
||||
["component_camo_finish10"] = "mimetica Boom",
|
||||
["component_camo_finish11"] = "mimetica Patriottica",
|
||||
|
||||
["component_camo_slide_finish"] = "mimetica Digitale Slide",
|
||||
["component_camo_slide_finish2"] = "mimetica Cespuglio Slide",
|
||||
["component_camo_slide_finish3"] = "mimetica Legnosa Slide",
|
||||
["component_camo_slide_finish4"] = "mimetica Teschio Slide",
|
||||
["component_camo_slide_finish5"] = "mimetica Sessanta Nove Slide",
|
||||
["component_camo_slide_finish6"] = "mimetica Perseo Slide",
|
||||
["component_camo_slide_finish7"] = "mimetica Leopardata Slide",
|
||||
["component_camo_slide_finish8"] = "mimetica Zebra Slide",
|
||||
["component_camo_slide_finish9"] = "mimetica Geometrica Slide",
|
||||
["component_camo_slide_finish10"] = "mimetica Boom Slide",
|
||||
["component_camo_slide_finish11"] = "mimetica Patriottica Slide",
|
||||
|
||||
["component_clip_default"] = "caricatore Standard",
|
||||
["component_clip_extended"] = "caricatore Esteso",
|
||||
["component_clip_drum"] = "caricatore A Batteria",
|
||||
["component_clip_box"] = "caricatore A Scatola",
|
||||
|
||||
["component_scope_holo"] = "mirino Olografico",
|
||||
["component_scope_small"] = "mirino Piccolo",
|
||||
["component_scope_medium"] = "mirino Medio",
|
||||
["component_scope_large"] = "mirino Largo",
|
||||
["component_scope"] = "mirino Montato",
|
||||
["component_scope_advanced"] = "mirino Avanzato",
|
||||
["component_ironsights"] = "integrato",
|
||||
|
||||
["component_suppressor"] = "silenziatore",
|
||||
["component_compensator"] = "compensatore",
|
||||
|
||||
["component_muzzle_flat"] = "freno Di Bocca Piatto",
|
||||
["component_muzzle_tactical"] = "freno Di Bocca Tattico",
|
||||
["component_muzzle_fat"] = "freno Di Bocca Grosso",
|
||||
["component_muzzle_precision"] = "freno Di Bocca Di Precisione",
|
||||
["component_muzzle_heavy"] = "freno Di Bocca Pesante",
|
||||
["component_muzzle_slanted"] = "freno Di Bocca Inclinato",
|
||||
["component_muzzle_split"] = "freno Di Bocca Diviso",
|
||||
["component_muzzle_squared"] = "freno Di Bocca Quadrato",
|
||||
|
||||
["component_flashlight"] = "torcia",
|
||||
["component_grip"] = "impugnatura",
|
||||
|
||||
["component_barrel_default"] = "canna Standard",
|
||||
["component_barrel_heavy"] = "canna Pesante",
|
||||
|
||||
["component_ammo_tracer"] = "munizioni Traccianti",
|
||||
["component_ammo_incendiary"] = "munizioni Incendiarie",
|
||||
["component_ammo_hollowpoint"] = "munizioni a Punta Cava",
|
||||
["component_ammo_fmj"] = "munizioni fMj",
|
||||
["component_ammo_armor"] = "munizioni penetranti",
|
||||
["component_ammo_explosive"] = "munizioni penetranti incendiarie",
|
||||
|
||||
["component_shells_default"] = "cartucce Standard",
|
||||
["component_shells_incendiary"] = "cartucce alito di Drago",
|
||||
["component_shells_armor"] = "cartucce a pallettoni",
|
||||
["component_shells_hollowpoint"] = "cartucce a freccette",
|
||||
["component_shells_explosive"] = "cartucce esplosive",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "colpo(i)",
|
||||
["ammo_shells"] = "cartuccia(e)",
|
||||
["ammo_charge"] = "carica",
|
||||
["ammo_petrol"] = "Litri di carburante",
|
||||
["ammo_firework"] = "fuochi d'artificio",
|
||||
["ammo_rockets"] = "razzo(i)",
|
||||
["ammo_grenadelauncher"] = "granata(e)",
|
||||
["ammo_grenade"] = "granata(e)",
|
||||
["ammo_stickybomb"] = "bomba(e)",
|
||||
["ammo_pipebomb"] = "bomba(e)",
|
||||
["ammo_smokebomb"] = "bomba(e)",
|
||||
["ammo_molotov"] = "bottiglia(e)",
|
||||
["ammo_proxmine"] = "mina(e)",
|
||||
["ammo_bzgas"] = "latta(e)",
|
||||
["ammo_ball"] = "palla(e)",
|
||||
["ammo_snowball"] = "palle di neve",
|
||||
["ammo_flare"] = "razzo(i)",
|
||||
["ammo_flaregun"] = "razzo(i)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "Colore standard",
|
||||
["tint_green"] = "color verde",
|
||||
["tint_gold"] = "color oro",
|
||||
["tint_pink"] = "color rosa",
|
||||
["tint_army"] = "color army",
|
||||
["tint_lspd"] = "color blu",
|
||||
["tint_orange"] = "color arancio",
|
||||
["tint_platinum"] = "color platino",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "nero classico",
|
||||
["tint_classic_gray"] = "grigio classico",
|
||||
["tint_classic_two_tone"] = "due toni classico",
|
||||
["tint_classic_white"] = "bianco classico",
|
||||
["tint_classic_beige"] = "beige classico",
|
||||
["tint_classic_green"] = "verde classico",
|
||||
["tint_classic_blue"] = "blu classico",
|
||||
["tint_classic_earth"] = "terra classica",
|
||||
["tint_classic_brown_black"] = "marrone nero classico",
|
||||
["tint_contrast_red"] = "rosso contrastante",
|
||||
["tint_contrast_blue"] = "blu contrastante",
|
||||
["tint_contrast_yellow"] = "giallo contrastante",
|
||||
["tint_contrast_orange"] = "arancione contrastante",
|
||||
["tint_bold_pink"] = "rosa audace",
|
||||
["tint_bold_purple_yellow"] = "viola giallo audace",
|
||||
["tint_bold_orange"] = "arancione audace",
|
||||
["tint_bold_green_purple"] = "verde viola audace",
|
||||
["tint_bold_red_feat"] = "rosso audace feat",
|
||||
["tint_bold_green_feat"] = "verde audace feat",
|
||||
["tint_bold_cyan_feat"] = "cyan audace feat",
|
||||
["tint_bold_yellow_feat"] = "giallo audace feat",
|
||||
["tint_bold_red_white"] = "rosso bianco audace",
|
||||
["tint_bold_blue_white"] = "blu bianco audace",
|
||||
["tint_metallic_gold"] = "oro metallico",
|
||||
["tint_metallic_platinum"] = "platino metallico",
|
||||
["tint_metallic_gray_lilac"] = "grigio lilla metallico",
|
||||
["tint_metallic_purple_lime"] = "viola lime metallico",
|
||||
["tint_metallic_red"] = "rosso metallico",
|
||||
["tint_metallic_green"] = "verde metallico",
|
||||
["tint_metallic_blue"] = "blu metallico",
|
||||
["tint_metallic_white_aqua"] = "bianco aqua metallico",
|
||||
["tint_metallic_red_yellow"] = "rosso giallo metallico",
|
||||
}
|
||||
406
resources/[core]/es_extended/locales/nl.lua
Normal file
406
resources/[core]/es_extended/locales/nl.lua
Normal file
@@ -0,0 +1,406 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventaris ( Gewicht %s / %s )",
|
||||
["use"] = "Gebruik",
|
||||
["give"] = "Geef",
|
||||
["remove"] = "Gooi",
|
||||
["return"] = "Terug",
|
||||
["give_to"] = "Geef aan",
|
||||
["amount"] = "Aantal",
|
||||
["giveammo"] = "Geef munitie",
|
||||
["amountammo"] = "Hoeveelheid munitie",
|
||||
["noammo"] = "Niet genoeg munitie!",
|
||||
["gave_item"] = "%sx %s gegeven aan %s",
|
||||
["received_item"] = "%sx %s ontvangen van %s",
|
||||
["gave_weapon"] = "%s gegeven aan %s",
|
||||
["gave_weapon_ammo"] = "~o~%sx %s gegeven voor een %s aan %s",
|
||||
["gave_weapon_withammo"] = "%s gegeven met ~o~%sx %s aan %s",
|
||||
["gave_weapon_hasalready"] = "%s heeft al een %s",
|
||||
["gave_weapon_noweapon"] = "%s heeft dat wapen niet",
|
||||
["received_weapon"] = "%s ontvangen van %s",
|
||||
["received_weapon_ammo"] = "~o~%sx %s ontvangen voor je %s van %s",
|
||||
["received_weapon_withammo"] = "%s ontvangen met ~o~%sx %s van %s",
|
||||
["received_weapon_hasalready"] = "%s heeft geprobeerd je een %s te geven, maar je hebt dat wapen al.",
|
||||
["received_weapon_noweapon"] = "%s heeft geprobeerd je ammo te geven voor een %s, maar je hebt dit wapen niet",
|
||||
["gave_account_money"] = "€%s (%s) gegeven aan %s",
|
||||
["received_account_money"] = "€%s (%s) ontvangen van %s",
|
||||
["amount_invalid"] = "Ongeldige hoeveelheid",
|
||||
["players_nearby"] = "Geen spelers in de buurt",
|
||||
["ex_inv_lim"] = "Kan actie niet uitvoeren, overschrijdt max. gewicht van %s",
|
||||
["imp_invalid_quantity"] = "Kan actie niet uitvoeren, de hoeveelheid is ongeldig",
|
||||
["imp_invalid_amount"] = "Kan actie niet uitvoeren, het aantal is ongeldig",
|
||||
["threw_standard"] = "%sx %s weggegooid",
|
||||
["threw_account"] = "€%s %s weggegooid",
|
||||
["threw_weapon"] = "%s weggegooid",
|
||||
["threw_weapon_ammo"] = "%s met ~o~%sx %s weggegooid",
|
||||
["threw_weapon_already"] = "Je hebt dit wapen al !",
|
||||
["threw_cannot_pickup"] = "Inventaris is vol, je kan dit niet oppakken!",
|
||||
["threw_pickup_prompt"] = "Druk op E om op te pakken",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Laat inventaris zien",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Je bent betaald: €%s",
|
||||
["received_help"] = "Je hebt je uitkering gekregen: €%s",
|
||||
["company_nomoney"] = "Het bedrijf waar je bij werkt heeft te weinig geld om je uit te betalen.",
|
||||
["received_paycheck"] = "salaris ontvangen",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Bank",
|
||||
["account_black_money"] = "Zwart geld",
|
||||
["account_money"] = "Contant",
|
||||
|
||||
["act_imp"] = "Kan actie niet uitvoeren",
|
||||
["in_vehicle"] = "Kan actie niet uitvoeren, de speler zit in een voertuig.",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Breng speler naar jou",
|
||||
["command_car"] = "Spawn een voertuig",
|
||||
["command_car_car"] = "Voertuig model of hash",
|
||||
["command_cardel"] = "Verwijder voertuigen in straal",
|
||||
["command_cardel_radius"] = "Verwijderd alle voertuigen in gewenste straal",
|
||||
["command_clear"] = "Verwijder chat berichten",
|
||||
["command_clearall"] = "Verwijder chat berichten voor alle spelers",
|
||||
["command_clearinventory"] = "Verwijder alle items van een speler zijn inventory",
|
||||
["command_clearloadout"] = "Verwijder alle wapens die een speler heeft",
|
||||
["command_freeze"] = "Freeze een speler",
|
||||
["command_unfreeze"] = "Unfreeze een speler",
|
||||
["command_giveaccountmoney"] = "Geef geld aan een rekening",
|
||||
["command_giveaccountmoney_account"] = "Account om aan toe te voegen",
|
||||
["command_giveaccountmoney_amount"] = "Bedrag om toe te voegen",
|
||||
["command_giveaccountmoney_invalid"] = "Account Naam ongeldig",
|
||||
["command_giveitem"] = "Geef speler een item",
|
||||
["command_giveitem_item"] = "Item naam",
|
||||
["command_giveitem_count"] = "Hoeveelheid",
|
||||
["command_giveweapon"] = "Geef de speler een wapen",
|
||||
["command_giveweapon_weapon"] = "Wapen naam",
|
||||
["command_giveweapon_ammo"] = "Munitie Hoeveelheid",
|
||||
["command_giveweapon_hasalready"] = "Speler heeft dit wapen al",
|
||||
["command_giveweaponcomponent"] = "Geef wapen component aan speler",
|
||||
["command_giveweaponcomponent_component"] = "Component naam",
|
||||
["command_giveweaponcomponent_invalid"] = "Ongeldig wapen component",
|
||||
["command_giveweaponcomponent_hasalready"] = "De speler heeft dit wapen component al",
|
||||
["command_giveweaponcomponent_missingweapon"] = "De speler heeft dit wapen niet",
|
||||
["command_goto"] = "Teleporteer jezelf naar een speler",
|
||||
["command_kill"] = "Vermoord een speler",
|
||||
["command_save"] = "Slaag een speler zijn spelerdata geforceerd op",
|
||||
["command_saveall"] = "Slaag iedereen zijn spelerdata geforceerd op",
|
||||
["command_setaccountmoney"] = "Stel geld in op een account",
|
||||
["command_setaccountmoney_amount"] = "Hoeveelheid",
|
||||
["command_setcoords"] = "Telepeer naar coordinaten",
|
||||
["command_setcoords_x"] = "X waarde",
|
||||
["command_setcoords_y"] = "Y waarde",
|
||||
["command_setcoords_z"] = "Z waarde",
|
||||
["command_setjob"] = "Zet een speler zijn / haar job",
|
||||
["command_setjob_job"] = "Naam",
|
||||
["command_setjob_grade"] = "Job grade",
|
||||
["command_setjob_invalid"] = "De job, grade of beide zijn ongeldig",
|
||||
["command_setgroup"] = "Stel een toestemmingsgroep voor spelers in",
|
||||
["command_setgroup_group"] = "Naam van groep",
|
||||
["commanderror_argumentmismatch"] = "Ongeldig aantal argumenten (geslaagd %s, gezocht %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Ongeldig argument #%s gegevenstype (doorgegeven string, gewenst nummer)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (doorgegeven string, gewenst nummer)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Ongeldig Argument #%s gegevenstype (doorgegeven negatief/nul, gewenst positief getal)",
|
||||
["commanderror_invaliditem"] = "Ongeldig item",
|
||||
["commanderror_invalidweapon"] = "Ongeldig wapen",
|
||||
["commanderror_console"] = "Command kan niet worden uitgevoerd vanaf console.",
|
||||
["commanderror_invalidcommand"] = "Ongeldig commando - /%s",
|
||||
["commanderror_invalidplayerid"] = "Opgegeven speler is niet online",
|
||||
["commandgeneric_playerid"] = "Speler server id",
|
||||
["command_giveammo_noweapon_found"] = "%s heeft dat wapen niet",
|
||||
["command_giveammo_weapon"] = "Wapen naam",
|
||||
["command_giveammo_ammo"] = "Munitie Hoeveelheid",
|
||||
["tpm_nowaypoint"] = "Geen navigatie ingesteld.",
|
||||
["tpm_success"] = "Successvol geteleporteerd",
|
||||
|
||||
["noclip_message"] = "Noclip is %s",
|
||||
["enabled"] = "~g~aangezet~s~",
|
||||
["disabled"] = "~r~uitgezet~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "€%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dolk",
|
||||
["weapon_bat"] = "Knuppel",
|
||||
["weapon_battleaxe"] = "Gevechtsbijl",
|
||||
["weapon_bottle"] = "Fles",
|
||||
["weapon_crowbar"] = "Koevoet",
|
||||
["weapon_flashlight"] = "Zaklamp",
|
||||
["weapon_golfclub"] = "Golfclub",
|
||||
["weapon_hammer"] = "Hamer",
|
||||
["weapon_hatchet"] = "Bijl",
|
||||
["weapon_knife"] = "Mes",
|
||||
["weapon_knuckle"] = "Boksbeugel",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Wapenstok",
|
||||
["weapon_wrench"] = "Pijpsleutel",
|
||||
["weapon_poolcue"] = "Biljart Keu",
|
||||
["weapon_stone_hatchet"] = "Steenbijl",
|
||||
["weapon_switchblade"] = "Stiletto",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP-pistool",
|
||||
["weapon_ceramicpistol"] = "Keramische pistool",
|
||||
["weapon_combatpistol"] = "Gevechtspistool",
|
||||
["weapon_doubleaction"] = "Revolver met dubbele actie",
|
||||
["weapon_navyrevolver"] = "Marine Revolver",
|
||||
["weapon_flaregun"] = "Noodsignaalpistool",
|
||||
["weapon_gadgetpistol"] = "Gadgetpistool",
|
||||
["weapon_heavypistol"] = "Zwaar pistool",
|
||||
["weapon_revolver"] = "Zware revolver",
|
||||
["weapon_revolver_mk2"] = "Zware revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman-pistool",
|
||||
["weapon_pistol"] = "Pistool",
|
||||
["weapon_pistol_mk2"] = "Pistool MK2",
|
||||
["weapon_pistol50"] = "Pistool .50",
|
||||
["weapon_snspistol"] = "SNS-pistool",
|
||||
["weapon_snspistol_mk2"] = "SNS-pistool MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistool",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Aanvalsgeweer",
|
||||
["weapon_autoshotgun"] = "Automatisch jachtgeweer",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Gevechtsgeweer",
|
||||
["weapon_dbshotgun"] = "Dubbelloops jachtgeweer",
|
||||
["weapon_heavyshotgun"] = "Zwaar jachtgeweer",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pompgeweer",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Afgezaagd jachtgeweer",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Aanval SMG",
|
||||
["weapon_combatmg"] = "Gevecht MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg-veger",
|
||||
["weapon_machinepistol"] = "Machinepistool",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro-SMG",
|
||||
["weapon_minismg"] = "Mini-SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Onheilige Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Geavanceerd geweer",
|
||||
["weapon_assaultrifle"] = "Aanvalsgeweer",
|
||||
["weapon_assaultrifle_mk2"] = "Aanvalsgeweer MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup-geweer",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup-geweer MK2",
|
||||
["weapon_carbinerifle"] = "Kabinet geweer",
|
||||
["weapon_carbinerifle_mk2"] = "Kabinet geweer MK2",
|
||||
["weapon_compactrifle"] = "Compact geweer",
|
||||
["weapon_militaryrifle"] = "Militair geweer",
|
||||
["weapon_specialcarbine"] = "Speciale karabijn",
|
||||
["weapon_specialcarbine_mk2"] = "Speciale karabijn MK2",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Zware sluipschutter",
|
||||
["weapon_heavysniper_mk2"] = "Zware Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Schuttersgeweer",
|
||||
["weapon_marksmanrifle_mk2"] = "Schuttersgeweer MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compacte Launcher",
|
||||
["weapon_firework"] = "Vuurwerkstarter",
|
||||
["weapon_grenadelauncher"] = "Granaatwerper",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Spoorgeweer",
|
||||
["weapon_rpg"] = "Raketwerper",
|
||||
["weapon_rayminigun"] = "Weduwemaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metaal Detector",
|
||||
["weapon_precisionrifle"] = "Precisiegeweer",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Snoep stok",
|
||||
["weapon_acidpackage"] = "LSD pakket",
|
||||
["weapon_pistolxm3"] = "WM 29 Pistool",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Honkbal",
|
||||
["weapon_bzgas"] = "BZ-gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Granaat",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Gevaarlijke jerrycan",
|
||||
["weapon_molotov"] = "Molotovcocktail",
|
||||
["weapon_proxmine"] = "Nabijheidsmijn",
|
||||
["weapon_pipebomb"] = "Pijpbom",
|
||||
["weapon_snowball"] = "Sneeuwbal",
|
||||
["weapon_stickybomb"] = "Kleefbom",
|
||||
["weapon_smokegrenade"] = "Traangas",
|
||||
|
||||
-- Special
|
||||
["weapon_firebluser"] = "Brandblusser",
|
||||
["weapon_digiscanner"] = "Digitale scanner",
|
||||
["weapon_garbagebag"] = "Vuilniszak",
|
||||
["weapon_handcuffs"] = "Handboeien",
|
||||
["gadget_nightvision"] = "Nachtzicht",
|
||||
["gadget_parachute"] = "parachute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "basismodel",
|
||||
["component_knuckle_pimp"] = "de pooier",
|
||||
["component_knuckle_ballas"] = "de ballen",
|
||||
["component_knuckle_dollar"] = "de Hustler",
|
||||
["component_knuckle_diamond"] = "de rots",
|
||||
["component_knuckle_hate"] = "de Hater",
|
||||
["component_knuckle_love"] = "de minnaar",
|
||||
["component_knuckle_player"] = "de speler",
|
||||
["component_knuckle_king"] = "de koning",
|
||||
["component_knuckle_vagos"] = "de Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxe wapenafwerking",
|
||||
|
||||
["component_handle_default"] = "standaard handvat",
|
||||
["component_handle_vip"] = "VIP-handvat",
|
||||
["component_handle_bodyguard"] = "bodyguard-handvat",
|
||||
|
||||
["component_vip_finish"] = "VIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digitale camouflage",
|
||||
["component_camo_finish2"] = "penseelstreek camouflage",
|
||||
["component_camo_finish3"] = "bos camouflage",
|
||||
["component_camo_finish4"] = "schedel camouflage",
|
||||
["component_camo_finish5"] = "sessanta Nove camouflage",
|
||||
["component_camo_finish6"] = "perseus camouflage",
|
||||
["component_camo_finish7"] = "luipaard camouflage",
|
||||
["component_camo_finish8"] = "zebracamouflage",
|
||||
["component_camo_finish9"] = "geometrische camouflage",
|
||||
["component_camo_finish10"] = "boom camouflage",
|
||||
["component_camo_finish11"] = "patriottische camouflage",
|
||||
|
||||
["component_camo_slide_finish"] = "digitale diacamouflage",
|
||||
["component_camo_slide_finish2"] = "penseelstreek Dia Camo",
|
||||
["component_camo_slide_finish3"] = "bos Slide camouflage",
|
||||
["component_camo_slide_finish4"] = "schedelschuifcamouflage",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Dia camouflage",
|
||||
["component_camo_slide_finish6"] = "perseus diacamouflage",
|
||||
["component_camo_slide_finish7"] = "luipaard Slide camouflage",
|
||||
["component_camo_slide_finish8"] = "zebra Slide camouflage",
|
||||
["component_camo_slide_finish9"] = "geometrische diacamouflage",
|
||||
["component_camo_slide_finish10"] = "boom Slide camouflage",
|
||||
["component_camo_slide_finish11"] = "patriottische diacamouflage",
|
||||
|
||||
["component_clip_default"] = "standaard magazijn",
|
||||
["component_clip_extended"] = "uitgebreid magazijn",
|
||||
["component_clip_drum"] = "drum magazijn",
|
||||
["component_clip_box"] = "box magazijn",
|
||||
|
||||
["component_scope_holo"] = "holografisch bereik",
|
||||
["component_scope_small"] = "klein bereik",
|
||||
["component_scope_medium"] = "gemiddeld bereik",
|
||||
["component_scope_large"] = "groot bereik",
|
||||
["component_scope"] = "gemonteerde scope",
|
||||
["component_scope_advanced"] = "geavanceerd bereik",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "platte mondingsrem",
|
||||
["component_muzzle_tactical"] = "tactische mondingsrem",
|
||||
["component_muzzle_fat"] = "fat-end mondingsrem",
|
||||
["component_muzzle_precision"] = "precisie mondingsrem",
|
||||
["component_muzzle_heavy"] = "zware mondingsrem",
|
||||
["component_muzzle_slanted"] = "schuine mondingsrem",
|
||||
["component_muzzle_split"] = "gespleten mondingsrem",
|
||||
["component_muzzle_squared"] = "kwadraat mondingsrem",
|
||||
|
||||
["component_flashlight"] = "zaklamp",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "standaard handvat",
|
||||
["component_barrel_heavy"] = "zware handvat",
|
||||
|
||||
["component_ammo_tracer"] = "tracermunitie",
|
||||
["component_ammo_incendiary"] = "brandgevaarlijke munitie",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint munitie",
|
||||
["component_ammo_fmj"] = "fMJ-munitie",
|
||||
["component_ammo_armor"] = "pantser piercing munitie",
|
||||
["component_ammo_explosive"] = "pantserpiercing brandgevaarlijke munitie",
|
||||
|
||||
["component_shells_default"] = "standaard shells",
|
||||
["component_shells_incendiary"] = "draken ademschelpen",
|
||||
["component_shells_armor"] = "stalen Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette schelpen",
|
||||
["component_shells_explosive"] = "explosieve slakkenhuizen",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "ronde(n)",
|
||||
["ammo_shells"] = "huls/(zen)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "liters brandstof",
|
||||
["ammo_firework"] = "vuurwerkpijl(en)",
|
||||
["ammo_rockets"] = "raket(ten)",
|
||||
["ammo_grenadelauncher"] = "granaat(en)",
|
||||
["ammo_grenade"] = "granaat(en)",
|
||||
["ammo_stickybomb"] = "bom(men)",
|
||||
["ammo_pipebomb"] = "bom(men)",
|
||||
["ammo_smokebomb"] = "bom(men)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mijn(en)",
|
||||
["ammo_bzgas"] = "blik(ken)",
|
||||
["ammo_ball"] = "bal(len)",
|
||||
["ammo_snowball"] = "sneeuwbal(len)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "standaard skin",
|
||||
["tint_green"] = "groene skin",
|
||||
["tint_gold"] = "goude skin",
|
||||
["tint_pink"] = "roze skin",
|
||||
["tint_army"] = "legerprint",
|
||||
["tint_lspd"] = "blauwe skin",
|
||||
["tint_orange"] = "oranje skin",
|
||||
["tint_platinum"] = "platina skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klassiek zwart",
|
||||
["tint_classic_gray"] = "klassiek grijs",
|
||||
["tint_classic_two_tone"] = "klassiek twee-tonig",
|
||||
["tint_classic_white"] = "klassiek wit",
|
||||
["tint_classic_beige"] = "klassiek beige",
|
||||
["tint_classic_green"] = "klassiek groen",
|
||||
["tint_classic_blue"] = "klassiek blauw",
|
||||
["tint_classic_earth"] = "klassieke aarde",
|
||||
["tint_classic_brown_black"] = "klassiek bruin zwart",
|
||||
["tint_contrast_red"] = "contrast rood",
|
||||
["tint_contrast_blue"] = "contrast blauw",
|
||||
["tint_contrast_yellow"] = "contrast geel",
|
||||
["tint_contrast_orange"] = "contrast oranje",
|
||||
["tint_bold_pink"] = "gedurfde roze",
|
||||
["tint_bold_purple_yellow"] = "gedurfde paarse geel",
|
||||
["tint_bold_orange"] = "gedurfde oranje",
|
||||
["tint_bold_green_purple"] = "gedurfde groene paarse",
|
||||
["tint_bold_red_feat"] = "gedurfde rode feat",
|
||||
["tint_bold_green_feat"] = "gedurfde groene feat",
|
||||
["tint_bold_cyan_feat"] = "gedurfde cyaan feat",
|
||||
["tint_bold_yellow_feat"] = "gedurfde gele feat",
|
||||
["tint_bold_red_white"] = "gedurfde rode witte",
|
||||
["tint_bold_blue_white"] = "gedurfde blauwe witte",
|
||||
["tint_metallic_gold"] = "metallisch goud",
|
||||
["tint_metallic_platinum"] = "metallisch platina",
|
||||
["tint_metallic_gray_lilac"] = "metallisch grijs lila",
|
||||
["tint_metallic_purple_lime"] = "metallisch paarse limo",
|
||||
["tint_metallic_red"] = "metallisch rood",
|
||||
["tint_metallic_green"] = "metallisch groen",
|
||||
["tint_metallic_blue"] = "metallisch blauw",
|
||||
["tint_metallic_white_aqua"] = "metallisch wit aqua",
|
||||
["tint_metallic_red_yellow"] = "metallisch rood geel",
|
||||
}
|
||||
273
resources/[core]/es_extended/locales/pl.lua
Normal file
273
resources/[core]/es_extended/locales/pl.lua
Normal file
@@ -0,0 +1,273 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "ekwipunek %s / %s",
|
||||
["use"] = "użyj",
|
||||
["give"] = "daj",
|
||||
["remove"] = "usuń",
|
||||
["return"] = "wróć",
|
||||
["give_to"] = "daj dla",
|
||||
["amount"] = "ilość",
|
||||
["giveammo"] = "daj amunicje",
|
||||
["amountammo"] = "ilość amunicji",
|
||||
["noammo"] = "nie posiadasz wystarczającej ilości amunicji!",
|
||||
["gave_item"] = "dałeś/aś %sx %s dla %s",
|
||||
["received_item"] = "otrzymałeś/aś %sx %s od %s",
|
||||
["gave_weapon"] = "dałeś/aś %s dla %s",
|
||||
["gave_weapon_ammo"] = "dałeś/aś ~o~%sx %s do %s dla %s",
|
||||
["gave_weapon_withammo"] = "dałeś/aś %s z ~o~%sx %s dla %s",
|
||||
["gave_weapon_hasalready"] = "%s już posiada %s",
|
||||
["gave_weapon_noweapon"] = "%s nie posiada tej broni",
|
||||
["received_weapon"] = "otrzymałeś/aś %s od %s",
|
||||
["received_weapon_ammo"] = "otrzymałeś/aś ~o~%sx %s do twojego %s od %s",
|
||||
["received_weapon_withammo"] = "otrzymałeś/aś %s z ~o~%sx %s od %s",
|
||||
["received_weapon_hasalready"] = "%s próbował/a przekazać ci %s, lecz już posiadasz jedno",
|
||||
["received_weapon_noweapon"] = "%s próbował/a przekazać ci amunicje do %s, lecz nie posiadasz tej broni",
|
||||
["gave_account_money"] = "dałeś/aś %s$ (%s) dla %s",
|
||||
["received_account_money"] = "otrzymałeś/aś %s$ (%s) od %s",
|
||||
["amount_invalid"] = "nieprawidłowa ilość",
|
||||
["players_nearby"] = "brak graczy w pobliżu",
|
||||
["ex_inv_lim"] = "akcja nie jest możliwa, nie możesz mieć więcej %s",
|
||||
["imp_invalid_quantity"] = "akcja jest niemożliwa, nieprawidłowa ilość",
|
||||
["imp_invalid_amount"] = "akcja jest niemożliwa, nieprawidłowa kwota",
|
||||
["threw_standard"] = "wyrzuciłeś/aś %sx %s",
|
||||
["threw_account"] = "wyrzuciłeś/aś $%s %s",
|
||||
["threw_weapon"] = "wyrzuciłeś/aś %s",
|
||||
["threw_weapon_ammo"] = "wyrzuciłeś/aś %s z ~o~%sx %s",
|
||||
["threw_weapon_already"] = "już posiadasz taką samą broń",
|
||||
["threw_cannot_pickup"] = "nie możesz tego podnieść, gdyż masz pełny ekwipunek!",
|
||||
["threw_pickup_prompt"] = "naciśnij E aby podnieść",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "pokaż ekwipunek",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "otrzymałeś/aś wynagrodzenie: %s$",
|
||||
["received_help"] = "otrzymałeś/aś zapomogę: $%s",
|
||||
["company_nomoney"] = "firma, w której pracujesz, jest zbyt biedna, by wypłacić twoją pensję",
|
||||
["received_paycheck"] = "otrzymano wypłate",
|
||||
["bank"] = "bank",
|
||||
["account_bank"] = "bank",
|
||||
["account_black_money"] = "brudne pieniądze",
|
||||
["account_money"] = "pieniądze",
|
||||
["act_imp"] = "działanie niemożliwe",
|
||||
["in_vehicle"] = "nie możesz przekazywać przedmiotów w pojeździe",
|
||||
["not_in_vehicle"] = "Cannot Perform Action, Player isn't in a vehicle",
|
||||
|
||||
-- Commands
|
||||
["command_car"] = "przywołaj pojazd",
|
||||
["command_car_car"] = "nazwa lub hash przywołanego pojazdu",
|
||||
["command_cardel"] = "usuń pojazd w pobliżu",
|
||||
["command_cardel_radius"] = "opcjonalnie usuń każdy pojazd w obszarze",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "wyczyść czat",
|
||||
["command_clearall"] = "wyczyść czat dla wszystkich graczy",
|
||||
["command_clearinventory"] = "wyczyść ekwipunek gracza",
|
||||
["command_clearloadout"] = "wyczyść wyposarzenie gracza",
|
||||
["command_giveaccountmoney"] = "daj pieniądze na podany typ konta",
|
||||
["command_giveaccountmoney_account"] = "prawidłowy typ konta",
|
||||
["command_giveaccountmoney_amount"] = "ilość do dodania",
|
||||
["command_giveaccountmoney_invalid"] = "nieprawidłowy typ konta",
|
||||
["command_giveitem"] = "daj przedmiot graczowi",
|
||||
["command_giveitem_item"] = "nazwa przedmiotu",
|
||||
["command_giveitem_count"] = "ilość przedimotu",
|
||||
["command_giveweapon"] = "daj broń graczowi",
|
||||
["command_giveweapon_weapon"] = "nazwa broni",
|
||||
["command_giveweapon_ammo"] = "ilość amunicji",
|
||||
["command_giveweapon_hasalready"] = "gracz już posiada tą broń",
|
||||
["command_giveweaponcomponent"] = "daj komponent do broni graczowi",
|
||||
["command_giveweaponcomponent_component"] = "nazwa komponentu",
|
||||
["command_giveweaponcomponent_invalid"] = "nieprawidłowy komponent do broni",
|
||||
["command_giveweaponcomponent_hasalready"] = "gracz już posiada ten komponent do tej broni",
|
||||
["command_giveweaponcomponent_missingweapon"] = "gracz nie posiada tej broni",
|
||||
["command_save"] = "zapisz gracza w bazie danych",
|
||||
["command_saveall"] = "zapisz wszystkich graczy w bazie danych",
|
||||
["command_setaccountmoney"] = "ustaw ilość pieniędzy danego konta dla gracza",
|
||||
["command_setaccountmoney_amount"] = "ilość pieniędzy do ustawienia",
|
||||
["command_setcoords"] = "teleportuj na koordynaty",
|
||||
["command_setcoords_x"] = "x axis",
|
||||
["command_setcoords_y"] = "y axis",
|
||||
["command_setcoords_z"] = "z axis",
|
||||
["command_setjob"] = "ustaw prace dla gracza",
|
||||
["command_setjob_job"] = "nazwa pracy",
|
||||
["command_setjob_grade"] = "stanowisko w pracy",
|
||||
["command_setjob_invalid"] = "praca, stanowisko lub obydwa są nieprawidłowe",
|
||||
["command_setgroup"] = "ustaw grupe gracza",
|
||||
["command_setgroup_group"] = "nazwa grupy",
|
||||
["commanderror_argumentmismatch"] = "nieprawiłowa ilość argumentów (przeszło %s, wymagane %s)",
|
||||
["commanderror_argumentmismatch_number"] = "nieprawidłowy typ argumentu #%s (przeszedł tekst, wymagany numer)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Nieprawidłowy argument #%s typ danych (przekazano ujemny/zero, oczekiwano liczby dodatniej)",
|
||||
["commanderror_invaliditem"] = "nieprawidłowa nazwa przedmiotu",
|
||||
["commanderror_invalidweapon"] = "nieprawidłowa broń",
|
||||
["commanderror_console"] = "podana komenda nie może zostać uruchomiona przez konsole",
|
||||
["commanderror_invalidcommand"] = "/%s nie jest poprawną komendą!",
|
||||
["commanderror_invalidplayerid"] = "brak dostepnego gracza pasującego do podanego id serwerowego",
|
||||
["commandgeneric_playerid"] = "id gracza",
|
||||
["command_giveammo_noweapon_found"] = "%s does not have that weapon",
|
||||
["command_giveammo_weapon"] = "Weapon name",
|
||||
["command_giveammo_ammo"] = "Ammo Quantity",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "$%s",
|
||||
|
||||
-- Weapons
|
||||
["weapon_knife"] = "nóż",
|
||||
["weapon_nightstick"] = "pałka",
|
||||
["weapon_hammer"] = "młotek",
|
||||
["weapon_bat"] = "kij",
|
||||
["weapon_golfclub"] = "kij golfowy",
|
||||
["weapon_crowbar"] = "łom",
|
||||
["weapon_pistol"] = "pistolet",
|
||||
["weapon_combatpistol"] = "pistolet bojowy",
|
||||
["weapon_appistol"] = "ap pistol",
|
||||
["weapon_pistol50"] = "pistol .50",
|
||||
["weapon_microsmg"] = "micro smg",
|
||||
["weapon_smg"] = "smg",
|
||||
["weapon_assaultsmg"] = "assault smg",
|
||||
["weapon_assaultrifle"] = "assault rifle",
|
||||
["weapon_carbinerifle"] = "carbine rifle",
|
||||
["weapon_advancedrifle"] = "advanced rifle",
|
||||
["weapon_mg"] = "mg",
|
||||
["weapon_combatmg"] = "combat mg",
|
||||
["weapon_pumpshotgun"] = "pump shotgun",
|
||||
["weapon_sawnoffshotgun"] = "sawed off shotgun",
|
||||
["weapon_assaultshotgun"] = "assault shotgun",
|
||||
["weapon_bullpupshotgun"] = "bullpup shotgun",
|
||||
["weapon_stungun"] = "tazer",
|
||||
["weapon_sniperrifle"] = "karabin snajperski",
|
||||
["weapon_heavysniper"] = "ciężki karabin snajperski",
|
||||
["weapon_grenadelauncher"] = "granatnik",
|
||||
["weapon_rpg"] = "wyrzutnia rakiet",
|
||||
["weapon_minigun"] = "minigun",
|
||||
["weapon_grenade"] = "granat",
|
||||
["weapon_stickybomb"] = "ładunek przylepny",
|
||||
["weapon_smokegrenade"] = "granat dymny",
|
||||
["weapon_bzgas"] = "bz gas",
|
||||
["weapon_molotov"] = "koktajl Mołotowa",
|
||||
["weapon_fireextinguisher"] = "gaśnica",
|
||||
["weapon_petrolcan"] = "kanister",
|
||||
["weapon_ball"] = "piłka",
|
||||
["weapon_snspistol"] = "sns pistolet",
|
||||
["weapon_bottle"] = "butelka",
|
||||
["weapon_gusenberg"] = "gusenberg sweeper",
|
||||
["weapon_specialcarbine"] = "special carbine",
|
||||
["weapon_heavypistol"] = "heavy pistol",
|
||||
["weapon_bullpuprifle"] = "karabin wyborowy",
|
||||
["weapon_dagger"] = "sztylet",
|
||||
["weapon_vintagepistol"] = "vintage pistol",
|
||||
["weapon_firework"] = "fajerwerki",
|
||||
["weapon_musket"] = "muszkiet",
|
||||
["weapon_heavyshotgun"] = "ciężki shotgun",
|
||||
["weapon_marksmanrifle"] = "marksman rifle",
|
||||
["weapon_hominglauncher"] = "program uruchamiający",
|
||||
["weapon_proxmine"] = "mina zbliżeniowa",
|
||||
["weapon_snowball"] = "śnieżka",
|
||||
["weapon_flaregun"] = "flara",
|
||||
["weapon_combatpdw"] = "combat pdw",
|
||||
["weapon_marksmanpistol"] = "marksman pistol",
|
||||
["weapon_knuckle"] = "kastety",
|
||||
["weapon_hatchet"] = "toporek",
|
||||
["weapon_railgun"] = "karabin",
|
||||
["weapon_machete"] = "meczeta",
|
||||
["weapon_machinepistol"] = "pistolet maszynowy",
|
||||
["weapon_switchblade"] = "scyzoryk",
|
||||
["weapon_revolver"] = "ciężki rewolwer",
|
||||
["weapon_dbshotgun"] = "dwururka",
|
||||
["weapon_compactrifle"] = "compact rifle",
|
||||
["weapon_autoshotgun"] = "auto shotgun",
|
||||
["weapon_battleaxe"] = "topór bitewny",
|
||||
["weapon_compactlauncher"] = "compact launcher",
|
||||
["weapon_minismg"] = "mini smg",
|
||||
["weapon_pipebomb"] = "bomba rurowa",
|
||||
["weapon_poolcue"] = "kij bilardowy",
|
||||
["weapon_wrench"] = "klucz do rur",
|
||||
["weapon_flashlight"] = "latarka",
|
||||
["gadget_parachute"] = "spadochron",
|
||||
["weapon_flare"] = "pistolet sygnałowy",
|
||||
["weapon_doubleaction"] = "double-Action Revolver",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle", -- Not Translated
|
||||
|
||||
-- Weapon Components
|
||||
["component_clip_default"] = "domyślny tłumik",
|
||||
["component_clip_extended"] = "rozszerzony tłumik",
|
||||
["component_clip_drum"] = "magazynek bębnowy",
|
||||
["component_clip_box"] = "magazynek",
|
||||
["component_flashlight"] = "latarka",
|
||||
["component_scope"] = "luneta",
|
||||
["component_scope_advanced"] = "zaawansowana luneta",
|
||||
["component_suppressor"] = "tłumik",
|
||||
["component_grip"] = "uchwyt",
|
||||
["component_luxary_finish"] = "luksusowe wykończenie broni",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Candy Cane", -- not translated
|
||||
["weapon_acidpackage"] = "Acid Package", -- not translated
|
||||
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
|
||||
["weapon_railgunxm3"] = "Railgun", -- not translated
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "nabój/oi",
|
||||
["ammo_shells"] = "pocisk(ów)",
|
||||
["ammo_charge"] = "naładowania",
|
||||
["ammo_petrol"] = "galon(y) paliwa",
|
||||
["ammo_firework"] = "fajerwerka/i",
|
||||
["ammo_rockets"] = "rakieta/y",
|
||||
["ammo_grenadelauncher"] = "granat(y)",
|
||||
["ammo_grenade"] = "granat(y)",
|
||||
["ammo_stickybomb"] = "bomba/y",
|
||||
["ammo_pipebomb"] = "bomba/y",
|
||||
["ammo_smokebomb"] = "bomba/y",
|
||||
["ammo_molotov"] = "kontail(e)",
|
||||
["ammo_proxmine"] = "mina/y",
|
||||
["ammo_bzgas"] = "puszka/ek",
|
||||
["ammo_ball"] = "kula/e",
|
||||
["ammo_snowball"] = "snieżka/i",
|
||||
["ammo_flare"] = "flara/y",
|
||||
["ammo_flaregun"] = "flara/y",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "domyślny skin",
|
||||
["tint_green"] = "zielony skin",
|
||||
["tint_gold"] = "złoty skin",
|
||||
["tint_pink"] = "różowy skin",
|
||||
["tint_army"] = "wojskowy skin",
|
||||
["tint_lspd"] = "niebieski skin",
|
||||
["tint_orange"] = "pomarańczowy skin",
|
||||
["tint_platinum"] = "platynowy skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klasyczna czerń",
|
||||
["tint_classic_gray"] = "klasyczny szary",
|
||||
["tint_classic_two_tone"] = "klasyczny dwutonowy",
|
||||
["tint_classic_white"] = "klasyczna biel",
|
||||
["tint_classic_beige"] = "klasyczny beż",
|
||||
["tint_classic_green"] = "klasyczna zieleń",
|
||||
["tint_classic_blue"] = "klasyczny niebieski",
|
||||
["tint_classic_earth"] = "klasyczna ziemia",
|
||||
["tint_classic_brown_black"] = "klasyczny brązowo-czarny",
|
||||
["tint_contrast_red"] = "kontrastowy czerwony",
|
||||
["tint_contrast_blue"] = "kontrastowy niebieski",
|
||||
["tint_contrast_yellow"] = "kontrastowy żółty",
|
||||
["tint_contrast_orange"] = "kontrastowy pomarańczowy",
|
||||
["tint_bold_pink"] = "odważny różowy",
|
||||
["tint_bold_purple_yellow"] = "odważny fioletowo-żółty",
|
||||
["tint_bold_orange"] = "odważny pomarańczowy",
|
||||
["tint_bold_green_purple"] = "odważny zielono-fioletowy",
|
||||
["tint_bold_red_feat"] = "odważny czerwony feat",
|
||||
["tint_bold_green_feat"] = "odważny zielony feat",
|
||||
["tint_bold_cyan_feat"] = "odważny cyjan feat",
|
||||
["tint_bold_yellow_feat"] = "odważny żółty feat",
|
||||
["tint_bold_red_white"] = "odważny czerwony biały",
|
||||
["tint_bold_blue_white"] = "odważny niebieski biały",
|
||||
["tint_metallic_gold"] = "złoto metaliczne",
|
||||
["tint_metallic_platinum"] = "platyna metaliczna",
|
||||
["tint_metallic_gray_lilac"] = "szaro-liliowe metaliczne",
|
||||
["tint_metallic_purple_lime"] = "fioletowo-limonkowe metaliczne",
|
||||
["tint_metallic_red"] = "czerwony metaliczny",
|
||||
["tint_metallic_green"] = "zielony metaliczny",
|
||||
["tint_metallic_blue"] = "niebieski metaliczny",
|
||||
["tint_metallic_white_aqua"] = "białe aqua metaliczne",
|
||||
["tint_metallic_red_yellow"] = "czerwono-żółte metaliczne",
|
||||
}
|
||||
411
resources/[core]/es_extended/locales/sl.lua
Normal file
411
resources/[core]/es_extended/locales/sl.lua
Normal file
@@ -0,0 +1,411 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Shramba ( Teza %s / %s )",
|
||||
["use"] = "Uporabi",
|
||||
["give"] = "Daj",
|
||||
["remove"] = "Vrzi",
|
||||
["return"] = "Povratek",
|
||||
["give_to"] = "Daj",
|
||||
["amount"] = "Vsota",
|
||||
["giveammo"] = "Daj Strelivo",
|
||||
["amountammo"] = "Količina streliva",
|
||||
["noammo"] = "Ni dovolj!",
|
||||
["gave_item"] = "Dal si %sx %s k %s",
|
||||
["received_item"] = "Dobil si %sx %s od %s",
|
||||
["gave_weapon"] = "Dajanje %s do %s",
|
||||
["gave_weapon_ammo"] = "Dajanje ~o~%sx %s za %s do %s",
|
||||
["gave_weapon_withammo"] = "Dajanje %s z ~o~%sx %s do %s",
|
||||
["gave_weapon_hasalready"] = "%s ze ima %s",
|
||||
["gave_weapon_noweapon"] = "%s se nima tega orozja",
|
||||
["received_weapon"] = "Dobil si %s od %s",
|
||||
["received_weapon_ammo"] = "Dobil ~o~%sx %s za tvoj/o %s od %s",
|
||||
["received_weapon_withammo"] = "Dobil si %s z ~o~%sx %s od %s",
|
||||
["received_weapon_hasalready"] = "%s vam je poskušal dati %s, vendar že imate to orožje",
|
||||
["received_weapon_noweapon"] = "%s vam je poskušal dati strelivo za %s, vendar nimate tega orožja",
|
||||
["gave_account_money"] = "Dajanje $%s (%s) do %s",
|
||||
["received_account_money"] = "Dobil $%s (%s) od %s",
|
||||
["amount_invalid"] = "Neveljavna količina",
|
||||
["players_nearby"] = "V blizini ni ljudi",
|
||||
["ex_inv_lim"] = "Dejanja ni mogoče izvesti, saj presega največjo težo %s",
|
||||
["imp_invalid_quantity"] = "Dejanja ni mogoče izvesti, količina je neveljavna",
|
||||
["imp_invalid_amount"] = "Dejanja ni mogoče izvesti, znesek je neveljaven",
|
||||
["threw_standard"] = "Metanje %sx %s",
|
||||
["threw_account"] = "Metanje $%s %s",
|
||||
["threw_weapon"] = "Metanje %s",
|
||||
["threw_weapon_ammo"] = "Metanje %s z ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Ti ze imas to orozje",
|
||||
["threw_cannot_pickup"] = "Shramba je poln, nemorem pobrati!",
|
||||
["threw_pickup_prompt"] = "Pritisni E da poberes",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Pokazi Shrambo",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Vi ste plačali: $%s",
|
||||
["received_help"] = "Vi ste placali svoj CEK v vrednosti: $%s",
|
||||
["company_nomoney"] = "podjetje, v katerem ste zaposleni, je prerevno, da bi vam izplačevalo plačo",
|
||||
["received_paycheck"] = "Prejel si Placilo",
|
||||
["bank"] = "NLB",
|
||||
["account_bank"] = "Banka",
|
||||
["account_black_money"] = "Umazan Denar",
|
||||
["account_money"] = "Denar",
|
||||
|
||||
["act_imp"] = "Dejanja ni mogoče izvesti",
|
||||
["in_vehicle"] = "Dejanja ni mogoče izvesti, Oseba je v vozilu",
|
||||
["not_in_vehicle"] = "Cannot Perform Action, Player isn't in a vehicle",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Teleportiraj osebo do sebe",
|
||||
["command_car"] = "Spawnaj si vozilo",
|
||||
["command_car_car"] = "Koda vozila",
|
||||
["command_cardel"] = "Odstranite vozila v bližini",
|
||||
["command_cardel_radius"] = "Odstrani vsa vozila v določenem radiju",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "Odstrani vsa sporocila v CHATU",
|
||||
["command_clearall"] = "Počisti besedilo klepeta za vse igralce",
|
||||
["command_clearinventory"] = "Vzemi vse stvari iz osebove shrambe",
|
||||
["command_clearloadout"] = "Odstranite vse orožje iz nalaganja igralcev",
|
||||
["command_freeze"] = "Zmrzni osebno",
|
||||
["command_unfreeze"] = "Odmrzni osebo",
|
||||
["command_giveaccountmoney"] = "Poslji denar na dolocen Bancni racun",
|
||||
["command_giveaccountmoney_account"] = "Račun za dodajanje",
|
||||
["command_giveaccountmoney_amount"] = "Znesek za dodajanje",
|
||||
["command_giveaccountmoney_invalid"] = "Ime računa je neveljavno",
|
||||
["command_giveitem"] = "Daj osebi neko stvar",
|
||||
["command_giveitem_item"] = "Ime Stvari",
|
||||
["command_giveitem_count"] = "Kolicina",
|
||||
["command_giveweapon"] = "Daj osebi orozje",
|
||||
["command_giveweapon_weapon"] = "Ime orozja",
|
||||
["command_giveweapon_ammo"] = "Kolicina",
|
||||
["command_giveweapon_hasalready"] = "Oseba ze ima to orozje!",
|
||||
["command_giveweaponcomponent"] = "Daj komponento orožja igralcu",
|
||||
["command_giveweaponcomponent_component"] = "Ime Komponente",
|
||||
["command_giveweaponcomponent_invalid"] = "Neveljavna komponenta orožja",
|
||||
["command_giveweaponcomponent_hasalready"] = "Oseba ze ima to komponento",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Oseba nima tega orozja!",
|
||||
["command_goto"] = "Teleportirajte se k igralcu",
|
||||
["command_kill"] = "Ubij igralca",
|
||||
["command_save"] = "Prisilno shrani podatke igralca!",
|
||||
["command_saveall"] = "Prisilno shrani vse podatke igralca",
|
||||
["command_setaccountmoney"] = "Nastavite denar znotraj dolocenega racuna",
|
||||
["command_setaccountmoney_amount"] = "Znesek",
|
||||
["command_setcoords"] = "Teleport na dolocene koordinate",
|
||||
["command_setcoords_x"] = "Vrednost X",
|
||||
["command_setcoords_y"] = "Vrednost Y",
|
||||
["command_setcoords_z"] = "Z vrednost",
|
||||
["command_setjob"] = "Nastavi opravilo igralca",
|
||||
["command_setjob_job"] = "Ime",
|
||||
["command_setjob_grade"] = "Delovna ocena",
|
||||
["command_setjob_invalid"] = "delovno mesto, ocena ali oboje ni veljavno",
|
||||
["command_setgroup"] = "Nastavi skupino dovoljenj igralcev",
|
||||
["command_setgroup_group"] = "Ime skupine",
|
||||
["commanderror_argumentmismatch"] = "Neveljavno stetje argumentov (podano %s, zeleno %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Neveljaven podatkovni tip argumenta #%s (posredovan niz, zeleno stevilo)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Neveljaven argument #%s tip podatkov (podano negativno/nič, zahtevano pozitivno število)",
|
||||
["commanderror_invaliditem"] = "Neveljaven element",
|
||||
["commanderror_invalidweapon"] = "Neveljavno orozje",
|
||||
["commanderror_console"] = "Ukaza ni mogoce izvesti s konzole",
|
||||
["commanderror_invalidcommand"] = "Neveljaven ukaz - /%s",
|
||||
["commanderror_invalidplayerid"] = "Naveden igralec ni na spletu",
|
||||
["commandgeneric_playerid"] = "Id streznika igralca",
|
||||
["command_giveammo_noweapon_found"] = "%s nima tega orozja",
|
||||
["command_giveammo_weapon"] = "Ime orozja",
|
||||
["command_giveammo_ammo"] = "Kolicina streliva",
|
||||
["tpm_nowaypoint"] = "Ni nastavljene poti!.",
|
||||
["tpm_success"] = "Uspesno teleportiran",
|
||||
|
||||
["noclip_message"] = "Noclip je bil %s",
|
||||
["enabled"] = "~g~Vkljucen~s~",
|
||||
["disabled"] = "~r~Izkljucen~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "€%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dagger",
|
||||
["weapon_bat"] = "Bat",
|
||||
["weapon_battleaxe"] = "Battle Axe",
|
||||
["weapon_bottle"] = "Bottle",
|
||||
["weapon_crowbar"] = "Crowbar",
|
||||
["weapon_flashlight"] = "Flashlight",
|
||||
["weapon_golfclub"] = "Golf Club",
|
||||
["weapon_hammer"] = "Hammer",
|
||||
["weapon_hatchet"] = "Hatchet",
|
||||
["weapon_knife"] = "Knife",
|
||||
["weapon_knuckle"] = "Knuckledusters",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Nightstick",
|
||||
["weapon_wrench"] = "Pipe Wrench",
|
||||
["weapon_poolcue"] = "Pool Cue",
|
||||
["weapon_stone_hatchet"] = "Stone Hatchet",
|
||||
["weapon_switchblade"] = "Switchblade",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic Pistol",
|
||||
["weapon_combatpistol"] = "Combat Pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle", -- Not Translated
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metal Detector",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Candy Cane", -- not translated
|
||||
["weapon_acidpackage"] = "Acid Package", -- not translated
|
||||
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
|
||||
["weapon_railgunxm3"] = "Railgun", -- not translated
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Grenade",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotov Cocktail",
|
||||
["weapon_proxmine"] = "Proximity Mine",
|
||||
["weapon_pipebomb"] = "Pipe Bomb",
|
||||
["weapon_snowball"] = "Snowball",
|
||||
["weapon_stickybomb"] = "Sticky Bomb",
|
||||
["weapon_smokegrenade"] = "Tear Gas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Fire Extinguisher",
|
||||
["weapon_digiscanner"] = "Digital Scanner",
|
||||
["weapon_garbagebag"] = "Garbage Bag",
|
||||
["weapon_handcuffs"] = "Handcuffs",
|
||||
["gadget_nightvision"] = "Night Vision",
|
||||
["gadget_parachute"] = "parachute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "flashlight",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "round(s)",
|
||||
["ammo_shells"] = "shell(s)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "gallons of fuel",
|
||||
["ammo_firework"] = "firework(s)",
|
||||
["ammo_rockets"] = "rocket(s)",
|
||||
["ammo_grenadelauncher"] = "grenade(s)",
|
||||
["ammo_grenade"] = "grenade(s)",
|
||||
["ammo_stickybomb"] = "bomb(s)",
|
||||
["ammo_pipebomb"] = "bomb(s)",
|
||||
["ammo_smokebomb"] = "bomb(s)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mine(s)",
|
||||
["ammo_bzgas"] = "can(s)",
|
||||
["ammo_ball"] = "ball(s)",
|
||||
["ammo_snowball"] = "snowball(s)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klasična črna",
|
||||
["tint_classic_gray"] = "klasična siva",
|
||||
["tint_classic_two_tone"] = "klasična dvo-tonska",
|
||||
["tint_classic_white"] = "klasična bela",
|
||||
["tint_classic_beige"] = "klasična bež",
|
||||
["tint_classic_green"] = "klasična zelena",
|
||||
["tint_classic_blue"] = "klasična modra",
|
||||
["tint_classic_earth"] = "klasična zemlja",
|
||||
["tint_classic_brown_black"] = "klasična rjava-črna",
|
||||
["tint_contrast_red"] = "kontrastna rdeča",
|
||||
["tint_contrast_blue"] = "kontrastna modra",
|
||||
["tint_contrast_yellow"] = "kontrastna rumena",
|
||||
["tint_contrast_orange"] = "kontrastna oranžna",
|
||||
["tint_bold_pink"] = "drzna roza",
|
||||
["tint_bold_purple_yellow"] = "drzna vijolično-rumena",
|
||||
["tint_bold_orange"] = "drzna oranžna",
|
||||
["tint_bold_green_purple"] = "drzna zelena-vijolična",
|
||||
["tint_bold_red_feat"] = "drzna rdeča feat",
|
||||
["tint_bold_green_feat"] = "drzna zelena feat",
|
||||
["tint_bold_cyan_feat"] = "drzna cian feat",
|
||||
["tint_bold_yellow_feat"] = "drzna rumena feat",
|
||||
["tint_bold_red_white"] = "drzna rdeča bela",
|
||||
["tint_bold_blue_white"] = "drzna modra bela",
|
||||
["tint_metallic_gold"] = "metalik zlato",
|
||||
["tint_metallic_platinum"] = "metalik platina",
|
||||
["tint_metallic_gray_lilac"] = "metalik siv lila",
|
||||
["tint_metallic_purple_lime"] = "metalik vijolična limona",
|
||||
["tint_metallic_red"] = "metalik rdeča",
|
||||
["tint_metallic_green"] = "metalik zelena",
|
||||
["tint_metallic_blue"] = "metalik modra",
|
||||
["tint_metallic_white_aqua"] = "metalik bela aqua",
|
||||
["tint_metallic_red_yellow"] = "metalik rdeče rumeno",
|
||||
}
|
||||
411
resources/[core]/es_extended/locales/sr.lua
Normal file
411
resources/[core]/es_extended/locales/sr.lua
Normal file
@@ -0,0 +1,411 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventar ( Težina %s / %s )",
|
||||
["use"] = "Koristi",
|
||||
["give"] = "Daj",
|
||||
["remove"] = "Baci",
|
||||
["return"] = "Nazad",
|
||||
["give_to"] = "Daj",
|
||||
["amount"] = "Količina",
|
||||
["giveammo"] = "Daj municiju",
|
||||
["amountammo"] = "Količina municije",
|
||||
["noammo"] = "Nemate dovoljno!",
|
||||
["gave_item"] = "Davanje %sx %s igraču %s",
|
||||
["received_item"] = "Dobijeno %sx %s od %s",
|
||||
["gave_weapon"] = "Davanje %s igraču %s",
|
||||
["gave_weapon_ammo"] = "Davanje ~o~%sx %s za %s igraču %s",
|
||||
["gave_weapon_withammo"] = "Davanje %s sa ~o~%sx %s igraču %s",
|
||||
["gave_weapon_hasalready"] = "%s već ima %s",
|
||||
["gave_weapon_noweapon"] = "%s nema to oružje",
|
||||
["received_weapon"] = "Dobijeno %s od %s",
|
||||
["received_weapon_ammo"] = "Dobijeno ~o~%sx %s za vaš %s od %s",
|
||||
["received_weapon_withammo"] = "Dobijeno %s sa ~o~%sx %s od %s",
|
||||
["received_weapon_hasalready"] = "%s je pokušao da Vam da %s, ali vi već imate to oružje",
|
||||
["received_weapon_noweapon"] = "%s je pokušao da Vam da municiju za %s, ali vi nemate to oružje",
|
||||
["gave_account_money"] = "Davanje $%s (%s) igraču %s",
|
||||
["received_account_money"] = "Dobijeno $%s (%s) od %s",
|
||||
["amount_invalid"] = "Nevažeća količina",
|
||||
["players_nearby"] = "Nema igrača u blizini",
|
||||
["ex_inv_lim"] = "Ne možete uraditi to, premašuje max težinu od %s",
|
||||
["imp_invalid_quantity"] = "Nevažeća količina",
|
||||
["imp_invalid_amount"] = "Nevažeći iznos",
|
||||
["threw_standard"] = "Bacanje %sx %s",
|
||||
["threw_account"] = "Bacanje $%s %s",
|
||||
["threw_weapon"] = "Bacanje %s",
|
||||
["threw_weapon_ammo"] = "Bacanje %s sa ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Vi već imate to oružje",
|
||||
["threw_cannot_pickup"] = "Inventar je pun, ne možete pokupiti to!",
|
||||
["threw_pickup_prompt"] = "Pritisni E da pokupiš",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Otvaranje inventara",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Plaćeno Vam je: $%s",
|
||||
["received_help"] = "Isplaćen Vam je ček: $%s",
|
||||
["company_nomoney"] = "Kompanija u kojoj ste zapošljeni nema više novca",
|
||||
["received_paycheck"] = "primili ste platu",
|
||||
["bank"] = "Maze Banka",
|
||||
["account_bank"] = "Banka",
|
||||
["account_black_money"] = "Prljav novac",
|
||||
["account_money"] = "Novac",
|
||||
|
||||
["act_imp"] = "Ne možete izvršiti radnju",
|
||||
["in_vehicle"] = "Ne možete uraditi to dok je igrač u vozilu",
|
||||
["not_in_vehicle"] = "Cannot Perform Action, Player isn't in a vehicle",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "TP-ajte igrača do Vas",
|
||||
["command_car"] = "Stvorite vozilo",
|
||||
["command_car_car"] = "Model ili hash vozila",
|
||||
["command_cardel"] = "Obrišite vozilo u blizini",
|
||||
["command_cardel_radius"] = "Obrišite sva vozila unutar navedenog radiusa",
|
||||
["command_repair"] = "Repair your vehicle",
|
||||
["command_repair_success"] = "Successfully repaired vehicle",
|
||||
["command_repair_success_target"] = "An admin repaired your vehicle",
|
||||
["command_clear"] = "Obrišite chat",
|
||||
["command_clearall"] = "Obrišite chat za sve igrače",
|
||||
["command_clearinventory"] = "Obrišite sve stvari iz inventara igrača",
|
||||
["command_clearloadout"] = "Obrišite sva oružja iz inventara igrača",
|
||||
["command_freeze"] = "Zaledite igrača",
|
||||
["command_unfreeze"] = "Odledite igrača",
|
||||
["command_giveaccountmoney"] = "Dajte novac na odredjeni nalog",
|
||||
["command_giveaccountmoney_account"] = "Nalog za slanje",
|
||||
["command_giveaccountmoney_amount"] = "Količina",
|
||||
["command_giveaccountmoney_invalid"] = "Nalog nepostojeći",
|
||||
["command_giveitem"] = "Dajte item igraču",
|
||||
["command_giveitem_item"] = "Ime item-a",
|
||||
["command_giveitem_count"] = "Količina",
|
||||
["command_giveweapon"] = "Dajte oružje igraču",
|
||||
["command_giveweapon_weapon"] = "Ime oružja",
|
||||
["command_giveweapon_ammo"] = "Količina municije",
|
||||
["command_giveweapon_hasalready"] = "Igrač već ima to oružje",
|
||||
["command_giveweaponcomponent"] = "Dajte dodatak za oružje igraču",
|
||||
["command_giveweaponcomponent_component"] = "Ime dodatka",
|
||||
["command_giveweaponcomponent_invalid"] = "Nevažeći dodatak",
|
||||
["command_giveweaponcomponent_hasalready"] = "Igrač već ima taj dodatak",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Igrač nema oružje",
|
||||
["command_goto"] = "Idite do igrača",
|
||||
["command_kill"] = "Ubijte igrača",
|
||||
["command_save"] = "Forsirajte čuvanje date igrača",
|
||||
["command_saveall"] = "Forsirajte čuvanje date svih igrača",
|
||||
["command_setaccountmoney"] = "Postavite novac na određeni račun",
|
||||
["command_setaccountmoney_amount"] = "Količina",
|
||||
["command_setcoords"] = "Teleportujte se na koordinate",
|
||||
["command_setcoords_x"] = "X",
|
||||
["command_setcoords_y"] = "Y",
|
||||
["command_setcoords_z"] = "Z",
|
||||
["command_setjob"] = "Postavite posao igraču",
|
||||
["command_setjob_job"] = "Ime",
|
||||
["command_setjob_grade"] = "Stepen posla",
|
||||
["command_setjob_invalid"] = "posao, stepen ili oba nisu validna",
|
||||
["command_setgroup"] = "Postavite permisiju",
|
||||
["command_setgroup_group"] = "Ime grupe",
|
||||
["commanderror_argumentmismatch"] = "Nevazeci broj argumenata (položio %s, željeno %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Nevažeći argument #%s tip podataka (položeno, željeno)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Nevaljan argument #%s tip podataka (prosleđen negativan/nula, potreban pozitivan broj)",
|
||||
["commanderror_invaliditem"] = "Nevažeći item",
|
||||
["commanderror_invalidweapon"] = "Nevažeće oružje",
|
||||
["commanderror_console"] = "Komanda se ne može izvršiti iz konzole",
|
||||
["commanderror_invalidcommand"] = "Nevažeća komanda - /%s",
|
||||
["commanderror_invalidplayerid"] = "Igrač nije online",
|
||||
["commandgeneric_playerid"] = "Igračev server ID",
|
||||
["command_giveammo_noweapon_found"] = "%s nema to oružje",
|
||||
["command_giveammo_weapon"] = "Ime oružja",
|
||||
["command_giveammo_ammo"] = "Količina municije",
|
||||
["tpm_nowaypoint"] = "Morate označiti lokaciju.",
|
||||
["tpm_success"] = "Teleportovani ste na lokaciju",
|
||||
|
||||
["noclip_message"] = "Noclip %s",
|
||||
["enabled"] = "~g~upaljen~s~",
|
||||
["disabled"] = "~r~ugašen~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "£%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dagger",
|
||||
["weapon_bat"] = "Bat",
|
||||
["weapon_battleaxe"] = "Battle Axe",
|
||||
["weapon_bottle"] = "Bottle",
|
||||
["weapon_crowbar"] = "Crowbar",
|
||||
["weapon_flashlight"] = "Flashlight",
|
||||
["weapon_golfclub"] = "Golf Club",
|
||||
["weapon_hammer"] = "Hammer",
|
||||
["weapon_hatchet"] = "Hatchet",
|
||||
["weapon_knife"] = "Knife",
|
||||
["weapon_knuckle"] = "Knuckledusters",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Nightstick",
|
||||
["weapon_wrench"] = "Pipe Wrench",
|
||||
["weapon_poolcue"] = "Pool Cue",
|
||||
["weapon_stone_hatchet"] = "Stone Hatchet",
|
||||
["weapon_switchblade"] = "Switchblade",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic Pistol",
|
||||
["weapon_combatpistol"] = "Combat Pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle", -- Not Translated
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metal Detector",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug Wars DLC
|
||||
["weapon_candycane"] = "Candy Cane", -- not translated
|
||||
["weapon_acidpackage"] = "Acid Package", -- not translated
|
||||
["weapon_pistolxm3"] = "WM 29 Pistol", -- not translated
|
||||
["weapon_railgunxm3"] = "Railgun", -- not translated
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Flare",
|
||||
["weapon_grenade"] = "Grenade",
|
||||
["weapon_petrolcan"] = "Jerrycan",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotov Cocktail",
|
||||
["weapon_proxmine"] = "Proximity Mine",
|
||||
["weapon_pipebomb"] = "Pipe Bomb",
|
||||
["weapon_snowball"] = "Snowball",
|
||||
["weapon_stickybomb"] = "Sticky Bomb",
|
||||
["weapon_smokegrenade"] = "Tear Gas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Fire Extinguisher",
|
||||
["weapon_digiscanner"] = "Digital Scanner",
|
||||
["weapon_garbagebag"] = "Garbage Bag",
|
||||
["weapon_handcuffs"] = "Handcuffs",
|
||||
["gadget_nightvision"] = "Night Vision",
|
||||
["gadget_parachute"] = "parachute",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "suppressor",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "flashlight",
|
||||
["component_grip"] = "grip",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "round(s)",
|
||||
["ammo_shells"] = "shell(s)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "gallons of fuel",
|
||||
["ammo_firework"] = "firework(s)",
|
||||
["ammo_rockets"] = "rocket(s)",
|
||||
["ammo_grenadelauncher"] = "grenade(s)",
|
||||
["ammo_grenade"] = "grenade(s)",
|
||||
["ammo_stickybomb"] = "bomb(s)",
|
||||
["ammo_pipebomb"] = "bomb(s)",
|
||||
["ammo_smokebomb"] = "bomb(s)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mine(s)",
|
||||
["ammo_bzgas"] = "can(s)",
|
||||
["ammo_ball"] = "ball(s)",
|
||||
["ammo_snowball"] = "snowball(s)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klasična crna",
|
||||
["tint_classic_gray"] = "klasična siva",
|
||||
["tint_classic_two_tone"] = "klasična dvo-tonska",
|
||||
["tint_classic_white"] = "klasična bela",
|
||||
["tint_classic_beige"] = "klasična bež",
|
||||
["tint_classic_green"] = "klasična zelena",
|
||||
["tint_classic_blue"] = "klasična plava",
|
||||
["tint_classic_earth"] = "klasična zemlja",
|
||||
["tint_classic_brown_black"] = "klasična braon-crna",
|
||||
["tint_contrast_red"] = "kontrastna crvena",
|
||||
["tint_contrast_blue"] = "kontrastna plava",
|
||||
["tint_contrast_yellow"] = "kontrastna žuta",
|
||||
["tint_contrast_orange"] = "kontrastna narandžasta",
|
||||
["tint_bold_pink"] = "drska roze",
|
||||
["tint_bold_purple_yellow"] = "drska ljubičasto-žuta",
|
||||
["tint_bold_orange"] = "drska narandžasta",
|
||||
["tint_bold_green_purple"] = "drska zelena-ljubičasta",
|
||||
["tint_bold_red_feat"] = "drska crvena feat",
|
||||
["tint_bold_green_feat"] = "drska zelena feat",
|
||||
["tint_bold_cyan_feat"] = "drska cijan feat",
|
||||
["tint_bold_yellow_feat"] = "drska žuta feat",
|
||||
["tint_bold_red_white"] = "drska crvena bela",
|
||||
["tint_bold_blue_white"] = "drska plava bela",
|
||||
["tint_metallic_gold"] = "metalik zlatna",
|
||||
["tint_metallic_platinum"] = "metalik platina",
|
||||
["tint_metallic_gray_lilac"] = "metalik siva lila",
|
||||
["tint_metallic_purple_lime"] = "metalik ljubičasta limeta",
|
||||
["tint_metallic_red"] = "metalik crvena",
|
||||
["tint_metallic_green"] = "metalik zelena",
|
||||
["tint_metallic_blue"] = "metalik plava",
|
||||
["tint_metallic_white_aqua"] = "metalik bela aqua",
|
||||
["tint_metallic_red_yellow"] = "metalik crvena-žuta",
|
||||
}
|
||||
415
resources/[core]/es_extended/locales/sv.lua
Normal file
415
resources/[core]/es_extended/locales/sv.lua
Normal file
@@ -0,0 +1,415 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Inventory ( Vikt %s / %s )",
|
||||
["use"] = "Använd",
|
||||
["give"] = "Ge",
|
||||
["remove"] = "Kasta",
|
||||
["return"] = "Tillbaka",
|
||||
["give_to"] = "Ge",
|
||||
["amount"] = "Antal",
|
||||
["giveammo"] = "Ge skott",
|
||||
["amountammo"] = "Antal skott",
|
||||
["noammo"] = "Inte tillräckligt!",
|
||||
["gave_item"] = "Ger %sx %s till %s",
|
||||
["received_item"] = "Mottog %sx %s från %s",
|
||||
["gave_weapon"] = "Ger %s till %s",
|
||||
["gave_weapon_ammo"] = "Ger ~o~%sx %s för %s till %s",
|
||||
["gave_weapon_withammo"] = "Ger %s med ~o~%sx %s till %s",
|
||||
["gave_weapon_hasalready"] = "%s har redan en %s",
|
||||
["gave_weapon_noweapon"] = "%s har inte detta vapen",
|
||||
["received_weapon"] = "Mottog %s från %s",
|
||||
["received_weapon_ammo"] = "Mottog ~o~%sx %s för din %s från %s",
|
||||
["received_weapon_withammo"] = "Mottog %s med ~o~%sx %s från %s",
|
||||
["received_weapon_hasalready"] = "%s har försökt ge dig en %s, men du har redan detta",
|
||||
["received_weapon_noweapon"] = "%s har försökt ge dig skott till en %s, men du har inte detta vapen",
|
||||
["gave_account_money"] = "Ger %skr (%s) till %s",
|
||||
["received_account_money"] = "Mottog %skr (%s) från %s",
|
||||
["amount_invalid"] = "Ogiltig mängd",
|
||||
["players_nearby"] = "Inga spelare nära",
|
||||
["ex_inv_lim"] = "Kan inte utföra, överskrider maxvikten på %s",
|
||||
["imp_invalid_quantity"] = "Kan inte utföra, mängden är ogiltig",
|
||||
["imp_invalid_amount"] = "Kan inte utföra, antalet är ogiltig",
|
||||
["threw_standard"] = "Kastar %sx %s",
|
||||
["threw_account"] = "Kastar %skr %s",
|
||||
["threw_weapon"] = "Kastar %s",
|
||||
["threw_weapon_ammo"] = "Kastar %s med ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Du har redan detta vapen",
|
||||
["threw_cannot_pickup"] = "Inventoryt är fullt, kan inte plocka upp!",
|
||||
["threw_pickup_prompt"] = "Tryck E för att plocka upp",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Öppna inventory",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Du har fått ditt bidrag: %skr",
|
||||
["received_help"] = "Du har fått betalt: %skr",
|
||||
["company_nomoney"] = "Företaget du är anställd hos har inte råd med att betala ut lön",
|
||||
["received_paycheck"] = "Mottog lön",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Bank",
|
||||
["account_black_money"] = "Svarta pengar",
|
||||
["account_money"] = "Kontanter",
|
||||
|
||||
["act_imp"] = "Kan inte utföra",
|
||||
["in_vehicle"] = "Kan inte utföra, spelaren är i ett fordon",
|
||||
["not_in_vehicle"] = "Kan inte utföra, spelaren är inte i ett fordon",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Ta en spelare till dig",
|
||||
["command_car"] = "Ta fram ett fordon",
|
||||
["command_car_car"] = "modell",
|
||||
["command_cardel"] = "Raderar fordon inom en specifik radie",
|
||||
["command_cardel_radius"] = "Raderar fordon inom en specifik radie",
|
||||
["command_repair"] = "Reparera ditt fordon",
|
||||
["command_repair_success"] = "Fordon reparerat",
|
||||
["command_repair_success_target"] = "En admin har reparerat ditt fordon",
|
||||
["command_clear"] = "Rensa chatt",
|
||||
["command_clearall"] = "Rensa chatt för alla",
|
||||
["command_clearinventory"] = "Raderar alla föremål från en spelares inventory",
|
||||
["command_clearloadout"] = "Raderar alla vapen från en spelares inventory",
|
||||
["command_freeze"] = "Frys en spelare",
|
||||
["command_unfreeze"] = "Ta bort frysningen från en spelare",
|
||||
["command_giveaccountmoney"] = "Ge pengar till ett specifikt konto",
|
||||
["command_giveaccountmoney_account"] = "Konto",
|
||||
["command_giveaccountmoney_amount"] = "Summa",
|
||||
["command_giveaccountmoney_invalid"] = "Ogiltigt kontonamn",
|
||||
["command_removeaccountmoney"] = "Radera pengar från ett specifikt konto",
|
||||
["command_removeaccountmoney_account"] = "Konto",
|
||||
["command_removeaccountmoney_amount"] = "Summa",
|
||||
["command_removeaccountmoney_invalid"] = "Ogiltigt kontonamn",
|
||||
["command_giveitem"] = "Ge föremål till en spelare",
|
||||
["command_giveitem_item"] = "Namn",
|
||||
["command_giveitem_count"] = "Antal",
|
||||
["command_giveweapon"] = "Ge ett vapen till en spelare",
|
||||
["command_giveweapon_weapon"] = "Vapen",
|
||||
["command_giveweapon_ammo"] = "Antal skott",
|
||||
["command_giveweapon_hasalready"] = "Spelaren har redan detta vapen",
|
||||
["command_giveweaponcomponent"] = "Ge komponent till en spelare",
|
||||
["command_giveweaponcomponent_component"] = "Komponent",
|
||||
["command_giveweaponcomponent_invalid"] = "Ogiltig komponent",
|
||||
["command_giveweaponcomponent_hasalready"] = "Spelaren har redan denna komponent",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Spelaren har inte vapen för komponenten",
|
||||
["command_goto"] = "Teleportera till en spelare",
|
||||
["command_kill"] = "Döda en spelare",
|
||||
["command_save"] = "Spara en spelares data",
|
||||
["command_saveall"] = "Spara alla spelares data",
|
||||
["command_setaccountmoney"] = "Sätt pengar på ett specifikt konto",
|
||||
["command_setaccountmoney_amount"] = "Summa",
|
||||
["command_setcoords"] = "Teleportera till koordinater",
|
||||
["command_setcoords_x"] = "X value",
|
||||
["command_setcoords_y"] = "Y value",
|
||||
["command_setcoords_z"] = "Z value",
|
||||
["command_setjob"] = "Sätt jobb för en spelare",
|
||||
["command_setjob_job"] = "Namn",
|
||||
["command_setjob_grade"] = "Grad",
|
||||
["command_setjob_invalid"] = "Jobbet, graden eller båda är ogiltiga",
|
||||
["command_setgroup"] = "Sätt en spelares grupp",
|
||||
["command_setgroup_group"] = "Grupp",
|
||||
["commanderror_argumentmismatch"] = "Invalid Argument Count (passed %s, wanted %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Invalid Argument #%s data type (passed string, wanted number)",
|
||||
["commanderror_argumentmismatch_string"] = "Invalid Argument #%s data type (passed number, wanted string)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Ogiltigt argument #%s datatyp (skickade negativt/noll, ville ha positivt tal)",
|
||||
["commanderror_invaliditem"] = "Ogiltigt föremål",
|
||||
["commanderror_invalidweapon"] = "Ogiltigt vapen",
|
||||
["commanderror_console"] = "Kommandot kan inte användas i konsolen",
|
||||
["commanderror_invalidcommand"] = "Ogiltigt kommand - /%s",
|
||||
["commanderror_invalidplayerid"] = "Spelaren är inte online",
|
||||
["commandgeneric_playerid"] = "Spelares ID",
|
||||
["command_giveammo_noweapon_found"] = "%s har inte detta vapen",
|
||||
["command_giveammo_weapon"] = "Vapen namn",
|
||||
["command_giveammo_ammo"] = "Antal ammo",
|
||||
["tpm_nowaypoint"] = "Ingen markör sutten.",
|
||||
["tpm_success"] = "Du har teleporterat",
|
||||
|
||||
["noclip_message"] = "Noclip har %s",
|
||||
["enabled"] = "~g~aktiverats~s~",
|
||||
["disabled"] = "~r~avaktiverats~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "%skr",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Dolk",
|
||||
["weapon_bat"] = "Baseballträd",
|
||||
["weapon_battleaxe"] = "Stridsyxa",
|
||||
["weapon_bottle"] = "Glasflaska",
|
||||
["weapon_crowbar"] = "Kofot",
|
||||
["weapon_flashlight"] = "Ficklampa",
|
||||
["weapon_golfclub"] = "Golfklubba",
|
||||
["weapon_hammer"] = "Hammare",
|
||||
["weapon_hatchet"] = "Yxa",
|
||||
["weapon_knife"] = "Kniv",
|
||||
["weapon_knuckle"] = "Knogjärn",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Ficklampa",
|
||||
["weapon_wrench"] = "Rörtång",
|
||||
["weapon_poolcue"] = "Biljardkö",
|
||||
["weapon_stone_hatchet"] = "Stenyxa",
|
||||
["weapon_switchblade"] = "Fickkniv",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "AP Pistol",
|
||||
["weapon_ceramicpistol"] = "Ceramic Pistol",
|
||||
["weapon_combatpistol"] = "Combat Pistol",
|
||||
["weapon_doubleaction"] = "Double-Action Revolver",
|
||||
["weapon_navyrevolver"] = "Navy Revolver",
|
||||
["weapon_flaregun"] = "Flaregun",
|
||||
["weapon_gadgetpistol"] = "Gadget Pistol",
|
||||
["weapon_heavypistol"] = "Heavy Pistol",
|
||||
["weapon_revolver"] = "Heavy Revolver",
|
||||
["weapon_revolver_mk2"] = "Heavy Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Marksman Pistol",
|
||||
["weapon_pistol"] = "Pistol",
|
||||
["weapon_pistol_mk2"] = "Pistol MK2",
|
||||
["weapon_pistol50"] = "Pistol .50",
|
||||
["weapon_snspistol"] = "SNS Pistol",
|
||||
["weapon_snspistol_mk2"] = "SNS Pistol MK2",
|
||||
["weapon_stungun"] = "Taser",
|
||||
["weapon_raypistol"] = "Up-N-Atomizer",
|
||||
["weapon_vintagepistol"] = "Vintage Pistol",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "Assault Shotgun",
|
||||
["weapon_autoshotgun"] = "Auto Shotgun",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Shotgun",
|
||||
["weapon_combatshotgun"] = "Combat Shotgun",
|
||||
["weapon_dbshotgun"] = "Double Barrel Shotgun",
|
||||
["weapon_heavyshotgun"] = "Heavy Shotgun",
|
||||
["weapon_musket"] = "Musket",
|
||||
["weapon_pumpshotgun"] = "Pump Shotgun",
|
||||
["weapon_pumpshotgun_mk2"] = "Pump Shotgun MK2",
|
||||
["weapon_sawnoffshotgun"] = "Sawed Off Shotgun",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "Assault SMG",
|
||||
["weapon_combatmg"] = "Combat MG",
|
||||
["weapon_combatmg_mk2"] = "Combat MG MK2",
|
||||
["weapon_combatpdw"] = "Combat PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Machine Pistol",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "Advanced Rifle",
|
||||
["weapon_assaultrifle"] = "Assault Rifle",
|
||||
["weapon_assaultrifle_mk2"] = "Assault Rifle MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Rifle",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Rifle MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Rifle",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Rifle MK2",
|
||||
["weapon_compactrifle"] = "Compact Rifle",
|
||||
["weapon_militaryrifle"] = "Military Rifle",
|
||||
["weapon_specialcarbine"] = "Special Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Special Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Heavy Rifle",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "Heavy Sniper",
|
||||
["weapon_heavysniper_mk2"] = "Heavy Sniper MK2",
|
||||
["weapon_marksmanrifle"] = "Marksman Rifle",
|
||||
["weapon_marksmanrifle_mk2"] = "Marksman Rifle MK2",
|
||||
["weapon_sniperrifle"] = "Sniper Rifle",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "Compact Launcher",
|
||||
["weapon_firework"] = "Firework Launcher",
|
||||
["weapon_grenadelauncher"] = "Grenade Launcher",
|
||||
["weapon_hominglauncher"] = "Homing Launcher",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Railgun",
|
||||
["weapon_rpg"] = "Rocket Launcher",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "Metal Detector",
|
||||
["weapon_precisionrifle"] = "Precision Rifle",
|
||||
["weapon_tactilerifle"] = "Service Carbine",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "Candycane",
|
||||
["weapon_acidpackage"] = "Acid Package",
|
||||
["weapon_pistolxm3"] = "Pistol8 x3m",
|
||||
["weapon_railgunxm3"] = "Railgun",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "Baseball",
|
||||
["weapon_bzgas"] = "BZ Gas",
|
||||
["weapon_flare"] = "Bloss",
|
||||
["weapon_grenade"] = "Granat",
|
||||
["weapon_petrolcan"] = "Bensindunk",
|
||||
["weapon_hazardcan"] = "Hazardous Jerrycan",
|
||||
["weapon_molotov"] = "Molotov",
|
||||
["weapon_proxmine"] = "Mina",
|
||||
["weapon_pipebomb"] = "Pipe Bomb",
|
||||
["weapon_snowball"] = "Snöboll",
|
||||
["weapon_stickybomb"] = "Sticky Bomb",
|
||||
["weapon_smokegrenade"] = "Tårgas",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "Brandsläckare",
|
||||
["weapon_digiscanner"] = "Digital Scanner",
|
||||
["weapon_garbagebag"] = "Soppåse",
|
||||
["weapon_handcuffs"] = "Handklovar",
|
||||
["gadget_nightvision"] = "Night Vision",
|
||||
["gadget_parachute"] = "Fallskärm",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "base Model",
|
||||
["component_knuckle_pimp"] = "the Pimp",
|
||||
["component_knuckle_ballas"] = "the Ballas",
|
||||
["component_knuckle_dollar"] = "the Hustler",
|
||||
["component_knuckle_diamond"] = "the Rock",
|
||||
["component_knuckle_hate"] = "the Hater",
|
||||
["component_knuckle_love"] = "the Lover",
|
||||
["component_knuckle_player"] = "the Player",
|
||||
["component_knuckle_king"] = "the King",
|
||||
["component_knuckle_vagos"] = "the Vagos",
|
||||
|
||||
["component_luxary_finish"] = "luxary Weapon Finish",
|
||||
|
||||
["component_handle_default"] = "default Handle",
|
||||
["component_handle_vip"] = "vIP Handle",
|
||||
["component_handle_bodyguard"] = "bodyguard Handle",
|
||||
|
||||
["component_vip_finish"] = "vIP Finish",
|
||||
["component_bodyguard_finish"] = "bodyguard Finish",
|
||||
|
||||
["component_camo_finish"] = "digital Camo",
|
||||
["component_camo_finish2"] = "brushstroke Camo",
|
||||
["component_camo_finish3"] = "woodland Camo",
|
||||
["component_camo_finish4"] = "skull Camo",
|
||||
["component_camo_finish5"] = "sessanta Nove Camo",
|
||||
["component_camo_finish6"] = "perseus Camo",
|
||||
["component_camo_finish7"] = "leopard Camo",
|
||||
["component_camo_finish8"] = "zebra Camo",
|
||||
["component_camo_finish9"] = "geometric Camo",
|
||||
["component_camo_finish10"] = "boom Camo",
|
||||
["component_camo_finish11"] = "patriotic Camo",
|
||||
|
||||
["component_camo_slide_finish"] = "digital Slide Camo",
|
||||
["component_camo_slide_finish2"] = "brushstroke Slide Camo",
|
||||
["component_camo_slide_finish3"] = "woodland Slide Camo",
|
||||
["component_camo_slide_finish4"] = "skull Slide Camo",
|
||||
["component_camo_slide_finish5"] = "sessanta Nove Slide Camo",
|
||||
["component_camo_slide_finish6"] = "perseus Slide Camo",
|
||||
["component_camo_slide_finish7"] = "leopard Slide Camo",
|
||||
["component_camo_slide_finish8"] = "zebra Slide Camo",
|
||||
["component_camo_slide_finish9"] = "geometric Slide Camo",
|
||||
["component_camo_slide_finish10"] = "boom Slide Camo",
|
||||
["component_camo_slide_finish11"] = "patriotic Slide Camo",
|
||||
|
||||
["component_clip_default"] = "default Magazine",
|
||||
["component_clip_extended"] = "extended Magazine",
|
||||
["component_clip_drum"] = "drum Magazine",
|
||||
["component_clip_box"] = "box Magazine",
|
||||
|
||||
["component_scope_holo"] = "holographic Scope",
|
||||
["component_scope_small"] = "small Scope",
|
||||
["component_scope_medium"] = "medium Scope",
|
||||
["component_scope_large"] = "large Scope",
|
||||
["component_scope"] = "mounted Scope",
|
||||
["component_scope_advanced"] = "advanced Scope",
|
||||
["component_ironsights"] = "ironsights",
|
||||
|
||||
["component_suppressor"] = "ljuddämpare",
|
||||
["component_compensator"] = "compensator",
|
||||
|
||||
["component_muzzle_flat"] = "flat Muzzle Brake",
|
||||
["component_muzzle_tactical"] = "tactical Muzzle Brake",
|
||||
["component_muzzle_fat"] = "fat-End Muzzle Brake",
|
||||
["component_muzzle_precision"] = "precision Muzzle Brake",
|
||||
["component_muzzle_heavy"] = "heavy Duty Muzzle Brake",
|
||||
["component_muzzle_slanted"] = "slanted Muzzle Brake",
|
||||
["component_muzzle_split"] = "split-End Muzzle Brake",
|
||||
["component_muzzle_squared"] = "squared Muzzle Brake",
|
||||
|
||||
["component_flashlight"] = "Ficklampa",
|
||||
["component_grip"] = "grepp",
|
||||
|
||||
["component_barrel_default"] = "default Barrel",
|
||||
["component_barrel_heavy"] = "heavy Barrel",
|
||||
|
||||
["component_ammo_tracer"] = "tracer Ammo",
|
||||
["component_ammo_incendiary"] = "incendiary Ammo",
|
||||
["component_ammo_hollowpoint"] = "hollowpoint Ammo",
|
||||
["component_ammo_fmj"] = "fMJ Ammo",
|
||||
["component_ammo_armor"] = "armor Piercing Ammo",
|
||||
["component_ammo_explosive"] = "armor Piercing Incendiary Ammo",
|
||||
|
||||
["component_shells_default"] = "default Shells",
|
||||
["component_shells_incendiary"] = "dragons Breath Shells",
|
||||
["component_shells_armor"] = "steel Buckshot Shells",
|
||||
["component_shells_hollowpoint"] = "flechette Shells",
|
||||
["component_shells_explosive"] = "explosive Slug Shells",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "round(s)",
|
||||
["ammo_shells"] = "shell(s)",
|
||||
["ammo_charge"] = "charge",
|
||||
["ammo_petrol"] = "gallons of fuel",
|
||||
["ammo_firework"] = "firework(s)",
|
||||
["ammo_rockets"] = "rocket(s)",
|
||||
["ammo_grenadelauncher"] = "grenade(s)",
|
||||
["ammo_grenade"] = "grenade(s)",
|
||||
["ammo_stickybomb"] = "bomb(s)",
|
||||
["ammo_pipebomb"] = "bomb(s)",
|
||||
["ammo_smokebomb"] = "bomb(s)",
|
||||
["ammo_molotov"] = "cocktail(s)",
|
||||
["ammo_proxmine"] = "mine(s)",
|
||||
["ammo_bzgas"] = "can(s)",
|
||||
["ammo_ball"] = "ball(s)",
|
||||
["ammo_snowball"] = "snowball(s)",
|
||||
["ammo_flare"] = "flare(s)",
|
||||
["ammo_flaregun"] = "flare(s)",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "default skin",
|
||||
["tint_green"] = "green skin",
|
||||
["tint_gold"] = "gold skin",
|
||||
["tint_pink"] = "pink skin",
|
||||
["tint_army"] = "army skin",
|
||||
["tint_lspd"] = "blue skin",
|
||||
["tint_orange"] = "orange skin",
|
||||
["tint_platinum"] = "platinum skin",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "klassisk svart",
|
||||
["tint_classic_gray"] = "klassisk grå",
|
||||
["tint_classic_two_tone"] = "klassisk tvåfärgad",
|
||||
["tint_classic_white"] = "klassisk vit",
|
||||
["tint_classic_beige"] = "klassisk beige",
|
||||
["tint_classic_green"] = "klassisk grön",
|
||||
["tint_classic_blue"] = "klassisk blå",
|
||||
["tint_classic_earth"] = "klassisk jord",
|
||||
["tint_classic_brown_black"] = "klassisk brun svart",
|
||||
["tint_contrast_red"] = "kontrast röd",
|
||||
["tint_contrast_blue"] = "kontrast blå",
|
||||
["tint_contrast_yellow"] = "kontrast gul",
|
||||
["tint_contrast_orange"] = "kontrast orange",
|
||||
["tint_bold_pink"] = "djärv rosa",
|
||||
["tint_bold_purple_yellow"] = "djärv lila gul",
|
||||
["tint_bold_orange"] = "djärv orange",
|
||||
["tint_bold_green_purple"] = "djärv grön lila",
|
||||
["tint_bold_red_feat"] = "djärv röd feat",
|
||||
["tint_bold_green_feat"] = "djärv grön feat",
|
||||
["tint_bold_cyan_feat"] = "djärv cyan feat",
|
||||
["tint_bold_yellow_feat"] = "djärv gul feat",
|
||||
["tint_bold_red_white"] = "djärv röd vit",
|
||||
["tint_bold_blue_white"] = "djärv blå vit",
|
||||
["tint_metallic_gold"] = "metalliskt guld",
|
||||
["tint_metallic_platinum"] = "metalliskt platina",
|
||||
["tint_metallic_gray_lilac"] = "metalliskt grå lila",
|
||||
["tint_metallic_purple_lime"] = "metalliskt lila lime",
|
||||
["tint_metallic_red"] = "metalliskt röd",
|
||||
["tint_metallic_green"] = "metalliskt grön",
|
||||
["tint_metallic_blue"] = "metalliskt blå",
|
||||
["tint_metallic_white_aqua"] = "metalliskt vitt aqua",
|
||||
["tint_metallic_red_yellow"] = "metalliskt röd gul",
|
||||
}
|
||||
382
resources/[core]/es_extended/locales/tr.lua
Normal file
382
resources/[core]/es_extended/locales/tr.lua
Normal file
@@ -0,0 +1,382 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "Envanter ( Ağırlık %s / %s )",
|
||||
["use"] = "Kullan",
|
||||
["give"] = "Ver",
|
||||
["remove"] = "At",
|
||||
["return"] = "Geri Ver",
|
||||
["give_to"] = "Şuna Ver",
|
||||
["amount"] = "Miktar",
|
||||
["giveammo"] = "Mermi Ver",
|
||||
["amountammo"] = "Mermi Miktarı",
|
||||
["noammo"] = "Yeterli Değil!",
|
||||
["gave_item"] = "Verilen %sx %s %s'ye",
|
||||
["received_item"] = "Alınan %sx %s %s'den",
|
||||
["gave_weapon"] = "Verilen %s %s'ye",
|
||||
["gave_weapon_ammo"] = "Verilen ~o~%sx %s %s için %s'ye",
|
||||
["gave_weapon_withammo"] = "Verilen %s ile ~o~%sx %s %s'ye",
|
||||
["gave_weapon_hasalready"] = "%s Zaten Bir %s Sahip",
|
||||
["gave_weapon_noweapon"] = "%s O Silahı Sahip Değil",
|
||||
["received_weapon"] = "%s'den %s Alındı",
|
||||
["received_weapon_ammo"] = "%s'den %s için ~o~%sx %s Alındı",
|
||||
["received_weapon_withammo"] = "%s'den %s ile ~o~%sx %s Alındı",
|
||||
["received_weapon_hasalready"] = "%s Size Bir %s Vermeye Çalıştı, Ama Zaten Bu Silahınız Var",
|
||||
["received_weapon_noweapon"] = "%s Size Bir %s İçin Mermi Vermeye Çalıştı, Ama Bu Silaha Sahip Değilsiniz",
|
||||
["gave_account_money"] = "Verilen $%s (%s) %s'ye",
|
||||
["received_account_money"] = "Alınan $%s (%s) %s'den",
|
||||
["amount_invalid"] = "Geçersiz Miktar",
|
||||
["players_nearby"] = "Yakınlarda Hiçbir Oyuncu Yok",
|
||||
["ex_inv_lim"] = "İşlem Yapılamaz, %s Ağırlık Sınırı Aşıldı",
|
||||
["imp_invalid_quantity"] = "İşlem Yapılamaz, Miktar Geçersiz",
|
||||
["imp_invalid_amount"] = "İşlem Yapılamaz, Miktar Geçersiz",
|
||||
["threw_standard"] = "Atılan %sx %s",
|
||||
["threw_account"] = "Atılan $%s %s",
|
||||
["threw_weapon"] = "Atılan %s",
|
||||
["threw_weapon_ammo"] = "Atılan %s ile ~o~%sx %s",
|
||||
["threw_weapon_already"] = "Bu Silaha Zaten Sahipsiniz",
|
||||
["threw_cannot_pickup"] = "Envanter Dolu, Alınamaz!",
|
||||
["threw_pickup_prompt"] = "Almak İçin E'ye Basın",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "Envanteri Göster",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "Maaşınız Ödendi: $%s",
|
||||
["received_help"] = "Yardım Çekiniz Ödendi: $%s",
|
||||
["company_nomoney"] = "Çalıştığınız Şirket Maaşınızı Ödeyebilecek Kadar Zengin Değil",
|
||||
["received_paycheck"] = "Maaş Alındı",
|
||||
["bank"] = "Maze Bank",
|
||||
["account_bank"] = "Banka",
|
||||
["account_black_money"] = "Kirli Para",
|
||||
["account_money"] = "Nakit",
|
||||
|
||||
["act_imp"] = "İşlem Yapılamaz",
|
||||
["in_vehicle"] = "İşlem Yapılamaz, Oyuncu Araçta",
|
||||
["not_in_vehicle"] = "İşlem Yapılamaz, Oyuncu Araçta Değil",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "Oyuncuyu Yanınıza Getir",
|
||||
["command_car"] = "Araç Spawn Et",
|
||||
["command_car_car"] = "Araç Modeli veya Hash",
|
||||
["command_cardel"] = "Yakınlardaki Araçları Kaldır",
|
||||
["command_cardel_radius"] = "Belirtilen Yarıçap İçindeki Tüm Araçları Kaldırır",
|
||||
["command_repair"] = "Araçınızı Onarın",
|
||||
["command_repair_success"] = "Araç Başarıyla Onarıldı",
|
||||
["command_repair_success_target"] = "Bir Yönetici Araçınızı Onardı",
|
||||
["command_clear"] = "Sohbeti Temizle",
|
||||
["command_clearall"] = "Tüm Oyuncular İçin Sohbeti Temizle",
|
||||
["command_clearinventory"] = "Oyuncunun Envanterindeki Tüm Eşyaları Kaldır",
|
||||
["command_clearloadout"] = "Oyuncunun Yükündeki Tüm Silahları Kaldır",
|
||||
["command_freeze"] = "Bir Oyuncuyu Dondur",
|
||||
["command_unfreeze"] = "Bir Oyuncunun Dondurmasını Kaldır",
|
||||
["command_giveaccountmoney"] = "Bir Hesaba Para Ver",
|
||||
["command_giveaccountmoney_account"] = "Ekleme Yapılacak Hesap",
|
||||
["command_giveaccountmoney_amount"] = "Eklemek İçin Miktar",
|
||||
["command_giveaccountmoney_invalid"] = "Hesap Adı Geçersiz",
|
||||
["command_removeaccountmoney"] = "Bir Hesaptan Para Çek",
|
||||
["command_removeaccountmoney_account"] = "Çekilecek Hesap",
|
||||
["command_removeaccountmoney_amount"] = "Çekilecek Miktar",
|
||||
["command_removeaccountmoney_invalid"] = "Hesap Adı Geçersiz",
|
||||
["command_giveitem"] = "Oyuncuya Eşya Ver",
|
||||
["command_giveitem_item"] = "Eşya Adı",
|
||||
["command_giveitem_count"] = "Miktar",
|
||||
["command_giveweapon"] = "Oyuncuya Silah Ver",
|
||||
["command_giveweapon_weapon"] = "Silah Adı",
|
||||
["command_giveweapon_ammo"] = "Mermi Miktarı",
|
||||
["command_giveweapon_hasalready"] = "Oyuncu Zaten Bu Silaha Sahip",
|
||||
["command_giveweaponcomponent"] = "Oyuncuya Silah Parçası Ver",
|
||||
["command_giveweaponcomponent_component"] = "Parça Adı",
|
||||
["command_giveweaponcomponent_invalid"] = "Geçersiz Silah Parçası",
|
||||
["command_giveweaponcomponent_hasalready"] = "Oyuncu Zaten Bu Silah Parçasına Sahip",
|
||||
["command_giveweaponcomponent_missingweapon"] = "Oyuncu Bu Silaha Sahip Değil",
|
||||
["command_goto"] = "Kendinizi Bir Oyuncuya Teleport Et",
|
||||
["command_kill"] = "Bir Oyuncuyu Öldür",
|
||||
["command_save"] = "Bir Oyuncunun Verilerini Zorla Kaydet",
|
||||
["command_saveall"] = "Tüm Oyuncu Verilerini Zorla Kaydet",
|
||||
["command_setaccountmoney"] = "Bir Hesaptaki Parayı Ayarla",
|
||||
["command_setaccountmoney_amount"] = "Miktar",
|
||||
["command_setcoords"] = "Belirtilen Koordinatlara Teleport Ol",
|
||||
["command_setcoords_x"] = "X Değeri",
|
||||
["command_setcoords_y"] = "Y Değeri",
|
||||
["command_setcoords_z"] = "Z Değeri",
|
||||
["command_setjob"] = "Bir Oyuncunun Mesleğini Ayarla",
|
||||
["command_setjob_job"] = "Adı",
|
||||
["command_setjob_grade"] = "Meslek Derecesi",
|
||||
["command_setjob_invalid"] = "Meslek, Derece veya Her Ikisi Geçersiz",
|
||||
["command_setgroup"] = "Bir Oyuncunun Yetki Grubunu Ayarla",
|
||||
["command_setgroup_group"] = "Grup Adı",
|
||||
["commanderror_argumentmismatch"] = "Geçersiz Argüman Sayısı (Verilen %s, İstenen %s)",
|
||||
["commanderror_argumentmismatch_number"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Metin, İstenen Sayı)",
|
||||
["commanderror_argumentmismatch_string"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Sayı, İstenen Metin)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "Geçersiz Argüman #%s Veri Tipi (Verilen Negatif/Sıfır, İstenen Pozitif Sayı)",
|
||||
["commanderror_invaliditem"] = "Geçersiz Eşya",
|
||||
["commanderror_invalidweapon"] = "Geçersiz Silah",
|
||||
["commanderror_console"] = "Komut Konsoldan Çalıştırılamaz",
|
||||
["commanderror_invalidcommand"] = "Geçersiz Komut - /%s",
|
||||
["commanderror_invalidplayerid"] = "Belirtilen Oyuncu Çevrimdışı",
|
||||
["commandgeneric_playerid"] = "Oyuncunun Sunucu ID'si",
|
||||
["command_giveammo_noweapon_found"] = "%s O Silaha Sahip Değil",
|
||||
["command_giveammo_weapon"] = "Silah Adı",
|
||||
["command_giveammo_ammo"] = "Mermi Miktarı",
|
||||
["tpm_nowaypoint"] = "Hiçbir Yol İşareti Ayarlanmadı.",
|
||||
["tpm_success"] = "Başarıyla Teleport Edildi",
|
||||
|
||||
["noclip_message"] = "Noclip %s Yapıldı",
|
||||
["enabled"] = "~g~Aktif Edildi~s~",
|
||||
["disabled"] = "~r~Pasif Edildi~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "£%s",
|
||||
|
||||
-- Silahlar
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "Kılıç",
|
||||
["weapon_bat"] = "Sopa",
|
||||
["weapon_battleaxe"] = "Savaş Balta",
|
||||
["weapon_bottle"] = "Şişe",
|
||||
["weapon_crowbar"] = "Kaldıraç",
|
||||
["weapon_flashlight"] = "Fener",
|
||||
["weapon_golfclub"] = "Golf Sopası",
|
||||
["weapon_hammer"] = "Çekiç",
|
||||
["weapon_hatchet"] = "Balta",
|
||||
["weapon_knife"] = "Bıçak",
|
||||
["weapon_knuckle"] = "Düğmeli Eldiven",
|
||||
["weapon_machete"] = "Machete",
|
||||
["weapon_nightstick"] = "Gece Dürbünü",
|
||||
["weapon_wrench"] = "Anahtar",
|
||||
["weapon_poolcue"] = "Havuz Sopası",
|
||||
["weapon_stone_hatchet"] = "Taş Balta",
|
||||
["weapon_switchblade"] = "Dönme Bıçağı",
|
||||
|
||||
-- Tabancalar
|
||||
["weapon_appistol"] = "AP Tabancası",
|
||||
["weapon_ceramicpistol"] = "Seramik Tabanca",
|
||||
["weapon_combatpistol"] = "Savaş Tabancası",
|
||||
["weapon_doubleaction"] = "Çift Aksiyonlu Tabanca",
|
||||
["weapon_navyrevolver"] = "Donanma Revolveri",
|
||||
["weapon_flaregun"] = "Işık Fişeği Tabancası",
|
||||
["weapon_gadgetpistol"] = "Cihaz Tabancası",
|
||||
["weapon_heavypistol"] = "Ağır Tabanca",
|
||||
["weapon_revolver"] = "Revolver",
|
||||
["weapon_revolver_mk2"] = "Revolver MK2",
|
||||
["weapon_marksmanpistol"] = "Nişancı Tabancası",
|
||||
["weapon_pistol"] = "Tabanca",
|
||||
["weapon_pistol_mk2"] = "Tabanca MK2",
|
||||
["weapon_pistol50"] = "Tabanca .50",
|
||||
["weapon_snspistol"] = "SNS Tabancası",
|
||||
["weapon_snspistol_mk2"] = "SNS Tabancası MK2",
|
||||
["weapon_stungun"] = "Elektrik Tabancası",
|
||||
["weapon_raypistol"] = "Atomizer Tabancası",
|
||||
["weapon_vintagepistol"] = "Vintage Tabanca",
|
||||
|
||||
-- Av Tüfekleri
|
||||
["weapon_assaultshotgun"] = "Saldırı Tüfeği",
|
||||
["weapon_autoshotgun"] = "Otomatik Tüfek",
|
||||
["weapon_bullpupshotgun"] = "Bullpup Tüfeği",
|
||||
["weapon_combatshotgun"] = "Savaş Tüfeği",
|
||||
["weapon_dbshotgun"] = "Çift Namlu Tüfeği",
|
||||
["weapon_heavyshotgun"] = "Ağır Tüfek",
|
||||
["weapon_musket"] = "Tüfek",
|
||||
["weapon_pumpshotgun"] = "Pompalı Tüfek",
|
||||
["weapon_pumpshotgun_mk2"] = "Pompalı Tüfek MK2",
|
||||
["weapon_sawnoffshotgun"] = "Kısa Namlu Tüfek",
|
||||
|
||||
-- SMG ve LMG
|
||||
["weapon_assaultsmg"] = "Saldırı SMG",
|
||||
["weapon_combatmg"] = "Savaş MG",
|
||||
["weapon_combatmg_mk2"] = "Savaş MG MK2",
|
||||
["weapon_combatpdw"] = "Savaş PDW",
|
||||
["weapon_gusenberg"] = "Gusenberg Sweeper",
|
||||
["weapon_machinepistol"] = "Makine Tabancası",
|
||||
["weapon_mg"] = "MG",
|
||||
["weapon_microsmg"] = "Micro SMG",
|
||||
["weapon_minismg"] = "Mini SMG",
|
||||
["weapon_smg"] = "SMG",
|
||||
["weapon_smg_mk2"] = "SMG MK2",
|
||||
["weapon_raycarbine"] = "Unholy Hellbringer",
|
||||
|
||||
-- Tüfekler
|
||||
["weapon_advancedrifle"] = "İleri Düzey Tüfeği",
|
||||
["weapon_assaultrifle"] = "Saldırı Tüfeği",
|
||||
["weapon_assaultrifle_mk2"] = "Saldırı Tüfeği MK2",
|
||||
["weapon_bullpuprifle"] = "Bullpup Tüfeği",
|
||||
["weapon_bullpuprifle_mk2"] = "Bullpup Tüfeği MK2",
|
||||
["weapon_carbinerifle"] = "Carbine Tüfeği",
|
||||
["weapon_carbinerifle_mk2"] = "Carbine Tüfeği MK2",
|
||||
["weapon_compactrifle"] = "Komple Tüfek",
|
||||
["weapon_militaryrifle"] = "Askeri Tüfek",
|
||||
["weapon_specialcarbine"] = "Özel Carbine",
|
||||
["weapon_specialcarbine_mk2"] = "Özel Carbine MK2",
|
||||
["weapon_heavyrifle"] = "Ağır Tüfek",
|
||||
|
||||
-- Keskin Nişancı
|
||||
["weapon_heavysniper"] = "Ağır Keskin Nişancı",
|
||||
["weapon_heavysniper_mk2"] = "Ağır Keskin Nişancı MK2",
|
||||
["weapon_marksmanrifle"] = "Keskin Nişancı Tüfeği",
|
||||
["weapon_marksmanrifle_mk2"] = "Keskin Nişancı Tüfeği MK2",
|
||||
["weapon_sniperrifle"] = "Keskin Nişancı Tüfeği",
|
||||
|
||||
-- Ağır / Roket Atıcılar
|
||||
["weapon_compactlauncher"] = "Kompakt Roket Atıcı",
|
||||
["weapon_firework"] = "Havai Fişek Atıcı",
|
||||
["weapon_grenadelauncher"] = "El Bombası Atıcı",
|
||||
["weapon_hominglauncher"] = "Hedefli Roket Atıcı",
|
||||
["weapon_minigun"] = "Minigun",
|
||||
["weapon_railgun"] = "Raylı Silah",
|
||||
["weapon_rpg"] = "Roket Atıcı",
|
||||
["weapon_rayminigun"] = "Widowmaker",
|
||||
|
||||
-- Suçlu Girişimleri DLC
|
||||
["weapon_metaldetector"] = "Metal Dedektörü",
|
||||
["weapon_precisionrifle"] = "Keskin Nişancı Tüfeği",
|
||||
["weapon_tactilerifle"] = "Hizmet Karabina",
|
||||
|
||||
-- Uyuşturucu Savaşları DLC
|
||||
["weapon_candycane"] = "Şeker Kamışı",
|
||||
["weapon_acidpackage"] = "Asit Paketi",
|
||||
["weapon_pistolxm3"] = "Pistol8 x3m",
|
||||
["weapon_railgunxm3"] = "Raylı Silah",
|
||||
|
||||
-- Atılan Silahlar
|
||||
["weapon_ball"] = "Beyzbol Topu",
|
||||
["weapon_bzgas"] = "BZ Gazı",
|
||||
["weapon_flare"] = "Duman Fişeği",
|
||||
["weapon_grenade"] = "El Bombası",
|
||||
["weapon_petrolcan"] = "Petrol Bidonu",
|
||||
["weapon_hazardcan"] = "Tehlikeli Bidon",
|
||||
["weapon_molotov"] = "Molotof Kokteyli",
|
||||
["weapon_proxmine"] = "Yakınlık Mayını",
|
||||
["weapon_pipebomb"] = "Boru Bombası",
|
||||
["weapon_snowball"] = "Karla Bombası",
|
||||
["weapon_stickybomb"] = "Yapışkan Bomba",
|
||||
["weapon_smokegrenade"] = "Gözyaşı Gazı",
|
||||
|
||||
-- Özel
|
||||
["weapon_fireextinguisher"] = "Yangın Söndürücü",
|
||||
["weapon_digiscanner"] = "Dijital Tarayıcı",
|
||||
["weapon_garbagebag"] = "Çöp Torbası",
|
||||
["weapon_handcuffs"] = "Kelepçe",
|
||||
["gadget_nightvision"] = "Gece Görüşü",
|
||||
["gadget_parachute"] = "Paraşüt",
|
||||
|
||||
-- Silah Bileşenleri
|
||||
["component_knuckle_base"] = "Temel Model",
|
||||
["component_knuckle_pimp"] = "Fahişe",
|
||||
["component_knuckle_ballas"] = "Ballas",
|
||||
["component_knuckle_dollar"] = "Hustler",
|
||||
["component_knuckle_diamond"] = "Elmas",
|
||||
["component_knuckle_hate"] = "Nefret",
|
||||
["component_knuckle_love"] = "Aşk",
|
||||
["component_knuckle_player"] = "Oyuncu",
|
||||
["component_knuckle_king"] = "Kral",
|
||||
["component_knuckle_vagos"] = "Vagos",
|
||||
|
||||
["component_luxary_finish"] = "Lüks Silah Kaplama",
|
||||
|
||||
["component_handle_default"] = "Varsayılan Sap",
|
||||
["component_handle_vip"] = "VIP Sap",
|
||||
["component_handle_bodyguard"] = "Vücut Koruma Sapı",
|
||||
|
||||
["component_vip_finish"] = "VIP Kaplama",
|
||||
["component_bodyguard_finish"] = "Vücut Koruma Kaplaması",
|
||||
|
||||
["component_camo_finish"] = "Dijital Kamuflaj",
|
||||
["component_camo_finish2"] = "Fırçalama Kamuflaj",
|
||||
["component_camo_finish3"] = "Orman Kamuflajı",
|
||||
["component_camo_finish4"] = "Kafatası Kamuflajı",
|
||||
["component_camo_finish5"] = "Sessanta Nove Kamuflajı",
|
||||
["component_camo_finish6"] = "Perseus Kamuflajı",
|
||||
["component_camo_finish7"] = "Leopar Kamuflajı",
|
||||
["component_camo_finish8"] = "Zebra Kamuflajı",
|
||||
["component_camo_finish9"] = "Geometrik Kamuflaj",
|
||||
["component_camo_finish10"] = "Boom Kamuflajı",
|
||||
["component_camo_finish11"] = "Patriot Kamuflajı",
|
||||
|
||||
["component_camo_slide_finish"] = "Dijital Kayma Kamuflajı",
|
||||
["component_camo_slide_finish2"] = "Fırçalama Kayma Kamuflajı",
|
||||
["component_camo_slide_finish3"] = "Orman Kayma Kamuflajı",
|
||||
["component_camo_slide_finish4"] = "Kafatası Kayma Kamuflajı",
|
||||
["component_camo_slide_finish5"] = "Sessanta Nove Kayma Kamuflajı",
|
||||
["component_camo_slide_finish6"] = "Perseus Kayma Kamuflajı",
|
||||
["component_camo_slide_finish7"] = "Leopar Kayma Kamuflajı",
|
||||
["component_camo_slide_finish8"] = "Zebra Kayma Kamuflajı",
|
||||
["component_camo_slide_finish9"] = "Geometrik Kayma Kamuflajı",
|
||||
["component_camo_slide_finish10"] = "Boom Kayma Kamuflajı",
|
||||
["component_camo_slide_finish11"] = "Patriot Kayma Kamuflajı",
|
||||
|
||||
["component_clip_default"] = "Varsayılan Şarjör",
|
||||
["component_clip_extended"] = "Uzun Şarjör",
|
||||
["component_clip_drum"] = "Davul Şarjör",
|
||||
["component_clip_box"] = "Kutu Şarjör",
|
||||
|
||||
["component_scope_holo"] = "Holografik Dürbün",
|
||||
["component_scope_small"] = "Küçük Dürbün",
|
||||
["component_scope_medium"] = "Orta Dürbün",
|
||||
["component_scope_large"] = "Büyük Dürbün",
|
||||
["component_scope"] = "Montelenmiş Dürbün",
|
||||
["component_scope_advanced"] = "İleri Seviye Dürbün",
|
||||
["component_ironsights"] = "Nişangah",
|
||||
|
||||
["component_suppressor"] = "Susturucu",
|
||||
["component_compensator"] = "Dengeleyici",
|
||||
|
||||
["component_muzzle_flat"] = "Düz Namlu Freni",
|
||||
["component_muzzle_tactical"] = "Taktiksel Namlu Freni",
|
||||
["component_muzzle_fat"] = "Geniş Uçlu Namlu Freni",
|
||||
["component_muzzle_precision"] = "Hassas Namlu Freni",
|
||||
["component_muzzle_heavy"] = "Ağır Namlu Freni",
|
||||
["component_muzzle_slanted"] = "Eğik Namlu Freni",
|
||||
["component_muzzle_split"] = "Bölünmüş Namlu Freni",
|
||||
["component_muzzle_squared"] = "Kare Namlu Freni",
|
||||
|
||||
["component_flashlight"] = "Fener",
|
||||
["component_grip"] = "Tutamak",
|
||||
|
||||
["component_barrel_default"] = "Varsayılan Namlu",
|
||||
["component_barrel_heavy"] = "Ağır Namlu",
|
||||
|
||||
["component_ammo_tracer"] = "Işık İzli Mühimmat",
|
||||
["component_ammo_incendiary"] = "Alev Alıcı Mühimmat",
|
||||
["component_ammo_hollowpoint"] = "Hollowpoint Mühimmat",
|
||||
["component_ammo_fmj"] = "FMJ Mühimmat",
|
||||
["component_ammo_armor"] = "Zırh Delici Mühimmat",
|
||||
["component_ammo_explosive"] = "Zırh Delici Alev Alıcı Mühimmat",
|
||||
|
||||
["component_shells_default"] = "Varsayılan Mühimmat",
|
||||
["component_shells_incendiary"] = "Dragon's Breath Mühimmatı",
|
||||
["component_shells_armor"] = "Çelik Buckshot Mühimmat",
|
||||
["component_shells_hollowpoint"] = "Flechette Mühimmat",
|
||||
["component_shells_explosive"] = "Patlayıcı Slug Mühimmat",
|
||||
|
||||
-- Silah Mermileri
|
||||
["ammo_rounds"] = "Dişli(ler)",
|
||||
["ammo_shells"] = "Kovan(lar)",
|
||||
["ammo_charge"] = "Şarjör",
|
||||
["ammo_petrol"] = "Yakıt Galonları",
|
||||
["ammo_firework"] = "Havai Fişek(ler)",
|
||||
["ammo_rockets"] = "Roket(ler)",
|
||||
["ammo_grenadelauncher"] = "El Bombası(ları)",
|
||||
["ammo_grenade"] = "El Bombası(ları)",
|
||||
["ammo_stickybomb"] = "Bomba(lar)",
|
||||
["ammo_pipebomb"] = "Bomba(lar)",
|
||||
["ammo_smokebomb"] = "Bomba(lar)",
|
||||
["ammo_molotov"] = "Molotof Kokteyli(leri)",
|
||||
["ammo_proxmine"] = "Mayın(lar)",
|
||||
["ammo_bzgas"] = "Kutu(lar)",
|
||||
["ammo_ball"] = "Top(lar)",
|
||||
["ammo_snowball"] = "Kar Topu(ları)",
|
||||
["ammo_flare"] = "Duman Fişek(leri)",
|
||||
["ammo_flaregun"] = "Duman Fişek(leri)",
|
||||
|
||||
-- Silah Renkleri
|
||||
["tint_default"] = "Varsayılan Kaplama",
|
||||
["tint_green"] = "Yeşil Kaplama",
|
||||
["tint_gold"] = "Altın Kaplama",
|
||||
["tint_pink"] = "Pembe Kaplama",
|
||||
["tint_army"] = "Ordu Kaplaması",
|
||||
["tint_lspd"] = "Mavi Kaplama",
|
||||
["tint_orange"] = "Turuncu Kaplama",
|
||||
["tint_platinum"] = "Platin Kaplama",
|
||||
}
|
||||
426
resources/[core]/es_extended/locales/zh-cn.lua
Normal file
426
resources/[core]/es_extended/locales/zh-cn.lua
Normal file
@@ -0,0 +1,426 @@
|
||||
return {
|
||||
-- Inventory
|
||||
["inventory"] = "物品栏 (负重 %s / %s)",
|
||||
["use"] = "使用",
|
||||
["give"] = "赠予",
|
||||
["remove"] = "丢弃",
|
||||
["return"] = "返回",
|
||||
["give_to"] = "赠予目标",
|
||||
["amount"] = "数量",
|
||||
["giveammo"] = "赠予弹药",
|
||||
["amountammo"] = "弹药数量",
|
||||
["noammo"] = "弹药不足!",
|
||||
["gave_item"] = "您将 %s 个 %s 赠予给 %s",
|
||||
["received_item"] = "您收到 %s 个 %s, 由 %s 的赠予",
|
||||
["gave_weapon"] = "您将 %s 赠予给 %s",
|
||||
["gave_weapon_ammo"] = "您将 ~o~%s 发 %s %s 赠予 %s",
|
||||
["gave_weapon_withammo"] = "您把 %s 及 ~o~%s 发 %s 赠予 %s",
|
||||
["gave_weapon_hasalready"] = "%s 已拥有 %s",
|
||||
["gave_weapon_noweapon"] = "%s 未拥有该武器",
|
||||
["received_weapon"] = "您收到 %s, 由 %s 赠",
|
||||
["received_weapon_ammo"] = "您收到 ~o~%s 发 %s 的%s, 由 %s 赠予",
|
||||
["received_weapon_withammo"] = "您收到 %s 及 ~o~%s 发 %s, 由 %s 赠予",
|
||||
["received_weapon_hasalready"] = "%s 试图赠予您 %s, 但您已拥有",
|
||||
["received_weapon_noweapon"] = "%s 试图赠予您 %s 发弹药, 但您未装备该武器",
|
||||
["gave_account_money"] = "您将 ¥%s (%s) 转账至 %s",
|
||||
["received_account_money"] = "您收到 ¥%s (%s), 由 %s 转账",
|
||||
["amount_invalid"] = "无效数量",
|
||||
["players_nearby"] = "附近暂无其他人员",
|
||||
["ex_inv_lim"] = "操作失败: 超过最大负重限制 (%s)",
|
||||
["imp_invalid_quantity"] = "操作失败: 无效数量输入",
|
||||
["imp_invalid_amount"] = "操作失败: 无效金额输入",
|
||||
["threw_standard"] = "您已丢弃 %s 个 %s",
|
||||
["threw_account"] = "您已丢弃 ¥%s 笔 %s",
|
||||
["threw_weapon"] = "您已丢弃武器 %s",
|
||||
["threw_weapon_ammo"] = "您已丢弃 %s 及其 ~o~%s 发 %s",
|
||||
["threw_weapon_already"] = "您已持有相同武器!",
|
||||
["threw_cannot_pickup"] = "物品栏已满, 无法拾取!",
|
||||
["threw_pickup_prompt"] = "键下 [E] 拾取",
|
||||
|
||||
-- Key mapping
|
||||
["keymap_showinventory"] = "显示物品栏",
|
||||
|
||||
-- Salary related
|
||||
["received_salary"] = "您已收到工资: ¥%s",
|
||||
["received_help"] = "您已领取补助金: ¥%s",
|
||||
["company_nomoney"] = "雇佣方资金不足, 无法支付薪资",
|
||||
["received_paycheck"] = "工资到账",
|
||||
["bank"] = "梅兹银行",
|
||||
["account_bank"] = "银行账户",
|
||||
["account_black_money"] = "赃款",
|
||||
["account_money"] = "现金",
|
||||
|
||||
["act_imp"] = "无法执行该操作",
|
||||
["in_vehicle"] = "目标处于载具中, 操作中止",
|
||||
["not_in_vehicle"] = "目标未在载具内, 操作中止",
|
||||
|
||||
-- Commands
|
||||
["command_bring"] = "将目标玩家传送至当前位置",
|
||||
["command_car"] = "生成指定载具",
|
||||
["command_car_car"] = "载具模型名称或哈希值",
|
||||
["command_cardel"] = "删除邻近载具",
|
||||
["command_cardel_radius"] = "删除半径内的所有载具",
|
||||
["command_repair"] = "修复当前载具",
|
||||
["command_repair_success"] = "载具已修复完毕",
|
||||
["command_repair_success_target"] = "管理员已修复您的载具",
|
||||
["command_clear"] = "清除当前聊天记录",
|
||||
["command_clearall"] = "清除全服玩家聊天记录",
|
||||
["command_clearinventory"] = "清空目标玩家物品栏",
|
||||
["command_clearloadout"] = "移除目标玩家全部武器",
|
||||
["command_freeze"] = "冻结目标玩家",
|
||||
["command_unfreeze"] = "解冻目标玩家",
|
||||
["command_giveaccountmoney"] = "向指定账户注入资金",
|
||||
["command_giveaccountmoney_account"] = "接收账户名称",
|
||||
["command_giveaccountmoney_amount"] = "注入金额 (¥)",
|
||||
["command_giveaccountmoney_invalid"] = "错误: 无效账户类型",
|
||||
["command_removeaccountmoney"] = "从账户扣除资金",
|
||||
["command_removeaccountmoney_account"] = "扣款账户名称",
|
||||
["command_removeaccountmoney_amount"] = "扣除金额 (¥)",
|
||||
["command_removeaccountmoney_invalid"] = "账户名称无效",
|
||||
["command_giveitem"] = "向玩家发放物品",
|
||||
["command_giveitem_item"] = "物品ID/名称",
|
||||
["command_giveitem_count"] = "发放数量",
|
||||
["command_giveweapon"] = "授予玩家武器",
|
||||
["command_giveweapon_weapon"] = "武器ID/名称",
|
||||
["command_giveweapon_ammo"] = "配发弹药量",
|
||||
["command_giveweapon_hasalready"] = "操作失败: 玩家已持有该武器",
|
||||
["command_giveweaponcomponent"] = "装配武器组件",
|
||||
["command_giveweaponcomponent_component"] = "组件名称",
|
||||
["command_giveweaponcomponent_invalid"] = "错误: 无效组件",
|
||||
["command_giveweaponcomponent_hasalready"] = "操作失败: 该组件已装配",
|
||||
["command_giveweaponcomponent_missingweapon"] = "错误: 玩家未持有对应武器",
|
||||
["command_goto"] = "传送到目标玩家位置",
|
||||
["command_kill"] = "强制击杀玩家",
|
||||
["command_save"] = "立即保存玩家数据",
|
||||
["command_saveall"] = "强制执行全服数据存档",
|
||||
["command_setaccountmoney"] = "设定账户资金额度",
|
||||
["command_setaccountmoney_amount"] = "设定金额 (¥)",
|
||||
["command_setcoords"] = "传送至坐标点",
|
||||
["command_setcoords_x"] = "X坐标值",
|
||||
["command_setcoords_y"] = "Y坐标值",
|
||||
["command_setcoords_z"] = "Z坐标值",
|
||||
["command_setjob"] = "调整玩家职业",
|
||||
["command_setjob_job"] = "职业ID/名称",
|
||||
["command_setjob_grade"] = "职级序号",
|
||||
["command_setjob_invalid"] = "配置错误: 无效职业或职级",
|
||||
["command_setgroup"] = "设置玩家权限组别",
|
||||
["command_setgroup_group"] = "组别名称",
|
||||
["commanderror_argumentmismatch"] = "参数数量错误 (需%s个, 输入%s个)",
|
||||
["commanderror_argumentmismatch_number"] = "参数#%s类型不符 (需数字类型)",
|
||||
["commanderror_argumentmismatch_string"] = "参数#%s类型不符 (需文本类型)",
|
||||
["commanderror_argumentmismatch_positive_number"] = "参数#%s类型不符 (传入负数/零,需要正数)",
|
||||
["commanderror_invaliditem"] = "错误: 无效物品标识",
|
||||
["commanderror_invalidweapon"] = "错误: 无效武器标识",
|
||||
["commanderror_console"] = "控制台无法执行此指令",
|
||||
["commanderror_invalidcommand"] = "无效指令: /%s",
|
||||
["commanderror_invalidplayerid"] = "目标玩家不在线",
|
||||
["commandgeneric_playerid"] = "玩家服务器ID",
|
||||
["commandgeneric_dimension"] = "维度ID",
|
||||
["command_giveammo_noweapon_found"] = "操作失败: %s未装备该武器",
|
||||
["command_giveammo_weapon"] = "目标武器名称",
|
||||
["command_giveammo_ammo"] = "补充弹药量",
|
||||
["command_setdim"] = "切换玩家维度",
|
||||
["tpm_nowaypoint"] = "传送失败: 未设置路径点",
|
||||
["tpm_success"] = "路径点传送完成",
|
||||
|
||||
["noclip_message"] = "飞行模式 %s",
|
||||
["enabled"] = "~g~已激活~s~",
|
||||
["disabled"] = "~r~已禁用~s~",
|
||||
|
||||
-- Locale settings
|
||||
["locale_digit_grouping_symbol"] = ",",
|
||||
["locale_currency"] = "¥%s",
|
||||
|
||||
-- Weapons
|
||||
|
||||
-- Melee
|
||||
["weapon_dagger"] = "古骑兵匕首",
|
||||
["weapon_bat"] = "棒球棍",
|
||||
["weapon_battleaxe"] = "战斧",
|
||||
["weapon_bottle"] = "碎酒瓶",
|
||||
["weapon_crowbar"] = "撬棍",
|
||||
["weapon_flashlight"] = "手电筒",
|
||||
["weapon_golfclub"] = "高尔夫球杆",
|
||||
["weapon_hammer"] = "铁锤",
|
||||
["weapon_hatchet"] = "手斧",
|
||||
["weapon_knife"] = "小刀",
|
||||
["weapon_knuckle"] = "手指虎",
|
||||
["weapon_machete"] = "开山刀",
|
||||
["weapon_nightstick"] = "警棍",
|
||||
["weapon_wrench"] = "管钳扳手",
|
||||
["weapon_poolcue"] = "台球杆",
|
||||
["weapon_stone_hatchet"] = "石斧",
|
||||
["weapon_switchblade"] = "弹簧刀",
|
||||
|
||||
-- Handguns
|
||||
["weapon_appistol"] = "穿甲手枪",
|
||||
["weapon_ceramicpistol"] = "陶瓷手枪",
|
||||
["weapon_combatpistol"] = "战斗手枪",
|
||||
["weapon_doubleaction"] = "双动式左轮手枪",
|
||||
["weapon_navyrevolver"] = "海军左轮手枪",
|
||||
["weapon_flaregun"] = "信号枪",
|
||||
["weapon_gadgetpistol"] = "佩里克手枪",
|
||||
["weapon_heavypistol"] = "重型手枪",
|
||||
["weapon_revolver"] = "重型左轮手枪",
|
||||
["weapon_revolver_mk2"] = "重型左轮手枪-MK2",
|
||||
["weapon_marksmanpistol"] = "射手手枪",
|
||||
["weapon_pistol"] = "手枪",
|
||||
["weapon_pistol_mk2"] = "手枪-MK2",
|
||||
["weapon_pistol50"] = "0.5-口径手枪",
|
||||
["weapon_snspistol"] = "劣质手枪",
|
||||
["weapon_snspistol_mk2"] = "劣质手枪-MK2",
|
||||
["weapon_stungun"] = "电击枪",
|
||||
["weapon_raypistol"] = "原子堡手枪",
|
||||
["weapon_vintagepistol"] = "老式手枪",
|
||||
|
||||
-- Shotguns
|
||||
["weapon_assaultshotgun"] = "突击霰弹枪",
|
||||
["weapon_autoshotgun"] = "半自动霰弹枪",
|
||||
["weapon_bullpupshotgun"] = "无托式霰弹枪",
|
||||
["weapon_combatshotgun"] = "战斗霰弹枪",
|
||||
["weapon_dbshotgun"] = "双管霰弹枪",
|
||||
["weapon_heavyshotgun"] = "重型霰弹枪",
|
||||
["weapon_musket"] = "老式火枪",
|
||||
["weapon_pumpshotgun"] = "泵动式霰弹枪",
|
||||
["weapon_pumpshotgun_mk2"] = "泵动式霰弹枪-MK2",
|
||||
["weapon_sawnoffshotgun"] = "短管霰弹枪",
|
||||
|
||||
-- SMG & LMG
|
||||
["weapon_assaultsmg"] = "突击冲锋枪",
|
||||
["weapon_combatmg"] = "战斗机枪",
|
||||
["weapon_combatmg_mk2"] = "战斗机枪-MK2",
|
||||
["weapon_combatpdw"] = "作战自卫冲锋枪",
|
||||
["weapon_gusenberg"] = "古森柏冲锋枪",
|
||||
["weapon_machinepistol"] = "冲锋手枪",
|
||||
["weapon_mg"] = "机枪",
|
||||
["weapon_microsmg"] = "微型冲锋枪",
|
||||
["weapon_minismg"] = "迷你冲锋枪",
|
||||
["weapon_smg"] = "冲锋枪",
|
||||
["weapon_smg_mk2"] = "冲锋枪-MK2",
|
||||
["weapon_raycarbine"] = "不洁使者",
|
||||
["weapon_tecpistol"] = "战术冲锋枪",
|
||||
|
||||
-- Rifles
|
||||
["weapon_advancedrifle"] = "高级步枪",
|
||||
["weapon_assaultrifle"] = "突击步枪",
|
||||
["weapon_assaultrifle_mk2"] = "突击步枪-MK2",
|
||||
["weapon_bullpuprifle"] = "无托式步枪",
|
||||
["weapon_bullpuprifle_mk2"] = "无托式步枪-MK2",
|
||||
["weapon_carbinerifle"] = "卡宾步枪",
|
||||
["weapon_carbinerifle_mk2"] = "卡宾步枪-MK2",
|
||||
["weapon_compactrifle"] = "紧凑型步枪",
|
||||
["weapon_militaryrifle"] = "军用步枪",
|
||||
["weapon_specialcarbine"] = "特制卡宾步枪",
|
||||
["weapon_specialcarbine_mk2"] = "特制卡宾步枪-MK2",
|
||||
["weapon_heavyrifle"] = "重型步枪",
|
||||
["weapon_battlerifle"] = "战斗步枪",
|
||||
|
||||
-- Sniper
|
||||
["weapon_heavysniper"] = "重型狙击步枪",
|
||||
["weapon_heavysniper_mk2"] = "重型狙击步枪-MK2",
|
||||
["weapon_marksmanrifle"] = "射手步枪",
|
||||
["weapon_marksmanrifle_mk2"] = "射手步枪-MK2",
|
||||
["weapon_sniperrifle"] = "狙击步枪",
|
||||
|
||||
-- Heavy / Launchers
|
||||
["weapon_compactlauncher"] = "紧凑型榴弹发射器",
|
||||
["weapon_firework"] = "烟花发射器",
|
||||
["weapon_grenadelauncher"] = "榴弹发射器",
|
||||
["weapon_hominglauncher"] = "制导火箭发射器",
|
||||
["weapon_minigun"] = "火神机枪",
|
||||
["weapon_railgun"] = "电磁轨道炮",
|
||||
["weapon_rpg"] = "火箭炮",
|
||||
["weapon_rayminigun"] = "寡妇制造者",
|
||||
|
||||
-- Criminal Enterprises DLC
|
||||
["weapon_metaldetector"] = "金属探测器",
|
||||
["weapon_precisionrifle"] = "精确步枪",
|
||||
["weapon_tactilerifle"] = "制式卡宾步枪",
|
||||
|
||||
-- Drug wars dlc
|
||||
["weapon_candycane"] = "糖果手杖",
|
||||
["weapon_acidpackage"] = "酸液包",
|
||||
["weapon_pistolxm3"] = "战术手枪-x3m",
|
||||
["weapon_railgunxm3"] = "电磁轨道炮",
|
||||
|
||||
-- Chop Shop DLC
|
||||
["weapon_snowlauncher"] = "雪球发射器",
|
||||
["weapon_hackingdevice"] = "黑客设备",
|
||||
|
||||
-- Bottom Dollar Bounties DLC
|
||||
["weapon_stunrod"] = "电击棒",
|
||||
|
||||
-- Thrown
|
||||
["weapon_ball"] = "棒球",
|
||||
["weapon_bzgas"] = "毒气弹",
|
||||
["weapon_flare"] = "信号棒",
|
||||
["weapon_grenade"] = "手榴弹",
|
||||
["weapon_petrolcan"] = "汽油桶",
|
||||
["weapon_hazardcan"] = "有害汽油桶",
|
||||
["weapon_molotov"] = "汽油弹",
|
||||
["weapon_proxmine"] = "感应式地雷",
|
||||
["weapon_pipebomb"] = "土製炸彈",
|
||||
["weapon_snowball"] = "雪球",
|
||||
["weapon_stickybomb"] = "黏弹",
|
||||
["weapon_smokegrenade"] = "催泪瓦斯",
|
||||
|
||||
-- Special
|
||||
["weapon_fireextinguisher"] = "灭火器",
|
||||
["weapon_digiscanner"] = "数位扫描仪",
|
||||
["weapon_garbagebag"] = "垃圾袋",
|
||||
["weapon_handcuffs"] = "手铐",
|
||||
["gadget_nightvision"] = "夜视仪",
|
||||
["gadget_parachute"] = "降落伞",
|
||||
|
||||
-- Weapon Components
|
||||
["component_knuckle_base"] = "基础",
|
||||
["component_knuckle_pimp"] = "皮条客",
|
||||
["component_knuckle_ballas"] = "巴拉斯帮",
|
||||
["component_knuckle_dollar"] = "暴发户",
|
||||
["component_knuckle_diamond"] = "钻石王",
|
||||
["component_knuckle_hate"] = "憎恶獠牙",
|
||||
["component_knuckle_love"] = "爱之惩戒",
|
||||
["component_knuckle_player"] = "情场玩家",
|
||||
["component_knuckle_king"] = "王者之牙",
|
||||
["component_knuckle_vagos"] = "维戈斯帮",
|
||||
|
||||
["component_luxary_finish"] = "奢华镀层",
|
||||
|
||||
["component_handle_default"] = "标准握把",
|
||||
["component_handle_vip"] = "VIP专用握把",
|
||||
["component_handle_bodyguard"] = "保镖战术握把",
|
||||
|
||||
["component_vip_finish"] = "VIP定制镀层",
|
||||
["component_bodyguard_finish"] = "护卫队特供镀层",
|
||||
|
||||
["component_camo_finish"] = "数码迷彩",
|
||||
["component_camo_finish2"] = "笔刷迷彩",
|
||||
["component_camo_finish3"] = "丛林迷彩",
|
||||
["component_camo_finish4"] = "骷髅迷彩",
|
||||
["component_camo_finish5"] = "69式迷彩",
|
||||
["component_camo_finish6"] = "英仙座迷彩",
|
||||
["component_camo_finish7"] = "豹纹迷彩",
|
||||
["component_camo_finish8"] = "斑马迷彩",
|
||||
["component_camo_finish9"] = "几何迷彩",
|
||||
["component_camo_finish10"] = "爆炸效果迷彩",
|
||||
["component_camo_finish11"] = "爱国者迷彩",
|
||||
|
||||
["component_camo_slide_finish"] = "数码迷彩滑轨",
|
||||
["component_camo_slide_finish2"] = "笔刷迷彩滑轨",
|
||||
["component_camo_slide_finish3"] = "丛林迷彩滑轨",
|
||||
["component_camo_slide_finish4"] = "骷髅迷彩滑轨",
|
||||
["component_camo_slide_finish5"] = "69式迷彩滑轨",
|
||||
["component_camo_slide_finish6"] = "英仙座迷彩滑轨",
|
||||
["component_camo_slide_finish7"] = "豹纹迷彩滑轨",
|
||||
["component_camo_slide_finish8"] = "斑马迷彩滑轨",
|
||||
["component_camo_slide_finish9"] = "几何迷彩滑轨",
|
||||
["component_camo_slide_finish10"] = "爆炸效果迷彩滑轨",
|
||||
["component_camo_slide_finish11"] = "爱国者迷彩滑轨",
|
||||
|
||||
["component_clip_default"] = "标准弹匣",
|
||||
["component_clip_extended"] = "扩容弹匣",
|
||||
["component_clip_drum"] = "弹鼓",
|
||||
["component_clip_box"] = "弹箱",
|
||||
|
||||
["component_scope_holo"] = "全息瞄具",
|
||||
["component_scope_small"] = "紧凑型瞄具",
|
||||
["component_scope_medium"] = "中型瞄具",
|
||||
["component_scope_large"] = "远距光学瞄具",
|
||||
["component_scope"] = "战术导轨瞄具",
|
||||
["component_scope_advanced"] = "先进战斗光学瞄具",
|
||||
["component_ironsights"] = "机械瞄具",
|
||||
|
||||
["component_suppressor"] = "消音器",
|
||||
["component_compensator"] = "枪口补偿器",
|
||||
|
||||
["component_muzzle_flat"] = "平面制退器",
|
||||
["component_muzzle_tactical"] = "战术制退器",
|
||||
["component_muzzle_fat"] = "粗齿制退器",
|
||||
["component_muzzle_precision"] = "精密补偿器",
|
||||
["component_muzzle_heavy"] = "重型枪口制退器",
|
||||
["component_muzzle_slanted"] = "斜切式枪口制退器",
|
||||
["component_muzzle_split"] = "开叉式枪口制退器",
|
||||
["component_muzzle_squared"] = "平顶式枪口制退器",
|
||||
|
||||
["component_flashlight"] = "战术手电",
|
||||
["component_grip"] = "握把",
|
||||
|
||||
["component_barrel_default"] = "标准枪管",
|
||||
["component_barrel_heavy"] = "重型枪管",
|
||||
|
||||
["component_ammo_tracer"] = "曳光弹药",
|
||||
["component_ammo_incendiary"] = "燃烧弹药",
|
||||
["component_ammo_hollowpoint"] = "空尖弹药",
|
||||
["component_ammo_fmj"] = "全金属被甲弹药",
|
||||
["component_ammo_armor"] = "穿甲弹药",
|
||||
["component_ammo_explosive"] = "高爆燃烧弹药",
|
||||
|
||||
["component_shells_default"] = "标准弹壳",
|
||||
["component_shells_incendiary"] = "龙息弹",
|
||||
["component_shells_armor"] = "钢珠霰弹",
|
||||
["component_shells_hollowpoint"] = "箭形弹",
|
||||
["component_shells_explosive"] = "高爆独头弹",
|
||||
|
||||
-- Weapon Ammo
|
||||
["ammo_rounds"] = "发子弹",
|
||||
["ammo_shells"] = "发霰弹",
|
||||
["ammo_charge"] = "发能量",
|
||||
["ammo_petrol"] = "升燃料",
|
||||
["ammo_firework"] = "个烟花",
|
||||
["ammo_rockets"] = "枚火箭弹",
|
||||
["ammo_grenadelauncher"] = "枚榴弹",
|
||||
["ammo_grenade"] = "枚手雷",
|
||||
["ammo_stickybomb"] = "枚粘性炸弹",
|
||||
["ammo_pipebomb"] = "枚管状炸弹",
|
||||
["ammo_smokebomb"] = "枚烟雾弹",
|
||||
["ammo_molotov"] = "瓶燃烧瓶",
|
||||
["ammo_proxmine"] = "个感应地雷",
|
||||
["ammo_bzgas"] = "罐毒气",
|
||||
["ammo_ball"] = "个球体",
|
||||
["ammo_snowball"] = "个雪球",
|
||||
["ammo_flare"] = "发信号弹",
|
||||
["ammo_flaregun"] = "发信号弹",
|
||||
|
||||
-- Weapon Tints
|
||||
["tint_default"] = "默认涂装",
|
||||
["tint_green"] = "绿色涂装",
|
||||
["tint_gold"] = "金色涂装",
|
||||
["tint_pink"] = "粉色涂装",
|
||||
["tint_army"] = "迷彩涂装",
|
||||
["tint_lspd"] = "警用蓝色涂装",
|
||||
["tint_orange"] = "橙色涂装",
|
||||
["tint_platinum"] = "铂金涂装",
|
||||
-- MK2 Weapon Tints
|
||||
["tint_classic_black"] = "经典黑",
|
||||
["tint_classic_gray"] = "经典灰",
|
||||
["tint_classic_two_tone"] = "经典双色",
|
||||
["tint_classic_white"] = "经典白",
|
||||
["tint_classic_beige"] = "经典米色",
|
||||
["tint_classic_green"] = "经典绿",
|
||||
["tint_classic_blue"] = "经典蓝",
|
||||
["tint_classic_earth"] = "经典大地色",
|
||||
["tint_classic_brown_black"] = "经典棕黑",
|
||||
["tint_contrast_red"] = "对比红",
|
||||
["tint_contrast_blue"] = "对比蓝",
|
||||
["tint_contrast_yellow"] = "对比黄",
|
||||
["tint_contrast_orange"] = "对比橙",
|
||||
["tint_bold_pink"] = "炫彩粉",
|
||||
["tint_bold_purple_yellow"] = "炫彩紫黄",
|
||||
["tint_bold_orange"] = "炫彩橙",
|
||||
["tint_bold_green_purple"] = "炫彩绿紫",
|
||||
["tint_bold_red_feat"] = "炫彩红特调",
|
||||
["tint_bold_green_feat"] = "炫彩绿特调",
|
||||
["tint_bold_cyan_feat"] = "炫彩青特调",
|
||||
["tint_bold_yellow_feat"] = "炫彩黄特调",
|
||||
["tint_bold_red_white"] = "炫彩红白",
|
||||
["tint_bold_blue_white"] = "炫彩蓝白",
|
||||
["tint_metallic_gold"] = "金属金",
|
||||
["tint_metallic_platinum"] = "金属铂金",
|
||||
["tint_metallic_gray_lilac"] = "金属灰紫色",
|
||||
["tint_metallic_purple_lime"] = "金属紫柠色",
|
||||
["tint_metallic_red"] = "金属红",
|
||||
["tint_metallic_green"] = "金属绿",
|
||||
["tint_metallic_blue"] = "金属蓝",
|
||||
["tint_metallic_white_aqua"] = "金属白水色",
|
||||
["tint_metallic_red_yellow"] = "金属红黄色"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
if Config.CustomInventory ~= "ox" then return end
|
||||
|
||||
MySQL.ready(function()
|
||||
TriggerEvent("__cfx_export_ox_inventory_Items", function(ref)
|
||||
if ref then
|
||||
ESX.Items = ref()
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("ox_inventory:itemList", function(items)
|
||||
ESX.Items = items
|
||||
end)
|
||||
end)
|
||||
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
ESX.GetItemLabel = function(item)
|
||||
item = exports.ox_inventory:Items(item)
|
||||
if item then
|
||||
return item.label
|
||||
end
|
||||
end
|
||||
|
||||
function setPlayerInventory(playerId, xPlayer, inventory, isNew)
|
||||
exports.ox_inventory:setPlayerInventory(xPlayer, inventory)
|
||||
if isNew then
|
||||
local shared = json.decode(GetConvar("inventory:accounts", '["money"]'))
|
||||
|
||||
for i = 1, #shared do
|
||||
local name = shared[i]
|
||||
local account = Config.StartingAccountMoney[name]
|
||||
if account then
|
||||
exports.ox_inventory:AddItem(playerId, name, account)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,219 @@
|
||||
local Inventory
|
||||
|
||||
if Config.CustomInventory ~= "ox" then return end
|
||||
|
||||
AddEventHandler("ox_inventory:loadInventory", function(module)
|
||||
Inventory = module
|
||||
end)
|
||||
|
||||
Core.PlayerFunctionOverrides.OxInventory = {
|
||||
getInventory = function(self)
|
||||
return function(minimal)
|
||||
if not minimal then
|
||||
return self.inventory
|
||||
end
|
||||
|
||||
local minimalInventory = {}
|
||||
|
||||
for k, v in pairs(self.inventory) do
|
||||
if v.count and v.count > 0 then
|
||||
local metadata = v.metadata
|
||||
|
||||
if v.metadata and next(v.metadata) == nil then
|
||||
metadata = nil
|
||||
end
|
||||
|
||||
minimalInventory[#minimalInventory + 1] = {
|
||||
name = v.name,
|
||||
count = v.count,
|
||||
slot = k,
|
||||
metadata = metadata,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
return minimalInventory
|
||||
end
|
||||
end,
|
||||
|
||||
getLoadout = function()
|
||||
return function()
|
||||
return {}
|
||||
end
|
||||
end,
|
||||
|
||||
setAccountMoney = function(self)
|
||||
return function(accountName, money, reason)
|
||||
reason = reason or "unknown"
|
||||
if money < 0 then return end
|
||||
local account = self.getAccount(accountName)
|
||||
|
||||
if not account then return end
|
||||
|
||||
money = account.round and ESX.Math.Round(money) or money
|
||||
self.accounts[account.index].money = money
|
||||
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:setAccountMoney", self.source, accountName, money, reason)
|
||||
if Inventory.accounts[accountName] then
|
||||
Inventory.SetItem(self.source, accountName, money)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
addAccountMoney = function(self)
|
||||
return function(accountName, money, reason)
|
||||
reason = reason or "unknown"
|
||||
if money < 1 then return end
|
||||
|
||||
local account = self.getAccount(accountName)
|
||||
if not account then return end
|
||||
|
||||
money = account.round and ESX.Math.Round(money) or money
|
||||
self.accounts[account.index].money = self.accounts[account.index].money + money
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:addAccountMoney", self.source, accountName, money, reason)
|
||||
if Inventory.accounts[accountName] then
|
||||
Inventory.AddItem(self.source, accountName, money)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
removeAccountMoney = function(self)
|
||||
return function(accountName, money, reason)
|
||||
reason = reason or "unknown"
|
||||
if money < 1 then return end
|
||||
|
||||
local account = self.getAccount(accountName)
|
||||
if not account then return end
|
||||
|
||||
money = account.round and ESX.Math.Round(money) or money
|
||||
self.accounts[account.index].money = self.accounts[account.index].money - money
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:removeAccountMoney", self.source, accountName, money, reason)
|
||||
if Inventory.accounts[accountName] then
|
||||
Inventory.RemoveItem(self.source, accountName, money)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
getInventoryItem = function(self)
|
||||
return function(name, metadata)
|
||||
return Inventory.GetItem(self.source, name, metadata)
|
||||
end
|
||||
end,
|
||||
|
||||
addInventoryItem = function(self)
|
||||
return function(name, count, metadata, slot)
|
||||
return Inventory.AddItem(self.source, name, count or 1, metadata, slot)
|
||||
end
|
||||
end,
|
||||
|
||||
removeInventoryItem = function(self)
|
||||
return function(name, count, metadata, slot)
|
||||
return Inventory.RemoveItem(self.source, name, count or 1, metadata, slot)
|
||||
end
|
||||
end,
|
||||
|
||||
setInventoryItem = function(self)
|
||||
return function(name, count, metadata)
|
||||
return Inventory.SetItem(self.source, name, count, metadata)
|
||||
end
|
||||
end,
|
||||
|
||||
canCarryItem = function(self)
|
||||
return function(name, count, metadata)
|
||||
return Inventory.CanCarryItem(self.source, name, count, metadata)
|
||||
end
|
||||
end,
|
||||
|
||||
canSwapItem = function(self)
|
||||
return function(firstItem, firstItemCount, testItem, testItemCount)
|
||||
return Inventory.CanSwapItem(self.source, firstItem, firstItemCount, testItem, testItemCount)
|
||||
end
|
||||
end,
|
||||
|
||||
setMaxWeight = function(self)
|
||||
return function(newWeight)
|
||||
self.maxWeight = newWeight
|
||||
self.triggerEvent("esx:setMaxWeight", self.maxWeight)
|
||||
return Inventory.SetMaxWeight(self.source, newWeight)
|
||||
end
|
||||
end,
|
||||
|
||||
addWeapon = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
addWeaponComponent = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
addWeaponAmmo = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
updateWeaponAmmo = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
setWeaponTint = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
getWeaponTint = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
removeWeapon = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
removeWeaponComponent = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
removeWeaponAmmo = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
hasWeaponComponent = function()
|
||||
return function()
|
||||
return false
|
||||
end
|
||||
end,
|
||||
|
||||
hasWeapon = function()
|
||||
return function()
|
||||
return false
|
||||
end
|
||||
end,
|
||||
|
||||
hasItem = function(self)
|
||||
return function(name, metadata)
|
||||
return Inventory.GetItem(self.source, name, metadata)
|
||||
end
|
||||
end,
|
||||
|
||||
getWeapon = function()
|
||||
return function() end
|
||||
end,
|
||||
|
||||
syncInventory = function(self)
|
||||
return function(weight, maxWeight, items, money)
|
||||
self.weight, self.maxWeight = weight, maxWeight
|
||||
self.inventory = items
|
||||
|
||||
if not money then return end
|
||||
for accountName, amount in pairs(money) do
|
||||
local account = self.getAccount(accountName)
|
||||
|
||||
if account and ESX.Math.Round(account.money) ~= amount then
|
||||
account.money = amount
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:setAccountMoney", self.source, accountName, amount, "Sync account with item")
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
969
resources/[core]/es_extended/server/classes/player.lua
Normal file
969
resources/[core]/es_extended/server/classes/player.lua
Normal file
@@ -0,0 +1,969 @@
|
||||
---@class ESXAccount
|
||||
---@field name string # Account name (e.g., "bank", "money").
|
||||
---@field money number # Current balance in this account.
|
||||
---@field label string # Human-readable label for the account.
|
||||
---@field round boolean # Whether amounts are rounded for display.
|
||||
---@field index number # Index of the account in the player's accounts list.
|
||||
|
||||
---@class ESXItem
|
||||
---@field name string # Item identifier (internal name).
|
||||
---@field label string # Display name of the item.
|
||||
---@field weight number # Weight of a single unit of the item.
|
||||
---@field usable boolean # Whether the item can be used.
|
||||
---@field rare boolean # Whether the item is rare.
|
||||
---@field canRemove boolean # Whether the item can be removed from inventory.
|
||||
|
||||
---@class ESXInventoryItem:ESXItem
|
||||
---@field count number # Number of this item in the player's inventory.
|
||||
|
||||
---@class ESXJob
|
||||
---@field id number # Job ID.
|
||||
---@field name string # Job internal name.
|
||||
---@field label string # Job display label.
|
||||
---@field grade number # Current grade/rank number.
|
||||
---@field grade_name string # Name of the current grade.
|
||||
---@field grade_label string # Label of the current grade.
|
||||
---@field grade_salary number # Salary for the current grade.
|
||||
---@field skin_male table # Skin configuration for male characters.
|
||||
---@field skin_female table # Skin configuration for female characters.
|
||||
---@field onDuty boolean? # Whether the player is currently on duty.
|
||||
|
||||
---@class ESXWeapon
|
||||
---@field name string # Weapon identifier (internal name).
|
||||
---@field label string # Weapon display name.
|
||||
|
||||
---@class ESXInventoryWeapon:ESXWeapon
|
||||
---@field ammo number # Amount of ammo in the weapon.
|
||||
---@field components string[] # List of components attached to the weapon.
|
||||
---@field tintIndex number # Current weapon tint index.
|
||||
|
||||
---@class ESXWeaponComponent
|
||||
---@field name string # Component identifier (internal name).
|
||||
---@field label string # Component display name.
|
||||
---@field hash string|number # Component hash or identifier.
|
||||
|
||||
---@class StaticPlayer
|
||||
---@field src number # Player's server ID.
|
||||
--- Money Functions
|
||||
---@field setMoney fun(money: number) # Set player's cash balance.
|
||||
---@field getMoney fun(): number # Get player's current cash balance.
|
||||
---@field addMoney fun(money: number, reason: string) # Add money to the player's cash balance.
|
||||
---@field removeMoney fun(money: number, reason: string) # Remove money from the player's cash balance.
|
||||
---@field setAccountMoney fun(accountName: string, money: number, reason?: string) # Set specific account balance.
|
||||
---@field addAccountMoney fun(accountName: string, money: number, reason?: string) # Add money to an account.
|
||||
---@field removeAccountMoney fun(accountName: string, money: number, reason?: string) # Remove money from an account.
|
||||
---@field getAccount fun(account: string): ESXAccount? # Get account data by name.
|
||||
---@field getAccounts fun(minimal?: boolean): ESXAccount[]|table<string,number> # Get all accounts, optionally minimal.
|
||||
--- Inventory Functions
|
||||
---@field getInventory fun(minimal?: boolean): ESXInventoryItem[]|table<string,number> # Get inventory, optionally minimal.
|
||||
---@field getInventoryItem fun(itemName: string): ESXInventoryItem? # Get a specific item from inventory.
|
||||
---@field addInventoryItem fun(itemName: string, count: number) # Add items to inventory.
|
||||
---@field removeInventoryItem fun(itemName: string, count: number) # Remove items from inventory.
|
||||
---@field setInventoryItem fun(itemName: string, count: number) # Set item count in inventory.
|
||||
---@field getWeight fun(): number # Get current carried weight.
|
||||
---@field getMaxWeight fun(): number # Get maximum carry weight.
|
||||
---@field setMaxWeight fun(newWeight: number) # Set maximum carry weight.
|
||||
---@field canCarryItem fun(itemName: string, count: number): boolean # Check if player can carry more of an item.
|
||||
---@field canSwapItem fun(firstItem: string, firstItemCount: number, testItem: string, testItemCount: number): boolean # Check if items can be swapped.
|
||||
---@field hasItem fun(item: string): ESXInventoryItem|false, number? # Check if player has an item.
|
||||
---@field getLoadout fun(minimal?: boolean): ESXInventoryWeapon[]|table<string, {ammo:number, tintIndex?:number, components?:string[]}> # Get player's weapon loadout.
|
||||
--- Job Functions
|
||||
---@field getJob fun(): ESXJob # Get player's current job.
|
||||
---@field setJob fun(newJob: string, grade: string, onDuty?: boolean) # Set player's job and grade.
|
||||
---@field setGroup fun(newGroup: string) # Set player's permission group.
|
||||
---@field getGroup fun(): string # Get player's permission group.
|
||||
--- Weapon Functions
|
||||
---@field addWeapon fun(weaponName: string, ammo: number) # Give player a weapon.
|
||||
---@field removeWeapon fun(weaponName: string) # Remove weapon from player.
|
||||
---@field hasWeapon fun(weaponName: string): boolean # Check if player has a weapon.
|
||||
---@field getWeapon fun(weaponName: string): number?, table? # Get weapon ammo & components.
|
||||
---@field addWeaponAmmo fun(weaponName: string, ammoCount: number) # Add ammo to a weapon.
|
||||
---@field removeWeaponAmmo fun(weaponName: string, ammoCount: number) # Remove ammo from a weapon.
|
||||
---@field updateWeaponAmmo fun(weaponName: string, ammoCount: number) # Update ammo count for a weapon.
|
||||
---@field addWeaponComponent fun(weaponName: string, weaponComponent: string) # Add component to weapon.
|
||||
---@field removeWeaponComponent fun(weaponName: string, weaponComponent: string) # Remove component from weapon.
|
||||
---@field hasWeaponComponent fun(weaponName: string, weaponComponent: string): boolean # Check if weapon has component.
|
||||
---@field setWeaponTint fun(weaponName: string, weaponTintIndex: number) # Set weapon tint.
|
||||
---@field getWeaponTint fun(weaponName: string): number # Get weapon tint.
|
||||
--- Player State Functions
|
||||
---@field getIdentifier fun(): string # Get player's unique identifier.
|
||||
---@field getSSN fun(): string # Get player's social security number.
|
||||
---@field getSource fun(): number # Get player source/server ID.
|
||||
---@field getPlayerId fun(): number # Alias for getSource.
|
||||
---@field getName fun(): string # Get player's name.
|
||||
---@field setName fun(newName: string) # Set player's name.
|
||||
---@field setCoords fun(coordinates: vector4|vector3|table) # Teleport player to coordinates.
|
||||
---@field getCoords fun(vector?: boolean, heading?: boolean): vector3|vector4|table # Get player's coordinates.
|
||||
---@field isAdmin fun(): boolean # Check if player is admin.
|
||||
---@field kick fun(reason: string) # Kick player from server.
|
||||
---@field getPlayTime fun(): number # Get total playtime in seconds.
|
||||
---@field set fun(k: string, v: any) # Set custom variable.
|
||||
---@field get fun(k: string): any # Get custom variable.
|
||||
--- Metadata Functions
|
||||
---@field getMeta fun(index?: string, subIndex?: string|table): any # Get metadata value(s).
|
||||
---@field setMeta fun(index: string, value: any, subValue?: any) # Set metadata value(s).
|
||||
---@field clearMeta fun(index: string, subValues?: string|table) # Clear metadata value(s).
|
||||
--- Notification Functions
|
||||
---@field showNotification fun(msg: string, notifyType?: string, length?: number, title?: string, position?: string) # Show a simple notification.
|
||||
---@field showAdvancedNotification fun(sender: string, subject: string, msg: string, textureDict: string, iconType: string, flash: boolean, saveToBrief: boolean, hudColorIndex: number) # Show advanced notification.
|
||||
---@field showHelpNotification fun(msg: string, thisFrame?: boolean, beep?: boolean, duration?: number) # Show help notification.
|
||||
--- Misc Functions
|
||||
---@field togglePaycheck fun(toggle: boolean) # Enable/disable paycheck.
|
||||
---@field isPaycheckEnabled fun(): boolean # Check if paycheck is enabled.
|
||||
---@field executeCommand fun(command: string) # Execute a server command.
|
||||
---@field triggerEvent fun(eventName: string, ...) # Trigger client event for this player.
|
||||
|
||||
|
||||
---@class xPlayer:StaticPlayer
|
||||
--- Properties
|
||||
---@field accounts ESXAccount[] # Array of the player's accounts.
|
||||
---@field coords table # Player's coordinates {x, y, z, heading}.
|
||||
---@field group string # Player permission group.
|
||||
---@field identifier string # Unique identifier (usually Steam or license).
|
||||
---@field license string # Player license string.
|
||||
---@field inventory ESXInventoryItem[] # Player's inventory items.
|
||||
---@field job ESXJob # Player's current job.
|
||||
---@field loadout ESXInventoryWeapon[] # Player's current weapons.
|
||||
---@field name string # Player's display name.
|
||||
---@field playerId number # Player's ID (server ID).
|
||||
---@field source number # Player's source (alias for playerId).
|
||||
---@field variables table # Custom player variables.
|
||||
---@field weight number # Current carried weight.
|
||||
---@field maxWeight number # Maximum carry weight.
|
||||
---@field metadata table # Custom metadata table.
|
||||
---@field lastPlaytime number # Last recorded playtime in seconds.
|
||||
---@field paycheckEnabled boolean # Whether paycheck is enabled.
|
||||
---@field admin boolean # Whether the player is an admin.
|
||||
|
||||
---@param playerId number
|
||||
---@param identifier string
|
||||
---@param ssn string
|
||||
---@param group string
|
||||
---@param accounts ESXAccount[]
|
||||
---@param inventory table
|
||||
---@param weight number
|
||||
---@param job ESXJob
|
||||
---@param loadout ESXInventoryWeapon[]
|
||||
---@param name string
|
||||
---@param coords vector4|{x: number, y: number, z: number, heading: number}
|
||||
---@param metadata table
|
||||
---@return xPlayer
|
||||
function CreateExtendedPlayer(playerId, identifier, ssn, group, accounts, inventory, weight, job, loadout, name, coords, metadata)
|
||||
---@diagnostic disable-next-line: missing-fields
|
||||
local self = {} ---@type xPlayer
|
||||
|
||||
self.accounts = accounts
|
||||
self.coords = coords
|
||||
self.group = group
|
||||
self.identifier = identifier
|
||||
self.ssn = ssn
|
||||
self.inventory = inventory
|
||||
self.job = job
|
||||
self.loadout = loadout
|
||||
self.name = name
|
||||
self.playerId = playerId
|
||||
self.source = playerId
|
||||
self.variables = {}
|
||||
self.weight = weight
|
||||
self.maxWeight = Config.MaxWeight
|
||||
self.metadata = metadata
|
||||
self.lastPlaytime = self.metadata.lastPlaytime or 0
|
||||
self.paycheckEnabled = true
|
||||
self.admin = Core.IsPlayerAdmin(playerId)
|
||||
if Config.Multichar then
|
||||
local startIndex = identifier:find(":", 1)
|
||||
if startIndex then
|
||||
self.license = ("%s%s"):format(Config.Identifier, identifier:sub(startIndex, identifier:len()))
|
||||
end
|
||||
else
|
||||
self.license = ("%s:%s"):format(Config.Identifier, identifier)
|
||||
end
|
||||
|
||||
if type(self.metadata.jobDuty) ~= "boolean" then
|
||||
self.metadata.jobDuty = self.job.name ~= "unemployed" and Config.DefaultJobDuty or false
|
||||
end
|
||||
job.onDuty = self.metadata.jobDuty
|
||||
|
||||
ExecuteCommand(("add_principal identifier.%s group.%s"):format(self.license, self.group))
|
||||
|
||||
local stateBag = Player(self.source).state
|
||||
stateBag:set("identifier", self.identifier, false)
|
||||
stateBag:set("license", self.license, false)
|
||||
stateBag:set("job", self.job, true)
|
||||
stateBag:set("group", self.group, true)
|
||||
stateBag:set("name", self.name, true)
|
||||
|
||||
function self.triggerEvent(eventName, ...)
|
||||
assert(type(eventName) == "string", "eventName should be string!")
|
||||
TriggerClientEvent(eventName, self.source, ...)
|
||||
end
|
||||
|
||||
function self.togglePaycheck(toggle)
|
||||
self.paycheckEnabled = toggle
|
||||
end
|
||||
|
||||
function self.isPaycheckEnabled()
|
||||
return self.paycheckEnabled
|
||||
end
|
||||
|
||||
function self.isAdmin()
|
||||
return Core.IsPlayerAdmin(self.source)
|
||||
end
|
||||
|
||||
function self.setCoords(coordinates)
|
||||
local ped <const> = GetPlayerPed(self.source)
|
||||
|
||||
SetEntityCoords(ped, coordinates.x, coordinates.y, coordinates.z, false, false, false, false)
|
||||
SetEntityHeading(ped, coordinates.w or coordinates.heading or 0.0)
|
||||
end
|
||||
|
||||
function self.getCoords(vector, heading)
|
||||
local ped <const> = GetPlayerPed(self.source)
|
||||
local entityCoords <const> = GetEntityCoords(ped)
|
||||
local entityHeading <const> = GetEntityHeading(ped)
|
||||
|
||||
local coordinates = { x = entityCoords.x, y = entityCoords.y, z = entityCoords.z }
|
||||
|
||||
if vector then
|
||||
coordinates = (heading and vector4(entityCoords.x, entityCoords.y, entityCoords.z, entityHeading) or entityCoords)
|
||||
else
|
||||
if heading then
|
||||
coordinates.heading = entityHeading
|
||||
end
|
||||
end
|
||||
|
||||
return coordinates
|
||||
end
|
||||
|
||||
function self.kick(reason)
|
||||
DropPlayer(self.source --[[@as string]], reason)
|
||||
end
|
||||
|
||||
function self.getPlayTime()
|
||||
-- luacheck: ignore
|
||||
return self.lastPlaytime + GetPlayerTimeOnline(self.source --[[@as string]])
|
||||
end
|
||||
|
||||
function self.setMoney(money)
|
||||
assert(type(money) == "number", "money should be number!")
|
||||
money = ESX.Math.Round(money)
|
||||
self.setAccountMoney("money", money)
|
||||
end
|
||||
|
||||
function self.getMoney()
|
||||
return self.getAccount("money").money
|
||||
end
|
||||
|
||||
function self.addMoney(money, reason)
|
||||
money = ESX.Math.Round(money)
|
||||
self.addAccountMoney("money", money, reason)
|
||||
end
|
||||
|
||||
function self.removeMoney(money, reason)
|
||||
money = ESX.Math.Round(money)
|
||||
self.removeAccountMoney("money", money, reason)
|
||||
end
|
||||
|
||||
function self.getIdentifier()
|
||||
return self.identifier
|
||||
end
|
||||
|
||||
function self.getSSN()
|
||||
return self.ssn
|
||||
end
|
||||
|
||||
function self.setGroup(newGroup)
|
||||
local lastGroup = self.group
|
||||
|
||||
ExecuteCommand(("remove_principal identifier.%s group.%s"):format(self.license, self.group))
|
||||
|
||||
self.group = newGroup
|
||||
|
||||
TriggerEvent("esx:setGroup", self.source, self.group, lastGroup)
|
||||
self.triggerEvent("esx:setGroup", self.group, lastGroup)
|
||||
Player(self.source).state:set("group", self.group, true)
|
||||
|
||||
ExecuteCommand(("add_principal identifier.%s group.%s"):format(self.license, self.group))
|
||||
end
|
||||
|
||||
function self.getGroup()
|
||||
return self.group
|
||||
end
|
||||
|
||||
function self.set(k, v)
|
||||
self.variables[k] = v
|
||||
|
||||
self.triggerEvent('esx:updatePlayerData', 'variables', self.variables)
|
||||
end
|
||||
|
||||
function self.get(k)
|
||||
return self.variables[k]
|
||||
end
|
||||
|
||||
function self.getAccounts(minimal)
|
||||
if not minimal then
|
||||
return self.accounts
|
||||
end
|
||||
|
||||
local minimalAccounts = {}
|
||||
|
||||
for i = 1, #self.accounts do
|
||||
minimalAccounts[self.accounts[i].name] = self.accounts[i].money
|
||||
end
|
||||
|
||||
return minimalAccounts
|
||||
end
|
||||
|
||||
function self.getAccount(account)
|
||||
account = string.lower(account)
|
||||
for i = 1, #self.accounts do
|
||||
local accountName = string.lower(self.accounts[i].name)
|
||||
if accountName == account then
|
||||
return self.accounts[i]
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function self.getInventory(minimal)
|
||||
if minimal then
|
||||
local minimalInventory = {}
|
||||
|
||||
for _, v in ipairs(self.inventory) do
|
||||
if v.count > 0 then
|
||||
minimalInventory[v.name] = v.count
|
||||
end
|
||||
end
|
||||
|
||||
return minimalInventory
|
||||
end
|
||||
|
||||
return self.inventory
|
||||
end
|
||||
|
||||
function self.getJob()
|
||||
return self.job
|
||||
end
|
||||
|
||||
function self.getLoadout(minimal)
|
||||
if not minimal then
|
||||
return self.loadout
|
||||
end
|
||||
local minimalLoadout = {}
|
||||
|
||||
for _, v in ipairs(self.loadout) do
|
||||
minimalLoadout[v.name] = { ammo = v.ammo }
|
||||
if v.tintIndex > 0 then
|
||||
minimalLoadout[v.name].tintIndex = v.tintIndex
|
||||
end
|
||||
|
||||
if #v.components > 0 then
|
||||
local components = {}
|
||||
|
||||
for _, component in ipairs(v.components) do
|
||||
if component ~= "clip_default" then
|
||||
components[#components + 1] = component
|
||||
end
|
||||
end
|
||||
|
||||
if #components > 0 then
|
||||
minimalLoadout[v.name].components = components
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return minimalLoadout
|
||||
end
|
||||
|
||||
function self.getName()
|
||||
return self.name
|
||||
end
|
||||
|
||||
function self.setName(newName)
|
||||
self.name = newName
|
||||
Player(self.source).state:set("name", self.name, true)
|
||||
end
|
||||
|
||||
function self.setAccountMoney(accountName, money, reason)
|
||||
reason = reason or "unknown"
|
||||
if not tonumber(money) then
|
||||
error(("Tried To Set Account ^5%s^1 For Player ^5%s^1 To An Invalid Number -> ^5%s^1"):format(accountName, self.playerId, money))
|
||||
return
|
||||
end
|
||||
if money >= 0 then
|
||||
local account = self.getAccount(accountName)
|
||||
|
||||
if account then
|
||||
money = account.round and ESX.Math.Round(money) or money
|
||||
self.accounts[account.index].money = money
|
||||
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:setAccountMoney", self.source, accountName, money, reason)
|
||||
else
|
||||
error(("Tried To Set Invalid Account ^5%s^1 For Player ^5%s^1!"):format(accountName, self.playerId))
|
||||
end
|
||||
else
|
||||
error(("Tried To Set Account ^5%s^1 For Player ^5%s^1 To An Invalid Number -> ^5%s^1"):format(accountName, self.playerId, money))
|
||||
end
|
||||
end
|
||||
|
||||
function self.addAccountMoney(accountName, money, reason)
|
||||
reason = reason or "Unknown"
|
||||
if not tonumber(money) then
|
||||
error(("Tried To Set Account ^5%s^1 For Player ^5%s^1 To An Invalid Number -> ^5%s^1"):format(accountName, self.playerId, money))
|
||||
return
|
||||
end
|
||||
if money > 0 then
|
||||
local account = self.getAccount(accountName)
|
||||
if account then
|
||||
money = account.round and ESX.Math.Round(money) or money
|
||||
self.accounts[account.index].money = self.accounts[account.index].money + money
|
||||
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:addAccountMoney", self.source, accountName, money, reason)
|
||||
else
|
||||
error(("Tried To Set Add To Invalid Account ^5%s^1 For Player ^5%s^1!"):format(accountName, self.playerId))
|
||||
end
|
||||
else
|
||||
error(("Tried To Set Account ^5%s^1 For Player ^5%s^1 To An Invalid Number -> ^5%s^1"):format(accountName, self.playerId, money))
|
||||
end
|
||||
end
|
||||
|
||||
function self.removeAccountMoney(accountName, money, reason)
|
||||
reason = reason or "Unknown"
|
||||
if not tonumber(money) then
|
||||
error(("Tried To Set Account ^5%s^1 For Player ^5%s^1 To An Invalid Number -> ^5%s^1"):format(accountName, self.playerId, money))
|
||||
return
|
||||
end
|
||||
if money > 0 then
|
||||
local account = self.getAccount(accountName)
|
||||
|
||||
if account then
|
||||
money = account.round and ESX.Math.Round(money) or money
|
||||
if self.accounts[account.index].money - money > self.accounts[account.index].money then
|
||||
error(("Tried To Underflow Account ^5%s^1 For Player ^5%s^1!"):format(accountName, self.playerId))
|
||||
return
|
||||
end
|
||||
self.accounts[account.index].money = self.accounts[account.index].money - money
|
||||
|
||||
self.triggerEvent("esx:setAccountMoney", account)
|
||||
TriggerEvent("esx:removeAccountMoney", self.source, accountName, money, reason)
|
||||
else
|
||||
error(("Tried To Set Add To Invalid Account ^5%s^1 For Player ^5%s^1!"):format(accountName, self.playerId))
|
||||
end
|
||||
else
|
||||
error(("Tried To Set Account ^5%s^1 For Player ^5%s^1 To An Invalid Number -> ^5%s^1"):format(accountName, self.playerId, money))
|
||||
end
|
||||
end
|
||||
|
||||
function self.getInventoryItem(itemName)
|
||||
for _, v in ipairs(self.inventory) do
|
||||
if v.name == itemName then
|
||||
return v
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function self.addInventoryItem(itemName, count)
|
||||
local item = self.getInventoryItem(itemName)
|
||||
|
||||
if item then
|
||||
count = ESX.Math.Round(count)
|
||||
item.count = item.count + count
|
||||
self.weight = self.weight + (item.weight * count)
|
||||
|
||||
TriggerEvent("esx:onAddInventoryItem", self.source, item.name, item.count)
|
||||
self.triggerEvent("esx:addInventoryItem", item.name, item.count)
|
||||
end
|
||||
end
|
||||
|
||||
function self.removeInventoryItem(itemName, count)
|
||||
local item = self.getInventoryItem(itemName)
|
||||
|
||||
if item then
|
||||
count = ESX.Math.Round(count)
|
||||
if count > 0 then
|
||||
local newCount = item.count - count
|
||||
|
||||
if newCount >= 0 then
|
||||
item.count = newCount
|
||||
self.weight = self.weight - (item.weight * count)
|
||||
|
||||
TriggerEvent("esx:onRemoveInventoryItem", self.source, item.name, item.count)
|
||||
self.triggerEvent("esx:removeInventoryItem", item.name, item.count)
|
||||
end
|
||||
else
|
||||
error(("Player ID:^5%s Tried remove a Invalid count -> %s of %s"):format(self.playerId, count, itemName))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function self.setInventoryItem(itemName, count)
|
||||
local item = self.getInventoryItem(itemName)
|
||||
|
||||
if item and count >= 0 then
|
||||
count = ESX.Math.Round(count)
|
||||
|
||||
if count > item.count then
|
||||
self.addInventoryItem(item.name, count - item.count)
|
||||
else
|
||||
self.removeInventoryItem(item.name, item.count - count)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function self.getWeight()
|
||||
return self.weight
|
||||
end
|
||||
|
||||
function self.getSource()
|
||||
return self.source
|
||||
end
|
||||
self.getPlayerId = self.getSource
|
||||
|
||||
function self.getMaxWeight()
|
||||
return self.maxWeight
|
||||
end
|
||||
|
||||
function self.canCarryItem(itemName, count)
|
||||
if ESX.Items[itemName] then
|
||||
local currentWeight, itemWeight = self.weight, ESX.Items[itemName].weight
|
||||
local newWeight = currentWeight + (itemWeight * count)
|
||||
|
||||
return newWeight <= self.maxWeight
|
||||
else
|
||||
print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(itemName))
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function self.canSwapItem(firstItem, firstItemCount, testItem, testItemCount)
|
||||
local firstItemObject = self.getInventoryItem(firstItem)
|
||||
if not firstItemObject then
|
||||
return false
|
||||
end
|
||||
local testItemObject = self.getInventoryItem(testItem)
|
||||
if not testItemObject then
|
||||
return false
|
||||
end
|
||||
|
||||
if firstItemObject.count >= firstItemCount then
|
||||
local weightWithoutFirstItem = ESX.Math.Round(self.weight - (firstItemObject.weight * firstItemCount))
|
||||
local weightWithTestItem = ESX.Math.Round(weightWithoutFirstItem + (testItemObject.weight * testItemCount))
|
||||
|
||||
return weightWithTestItem <= self.maxWeight
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function self.setMaxWeight(newWeight)
|
||||
self.maxWeight = newWeight
|
||||
self.triggerEvent("esx:setMaxWeight", self.maxWeight)
|
||||
end
|
||||
|
||||
function self.setJob(newJob, grade, onDuty)
|
||||
grade = tostring(grade)
|
||||
local lastJob = self.job
|
||||
|
||||
if not ESX.DoesJobExist(newJob, grade) then
|
||||
return print(("[ESX] [^3WARNING^7] Ignoring invalid ^5.setJob()^7 usage for ID: ^5%s^7, Job: ^5%s^7"):format(self.source, newJob))
|
||||
end
|
||||
|
||||
if newJob == "unemployed" then
|
||||
onDuty = false
|
||||
end
|
||||
|
||||
if type(onDuty) ~= "boolean" then
|
||||
onDuty = Config.DefaultJobDuty
|
||||
end
|
||||
|
||||
local jobObject, gradeObject = ESX.Jobs[newJob], ESX.Jobs[newJob].grades[grade]
|
||||
|
||||
self.job = {
|
||||
id = jobObject.id,
|
||||
name = jobObject.name,
|
||||
label = jobObject.label,
|
||||
type = jobObject.type,
|
||||
onDuty = onDuty,
|
||||
|
||||
grade = tonumber(grade) or 0,
|
||||
grade_name = gradeObject.name,
|
||||
grade_label = gradeObject.label,
|
||||
grade_salary = gradeObject.salary,
|
||||
|
||||
skin_male = gradeObject.skin_male and json.decode(gradeObject.skin_male) or {},
|
||||
skin_female = gradeObject.skin_female and json.decode(gradeObject.skin_female) or {},
|
||||
}
|
||||
|
||||
self.metadata.jobDuty = onDuty
|
||||
TriggerEvent("esx:setJob", self.source, self.job, lastJob)
|
||||
self.triggerEvent("esx:setJob", self.job, lastJob)
|
||||
Player(self.source).state:set("job", self.job, true)
|
||||
end
|
||||
|
||||
function self.addWeapon(weaponName, ammo)
|
||||
if not self.hasWeapon(weaponName) then
|
||||
local weaponLabel <const> = ESX.GetWeaponLabel(weaponName)
|
||||
|
||||
table.insert(self.loadout, {
|
||||
name = weaponName,
|
||||
ammo = ammo,
|
||||
label = weaponLabel,
|
||||
components = {},
|
||||
tintIndex = 0,
|
||||
})
|
||||
|
||||
GiveWeaponToPed(GetPlayerPed(self.source), joaat(weaponName), ammo, false, false)
|
||||
self.triggerEvent("esx:addInventoryItem", weaponLabel, false, true)
|
||||
self.triggerEvent("esx:addLoadoutItem", weaponName, weaponLabel, ammo)
|
||||
end
|
||||
end
|
||||
|
||||
function self.addWeaponComponent(weaponName, weaponComponent)
|
||||
local loadoutNum <const>, weapon <const> = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
local component = ESX.GetWeaponComponent(weaponName, weaponComponent)
|
||||
|
||||
if component then
|
||||
if not self.hasWeaponComponent(weaponName, weaponComponent) then
|
||||
self.loadout[loadoutNum].components[#self.loadout[loadoutNum].components + 1] = weaponComponent
|
||||
local componentHash = ESX.GetWeaponComponent(weaponName, weaponComponent).hash
|
||||
GiveWeaponComponentToPed(GetPlayerPed(self.source), joaat(weaponName), componentHash)
|
||||
self.triggerEvent("esx:addInventoryItem", component.label, false, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function self.addWeaponAmmo(weaponName, ammoCount)
|
||||
local _, weapon = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
weapon.ammo = weapon.ammo + ammoCount
|
||||
SetPedAmmo(GetPlayerPed(self.source), joaat(weaponName), weapon.ammo)
|
||||
end
|
||||
end
|
||||
|
||||
function self.updateWeaponAmmo(weaponName, ammoCount)
|
||||
local _, weapon = self.getWeapon(weaponName)
|
||||
|
||||
if not weapon then
|
||||
return
|
||||
end
|
||||
|
||||
weapon.ammo = ammoCount
|
||||
|
||||
if weapon.ammo <= 0 then
|
||||
local _, weaponConfig = ESX.GetWeapon(weaponName)
|
||||
if weaponConfig.throwable then
|
||||
self.removeWeapon(weaponName)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function self.setWeaponTint(weaponName, weaponTintIndex)
|
||||
local loadoutNum <const>, weapon <const> = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
local _, weaponObject <const> = ESX.GetWeapon(weaponName)
|
||||
|
||||
if weaponObject.tints and weaponObject.tints[weaponTintIndex] then
|
||||
self.loadout[loadoutNum].tintIndex = weaponTintIndex
|
||||
self.triggerEvent("esx:setWeaponTint", weaponName, weaponTintIndex)
|
||||
self.triggerEvent("esx:addInventoryItem", weaponObject.tints[weaponTintIndex], false, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function self.getWeaponTint(weaponName)
|
||||
local _, weapon <const> = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
return weapon.tintIndex
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function self.removeWeapon(weaponName)
|
||||
local weaponLabel, playerPed <const> = nil, GetPlayerPed(self.source)
|
||||
|
||||
if not playerPed then
|
||||
return error("xPlayer.removeWeapon ^5invalid^1 player ped!")
|
||||
end
|
||||
|
||||
for k, v in ipairs(self.loadout) do
|
||||
if v.name == weaponName then
|
||||
weaponLabel = v.label
|
||||
|
||||
for _, v2 in ipairs(v.components) do
|
||||
self.removeWeaponComponent(weaponName, v2)
|
||||
end
|
||||
|
||||
local weaponHash = joaat(v.name)
|
||||
RemoveWeaponFromPed(playerPed, weaponHash)
|
||||
SetPedAmmo(playerPed, weaponHash, 0)
|
||||
|
||||
table.remove(self.loadout, k)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if weaponLabel then
|
||||
self.triggerEvent("esx:removeInventoryItem", weaponLabel, false, true)
|
||||
self.triggerEvent("esx:removeLoadoutItem", weaponName, weaponLabel)
|
||||
end
|
||||
end
|
||||
|
||||
function self.removeWeaponComponent(weaponName, weaponComponent)
|
||||
local loadoutNum <const>, weapon <const> = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
local component <const> = ESX.GetWeaponComponent(weaponName, weaponComponent)
|
||||
|
||||
if component then
|
||||
if self.hasWeaponComponent(weaponName, weaponComponent) then
|
||||
for k, v in ipairs(self.loadout[loadoutNum].components) do
|
||||
if v == weaponComponent then
|
||||
table.remove(self.loadout[loadoutNum].components, k)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
self.triggerEvent("esx:removeWeaponComponent", weaponName, weaponComponent)
|
||||
self.triggerEvent("esx:removeInventoryItem", component.label, false, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function self.removeWeaponAmmo(weaponName, ammoCount)
|
||||
local _, weapon = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
weapon.ammo = weapon.ammo - ammoCount
|
||||
SetPedAmmo(GetPlayerPed(self.source), joaat(weaponName), weapon.ammo)
|
||||
end
|
||||
end
|
||||
|
||||
function self.hasWeaponComponent(weaponName, weaponComponent)
|
||||
local _, weapon <const> = self.getWeapon(weaponName)
|
||||
|
||||
if weapon then
|
||||
for _, v in ipairs(weapon.components) do
|
||||
if v == weaponComponent then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function self.hasWeapon(weaponName)
|
||||
for _, v in ipairs(self.loadout) do
|
||||
if v.name == weaponName then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function self.hasItem(item)
|
||||
for _, v in ipairs(self.inventory) do
|
||||
if v.name == item and v.count >= 1 then
|
||||
return v, v.count
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function self.getWeapon(weaponName)
|
||||
for k, v in ipairs(self.loadout) do
|
||||
if v.name == weaponName then
|
||||
return k, v
|
||||
end
|
||||
end
|
||||
|
||||
return nil, nil
|
||||
end
|
||||
|
||||
function self.showNotification(msg, notifyType, length, title, position)
|
||||
self.triggerEvent("esx:showNotification", msg, notifyType, length, title, position)
|
||||
end
|
||||
|
||||
function self.showAdvancedNotification(sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex)
|
||||
self.triggerEvent("esx:showAdvancedNotification", sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex)
|
||||
end
|
||||
|
||||
function self.showHelpNotification(msg, thisFrame, beep, duration)
|
||||
self.triggerEvent("esx:showHelpNotification", msg, thisFrame, beep, duration)
|
||||
end
|
||||
|
||||
function self.getMeta(index, subIndex)
|
||||
if not index then
|
||||
return self.metadata
|
||||
end
|
||||
|
||||
if type(index) ~= "string" then
|
||||
error("xPlayer.getMeta ^5index^1 should be ^5string^1!")
|
||||
return
|
||||
end
|
||||
|
||||
local metaData = self.metadata[index]
|
||||
if metaData == nil then
|
||||
return Config.EnableDebug and error(("xPlayer.getMeta ^5%s^1 not exist!"):format(index)) or nil
|
||||
end
|
||||
|
||||
if subIndex and type(metaData) == "table" then
|
||||
local _type = type(subIndex)
|
||||
|
||||
if _type == "string" then
|
||||
local value = metaData[subIndex]
|
||||
return value
|
||||
end
|
||||
|
||||
if _type == "table" then
|
||||
local returnValues = {}
|
||||
|
||||
for i = 1, #subIndex do
|
||||
local key = subIndex[i]
|
||||
if type(key) == "string" then
|
||||
returnValues[key] = self.getMeta(index, key)
|
||||
else
|
||||
error(("xPlayer.getMeta subIndex should be ^5string^1 or ^5table^1! that contains ^5string^1, received ^5%s^1!, skipping..."):format(type(key)))
|
||||
end
|
||||
end
|
||||
|
||||
return returnValues
|
||||
end
|
||||
|
||||
error(("xPlayer.getMeta subIndex should be ^5string^1 or ^5table^1!, received ^5%s^1!"):format(_type))
|
||||
return
|
||||
end
|
||||
|
||||
return metaData
|
||||
end
|
||||
|
||||
function self.setMeta(index, value, subValue)
|
||||
if not index then
|
||||
return error("xPlayer.setMeta ^5index^1 is Missing!")
|
||||
end
|
||||
|
||||
if type(index) ~= "string" then
|
||||
return error("xPlayer.setMeta ^5index^1 should be ^5string^1!")
|
||||
end
|
||||
|
||||
if value == nil then
|
||||
return error("xPlayer.setMeta value is missing!")
|
||||
end
|
||||
|
||||
local _type = type(value)
|
||||
|
||||
if not subValue then
|
||||
if _type ~= "number" and _type ~= "string" and _type ~= "table" then
|
||||
return error(("xPlayer.setMeta ^5%s^1 should be ^5number^1 or ^5string^1 or ^5table^1!"):format(value))
|
||||
end
|
||||
|
||||
self.metadata[index] = value
|
||||
else
|
||||
if _type ~= "string" then
|
||||
return error(("xPlayer.setMeta ^5value^1 should be ^5string^1 as a subIndex!"):format(value))
|
||||
end
|
||||
|
||||
if not self.metadata[index] or type(self.metadata[index]) ~= "table" then
|
||||
self.metadata[index] = {}
|
||||
end
|
||||
|
||||
self.metadata[index] = type(self.metadata[index]) == "table" and self.metadata[index] or {}
|
||||
self.metadata[index][value] = subValue
|
||||
end
|
||||
self.triggerEvent('esx:updatePlayerData', 'metadata', self.metadata)
|
||||
end
|
||||
|
||||
function self.clearMeta(index, subValues)
|
||||
if not index then
|
||||
return error("xPlayer.clearMeta ^5index^1 is Missing!")
|
||||
end
|
||||
|
||||
if type(index) ~= "string" then
|
||||
return error("xPlayer.clearMeta ^5index^1 should be ^5string^1!")
|
||||
end
|
||||
|
||||
local metaData = self.metadata[index]
|
||||
if metaData == nil then
|
||||
if Config.EnableDebug then
|
||||
error(("xPlayer.clearMeta ^5%s^1 does not exist!"):format(index))
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if not subValues then
|
||||
-- If no subValues is provided, we will clear the entire value in the metaData table
|
||||
self.metadata[index] = nil
|
||||
elseif type(subValues) == "string" then
|
||||
-- If subValues is a string, we will clear the specific subValue within the table
|
||||
if type(metaData) == "table" then
|
||||
metaData[subValues] = nil
|
||||
else
|
||||
return error(("xPlayer.clearMeta ^5%s^1 is not a table! Cannot clear subValue ^5%s^1."):format(index, subValues))
|
||||
end
|
||||
elseif type(subValues) == "table" then
|
||||
-- If subValues is a table, we will clear multiple subValues within the table
|
||||
for i = 1, #subValues do
|
||||
local subValue = subValues[i]
|
||||
if type(subValue) == "string" then
|
||||
if type(metaData) == "table" then
|
||||
metaData[subValue] = nil
|
||||
else
|
||||
error(("xPlayer.clearMeta ^5%s^1 is not a table! Cannot clear subValue ^5%s^1."):format(index, subValue))
|
||||
end
|
||||
else
|
||||
error(("xPlayer.clearMeta subValues should contain ^5string^1, received ^5%s^1, skipping..."):format(type(subValue)))
|
||||
end
|
||||
end
|
||||
else
|
||||
return error(("xPlayer.clearMeta ^5subValues^1 should be ^5string^1 or ^5table^1, received ^5%s^1!"):format(type(subValues)))
|
||||
end
|
||||
self.triggerEvent('esx:updatePlayerData', 'metadata', self.metadata)
|
||||
end
|
||||
|
||||
function self.executeCommand(command)
|
||||
if type(command) ~= "string" then
|
||||
error("xPlayer.executeCommand must be of type string!")
|
||||
return
|
||||
end
|
||||
|
||||
self.triggerEvent("esx:executeCommand", command)
|
||||
end
|
||||
|
||||
for _, funcs in pairs(Core.PlayerFunctionOverrides) do
|
||||
for fnName, fn in pairs(funcs) do
|
||||
self[fnName] = fn(self)
|
||||
end
|
||||
end
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
local function runStaticPlayerMethod(src, method, ...)
|
||||
local xPlayer = ESX.Players[src]
|
||||
if not xPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
if not ESX.IsFunctionReference(xPlayer[method]) then
|
||||
error(("Attempted to call invalid method on playerId %s: %s"):format(src, method))
|
||||
end
|
||||
|
||||
return xPlayer[method](...)
|
||||
end
|
||||
exports("RunStaticPlayerMethod", runStaticPlayerMethod)
|
||||
237
resources/[core]/es_extended/server/classes/vehicle.lua
Normal file
237
resources/[core]/es_extended/server/classes/vehicle.lua
Normal file
@@ -0,0 +1,237 @@
|
||||
---@class CVehicleData
|
||||
---@field plate string
|
||||
---@field netId number
|
||||
---@field entity number
|
||||
---@field modelHash number
|
||||
---@field owner string
|
||||
|
||||
---@class CExtendedVehicle
|
||||
---@field plate string
|
||||
---@field isValid fun(self:CExtendedVehicle):boolean
|
||||
---@field new fun(owner:string, plate:string, coords:vector4): CExtendedVehicle?
|
||||
---@field getFromPlate fun(plate:string):CExtendedVehicle?
|
||||
---@field getPlate fun(self:CExtendedVehicle):string?
|
||||
---@field getNetId fun(self:CExtendedVehicle):number?
|
||||
---@field getEntity fun(self:CExtendedVehicle):number?
|
||||
---@field getModelHash fun(self:CExtendedVehicle):number?
|
||||
---@field getOwner fun(self:CExtendedVehicle):string?
|
||||
---@field setPlate fun(self:CExtendedVehicle, newPlate:string):boolean
|
||||
---@field setProps fun(self:CExtendedVehicle, newProps:table):boolean
|
||||
---@field setOwner fun(self:CExtendedVehicle, newOwner:string):boolean
|
||||
---@field delete fun(self:CExtendedVehicle, garageName:string?, isImpound:boolean?):nil
|
||||
Core.vehicleClass = {
|
||||
plate = "",
|
||||
new = function(owner, plate, coords)
|
||||
assert(type(owner) == "string", "Expected 'owner' to be a string")
|
||||
assert(type(plate) == "string", "Expected 'plate' to be a string")
|
||||
assert(type(coords) == "vector4", "Expected 'coords' to be a vector4")
|
||||
|
||||
local xVehicle = Core.vehicleClass.getFromPlate(plate)
|
||||
if xVehicle then
|
||||
return xVehicle
|
||||
end
|
||||
|
||||
local vehicleProps = MySQL.scalar.await("SELECT `vehicle` FROM `owned_vehicles` WHERE `stored` = true AND `owner` = ? AND `plate` = ? LIMIT 1", { owner, plate })
|
||||
if not vehicleProps then
|
||||
return
|
||||
end
|
||||
vehicleProps = json.decode(vehicleProps)
|
||||
|
||||
if type(vehicleProps.model) ~= "number" then
|
||||
vehicleProps.model = joaat(vehicleProps.model)
|
||||
end
|
||||
|
||||
local netId = ESX.OneSync.SpawnVehicle(vehicleProps.model, coords.xyz, coords.w, vehicleProps)
|
||||
if not netId then
|
||||
return
|
||||
end
|
||||
|
||||
local entity = NetworkGetEntityFromNetworkId(netId)
|
||||
if entity <= 0 then
|
||||
return
|
||||
end
|
||||
Entity(entity).state:set("owner", owner, false)
|
||||
Entity(entity).state:set("plate", plate, false)
|
||||
|
||||
---@type CVehicleData
|
||||
local vehicleData = {
|
||||
plate = plate,
|
||||
entity = entity,
|
||||
netId = netId,
|
||||
modelHash = vehicleProps.model,
|
||||
owner = owner,
|
||||
}
|
||||
Core.vehicles[plate] = vehicleData
|
||||
|
||||
MySQL.update.await("UPDATE `owned_vehicles` SET `stored` = false WHERE `owner` = ? AND `plate` = ?", { owner, plate })
|
||||
|
||||
local obj = table.clone(Core.vehicleClass)
|
||||
obj.plate = plate
|
||||
TriggerEvent("esx:createdExtendedVehicle", obj)
|
||||
|
||||
return obj
|
||||
end,
|
||||
getFromPlate = function(plate)
|
||||
assert(type(plate) == "string", "Expected 'plate' to be a string")
|
||||
|
||||
if Core.vehicles[plate] then
|
||||
local obj = table.clone(Core.vehicleClass)
|
||||
obj.plate = plate
|
||||
|
||||
if obj:isValid() then
|
||||
return obj
|
||||
end
|
||||
end
|
||||
end,
|
||||
isValid = function(self)
|
||||
local vehicleData = Core.vehicles[self.plate]
|
||||
if not vehicleData then
|
||||
return false
|
||||
end
|
||||
|
||||
local entity = NetworkGetEntityFromNetworkId(vehicleData.netId)
|
||||
if entity <= 0 or Entity(entity).state.owner ~= vehicleData.owner or Entity(entity).state.plate ~= vehicleData.plate then
|
||||
self:delete()
|
||||
return false
|
||||
end
|
||||
|
||||
vehicleData.entity = entity
|
||||
|
||||
return true
|
||||
end,
|
||||
getNetId = function(self)
|
||||
if not self:isValid() then
|
||||
return
|
||||
end
|
||||
|
||||
return Core.vehicles[self.plate].netId
|
||||
end,
|
||||
getEntity = function(self)
|
||||
if not self:isValid() then
|
||||
return
|
||||
end
|
||||
|
||||
return Core.vehicles[self.plate].entity
|
||||
end,
|
||||
getPlate = function(self)
|
||||
if not self:isValid() then
|
||||
return
|
||||
end
|
||||
|
||||
return Core.vehicles[self.plate].plate
|
||||
end,
|
||||
getModelHash = function(self)
|
||||
if not self:isValid() then
|
||||
return
|
||||
end
|
||||
|
||||
return Core.vehicles[self.plate].modelHash
|
||||
end,
|
||||
getOwner = function(self)
|
||||
if not self:isValid() then
|
||||
return
|
||||
end
|
||||
|
||||
return Core.vehicles[self.plate].owner
|
||||
end,
|
||||
setPlate = function(self, newPlate)
|
||||
if not self:isValid() then
|
||||
return false
|
||||
end
|
||||
assert(type(newPlate) == "string", "Expected 'plate' to be a string")
|
||||
|
||||
local vehicleData = Core.vehicles[self.plate]
|
||||
local affectedRows = MySQL.update.await("UPDATE `owned_vehicles` SET `plate` = ? WHERE `plate` = ? AND `owner` = ?", { newPlate, vehicleData.plate, vehicleData.owner })
|
||||
if affectedRows <= 0 then
|
||||
self:delete()
|
||||
return false
|
||||
end
|
||||
|
||||
Entity(vehicleData.entity).state:set("plate", newPlate, false)
|
||||
SetVehicleNumberPlateText(vehicleData.entity, newPlate)
|
||||
|
||||
local oldPlate = vehicleData.plate
|
||||
vehicleData.plate = newPlate
|
||||
Core.vehicles[newPlate] = table.clone(vehicleData)
|
||||
Core.vehicles[oldPlate] = nil
|
||||
|
||||
TriggerEvent("esx:changedExtendedVehiclePlate", vehicleData.plate, oldPlate)
|
||||
Wait(0)
|
||||
|
||||
return true
|
||||
end,
|
||||
setProps = function(self, newProps)
|
||||
if not self:isValid() then
|
||||
return false
|
||||
end
|
||||
assert(type(newProps) == "table", "Expected 'props' to be a table")
|
||||
|
||||
local vehicleData = Core.vehicles[self.plate]
|
||||
local affectedRows = MySQL.update.await("UPDATE `owned_vehicles` SET `vehicle` = ? WHERE `plate` = ? AND `owner` = ?", json.encode(newProps), vehicleData.plate, vehicleData.owner)
|
||||
if affectedRows <= 0 then
|
||||
self:delete()
|
||||
return false
|
||||
end
|
||||
|
||||
Entity(vehicleData.entity).state:set("VehicleProperties", newProps, true)
|
||||
|
||||
return true
|
||||
end,
|
||||
setOwner = function(self, newOwner)
|
||||
if not self:isValid() then
|
||||
return false
|
||||
end
|
||||
assert(type(newOwner) == "string", "Expected 'owner' to be a string")
|
||||
|
||||
local vehicleData = Core.vehicles[self.plate]
|
||||
if vehicleData.owner == newOwner then
|
||||
return true
|
||||
end
|
||||
|
||||
local affectedRows = MySQL.update.await("UPDATE `owned_vehicles` SET `owner` = ? WHERE owner = ? AND `plate` = ?", { newOwner, vehicleData.owner, vehicleData.plate })
|
||||
if affectedRows <= 0 then
|
||||
self:delete()
|
||||
return false
|
||||
end
|
||||
|
||||
Entity(vehicleData.entity).state:set("owner", newOwner, false)
|
||||
vehicleData.owner = newOwner
|
||||
|
||||
return true
|
||||
end,
|
||||
delete = function(self, garageName, isImpound)
|
||||
if type(garageName) ~= "string" then
|
||||
garageName = nil
|
||||
end
|
||||
if type(isImpound) ~= "boolean" then
|
||||
isImpound = false
|
||||
end
|
||||
|
||||
local vehicleData = Core.vehicles[self.plate]
|
||||
if not vehicleData then
|
||||
return
|
||||
end
|
||||
|
||||
local entity = NetworkGetEntityFromNetworkId(vehicleData.netId)
|
||||
if entity >= 0 and Entity(entity).state.owner == vehicleData.owner then
|
||||
DeleteEntity(vehicleData.entity)
|
||||
end
|
||||
|
||||
local query = "UPDATE `owned_vehicles` SET `stored` = true WHERE `plate` = ? AND `owner` = ?"
|
||||
local queryParams = { vehicleData.plate, vehicleData.owner }
|
||||
if garageName then
|
||||
if isImpound then
|
||||
query = "UPDATE `owned_vehicles` SET `stored` = true, `parking` = NULL, `pound` = ? WHERE `plate` = ? AND `owner` = ?"
|
||||
else
|
||||
query = "UPDATE `owned_vehicles` SET `stored` = true, `pound` = NULL, `parking` = ? WHERE `plate` = ? AND `owner` = ?"
|
||||
end
|
||||
|
||||
queryParams = { garageName, vehicleData.plate, vehicleData.owner }
|
||||
end
|
||||
|
||||
MySQL.update.await(query, queryParams)
|
||||
TriggerEvent("esx:deletedExtendedVehicle", self)
|
||||
|
||||
Core.vehicles[self.plate] = nil
|
||||
end,
|
||||
}
|
||||
54
resources/[core]/es_extended/server/common.lua
Normal file
54
resources/[core]/es_extended/server/common.lua
Normal file
@@ -0,0 +1,54 @@
|
||||
ESX.Players = {}
|
||||
ESX.Jobs = {}
|
||||
ESX.Items = {}
|
||||
|
||||
RegisterNetEvent("esx:onPlayerSpawn", function()
|
||||
ESX.Players[source].spawned = true
|
||||
end)
|
||||
|
||||
if Config.CustomInventory then
|
||||
SetConvarReplicated("inventory:framework", "esx")
|
||||
SetConvarReplicated("inventory:weight", tostring(Config.MaxWeight * 1000))
|
||||
end
|
||||
|
||||
local function StartDBSync()
|
||||
CreateThread(function()
|
||||
local interval <const> = 10 * 60 * 1000
|
||||
while true do
|
||||
Wait(interval)
|
||||
Core.SavePlayers()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
MySQL.ready(function()
|
||||
Core.DatabaseConnected = true
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.RefreshItems()
|
||||
end
|
||||
|
||||
ESX.RefreshJobs()
|
||||
|
||||
print(("[^2INFO^7] ESX ^5Legacy %s^0 initialized!"):format(GetResourceMetadata(GetCurrentResourceName(), "version", 0)))
|
||||
|
||||
StartDBSync()
|
||||
if Config.EnablePaycheck then
|
||||
StartPayCheck()
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:clientLog", function(msg)
|
||||
if Config.EnableDebug then
|
||||
print(("[^2TRACE^7] %s^7"):format(msg))
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:ReturnVehicleType", function(Type, Request)
|
||||
if Core.ClientCallbacks[Request] then
|
||||
Core.ClientCallbacks[Request](Type)
|
||||
Core.ClientCallbacks[Request] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
GlobalState.playerCount = 0
|
||||
14
resources/[core]/es_extended/server/core.lua
Normal file
14
resources/[core]/es_extended/server/core.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
Core = {}
|
||||
Core.JobsPlayerCount = {}
|
||||
Core.UsableItemsCallbacks = {}
|
||||
Core.RegisteredCommands = {}
|
||||
Core.Pickups = {}
|
||||
Core.PickupId = 0
|
||||
Core.PlayerFunctionOverrides = {}
|
||||
Core.DatabaseConnected = false
|
||||
Core.playersByIdentifier = {}
|
||||
Core.JobsLoaded = false
|
||||
|
||||
---@type table<string, CVehicleData>
|
||||
Core.vehicles = {}
|
||||
Core.vehicleTypesByModel = {}
|
||||
909
resources/[core]/es_extended/server/functions.lua
Normal file
909
resources/[core]/es_extended/server/functions.lua
Normal file
@@ -0,0 +1,909 @@
|
||||
---@param msg string
|
||||
---@return nil
|
||||
function ESX.Trace(msg)
|
||||
if Config.EnableDebug then
|
||||
print(("[^2TRACE^7] %s^7"):format(msg))
|
||||
end
|
||||
end
|
||||
|
||||
--- Triggers an event for one or more clients.
|
||||
---@param eventName string The name of the event to trigger.
|
||||
---@param playerIds table|number If a number, represents a single player ID. If a table, represents an array of player IDs.
|
||||
---@param ... any Additional arguments to pass to the event handler.
|
||||
function ESX.TriggerClientEvent(eventName, playerIds, ...)
|
||||
if type(playerIds) == "number" then
|
||||
TriggerClientEvent(eventName, playerIds, ...)
|
||||
return
|
||||
end
|
||||
|
||||
local payload = msgpack.pack_args(...)
|
||||
local payloadLength = #payload
|
||||
|
||||
for i = 1, #playerIds do
|
||||
TriggerClientEventInternal(eventName, playerIds[i], payload, payloadLength)
|
||||
end
|
||||
end
|
||||
|
||||
---@param name string | table
|
||||
---@param group string | table
|
||||
---@param cb function
|
||||
---@param allowConsole? boolean
|
||||
---@param suggestion? table
|
||||
function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion)
|
||||
if type(name) == "table" then
|
||||
for _, v in ipairs(name) do
|
||||
ESX.RegisterCommand(v, group, cb, allowConsole, suggestion)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if Core.RegisteredCommands[name] then
|
||||
print(('[^3WARNING^7] Command ^5"%s" ^7already registered, overriding command'):format(name))
|
||||
|
||||
if Core.RegisteredCommands[name].suggestion then
|
||||
TriggerClientEvent("chat:removeSuggestion", -1, ("/%s"):format(name))
|
||||
end
|
||||
end
|
||||
|
||||
if suggestion then
|
||||
if not suggestion.arguments then
|
||||
suggestion.arguments = {}
|
||||
end
|
||||
if not suggestion.help then
|
||||
suggestion.help = ""
|
||||
end
|
||||
|
||||
TriggerClientEvent("chat:addSuggestion", -1, ("/%s"):format(name), suggestion.help, suggestion.arguments)
|
||||
end
|
||||
|
||||
Core.RegisteredCommands[name] = { group = group, cb = cb, allowConsole = allowConsole, suggestion = suggestion }
|
||||
|
||||
RegisterCommand(name, function(playerId, args)
|
||||
local command = Core.RegisteredCommands[name]
|
||||
|
||||
if not command.allowConsole and playerId == 0 then
|
||||
print(("[^3WARNING^7] ^5%s^0"):format(TranslateCap("commanderror_console")))
|
||||
else
|
||||
local xPlayer, err = ESX.Players[playerId], nil
|
||||
|
||||
if command.suggestion then
|
||||
if command.suggestion.validate then
|
||||
if #args ~= #command.suggestion.arguments then
|
||||
err = TranslateCap("commanderror_argumentmismatch", #args, #command.suggestion.arguments)
|
||||
end
|
||||
end
|
||||
|
||||
if not err and command.suggestion.arguments then
|
||||
local newArgs = {}
|
||||
|
||||
for k, v in ipairs(command.suggestion.arguments) do
|
||||
if v.type then
|
||||
if v.type == "number" then
|
||||
local newArg = tonumber(args[k])
|
||||
|
||||
if newArg then
|
||||
newArgs[v.name] = newArg
|
||||
else
|
||||
err = TranslateCap("commanderror_argumentmismatch_number", k)
|
||||
end
|
||||
elseif v.type == "player" or v.type == "playerId" then
|
||||
local targetPlayer = tonumber(args[k])
|
||||
|
||||
if args[k] == "me" then
|
||||
targetPlayer = playerId
|
||||
end
|
||||
|
||||
if targetPlayer then
|
||||
local xTargetPlayer = ESX.GetPlayerFromId(targetPlayer)
|
||||
|
||||
if xTargetPlayer then
|
||||
if v.type == "player" then
|
||||
newArgs[v.name] = xTargetPlayer
|
||||
else
|
||||
newArgs[v.name] = targetPlayer
|
||||
end
|
||||
else
|
||||
err = TranslateCap("commanderror_invalidplayerid")
|
||||
end
|
||||
else
|
||||
err = TranslateCap("commanderror_argumentmismatch_number", k)
|
||||
end
|
||||
elseif v.type == "string" then
|
||||
local newArg = tonumber(args[k])
|
||||
if not newArg then
|
||||
newArgs[v.name] = args[k]
|
||||
else
|
||||
err = TranslateCap("commanderror_argumentmismatch_string", k)
|
||||
end
|
||||
elseif v.type == "item" then
|
||||
if ESX.Items[args[k]] then
|
||||
newArgs[v.name] = args[k]
|
||||
else
|
||||
err = TranslateCap("commanderror_invaliditem")
|
||||
end
|
||||
elseif v.type == "weapon" then
|
||||
if ESX.GetWeapon(args[k]) then
|
||||
newArgs[v.name] = string.upper(args[k])
|
||||
else
|
||||
err = TranslateCap("commanderror_invalidweapon")
|
||||
end
|
||||
elseif v.type == "any" then
|
||||
newArgs[v.name] = args[k]
|
||||
elseif v.type == "merge" then
|
||||
local length = 0
|
||||
for i = 1, k - 1 do
|
||||
length = length + string.len(args[i]) + 1
|
||||
end
|
||||
local merge = table.concat(args, " ")
|
||||
|
||||
newArgs[v.name] = string.sub(merge, length)
|
||||
elseif v.type == "coordinate" then
|
||||
local coord = tonumber(args[k]:match("(-?%d+%.?%d*)"))
|
||||
if not coord then
|
||||
err = TranslateCap("commanderror_argumentmismatch_number", k)
|
||||
else
|
||||
newArgs[v.name] = coord
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if ESX.IsFunctionReference(v.Validator?.validate) and not err then
|
||||
local candidate = newArgs[v.name]
|
||||
local ok, res = pcall(v.Validator.validate, candidate)
|
||||
if not ok or res ~= true then
|
||||
err = v.Validator.err or TranslateCap("commanderror_argumentmismatch")
|
||||
end
|
||||
end
|
||||
|
||||
--backwards compatibility
|
||||
if v.validate ~= nil and not v.validate then
|
||||
err = nil
|
||||
end
|
||||
|
||||
if err then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
args = newArgs
|
||||
end
|
||||
end
|
||||
|
||||
if err then
|
||||
if playerId == 0 then
|
||||
print(("[^3WARNING^7] %s^7"):format(err))
|
||||
else
|
||||
xPlayer.showNotification(err)
|
||||
end
|
||||
else
|
||||
cb(xPlayer or false, args, function(msg)
|
||||
if playerId == 0 then
|
||||
print(("[^3WARNING^7] %s^7"):format(msg))
|
||||
else
|
||||
xPlayer.showNotification(msg)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end, true)
|
||||
|
||||
if type(group) == "table" then
|
||||
for _, v in ipairs(group) do
|
||||
ExecuteCommand(("add_ace group.%s command.%s allow"):format(v, name))
|
||||
end
|
||||
else
|
||||
ExecuteCommand(("add_ace group.%s command.%s allow"):format(group, name))
|
||||
end
|
||||
end
|
||||
|
||||
local function updateHealthAndArmorInMetadata(xPlayer)
|
||||
local ped = GetPlayerPed(xPlayer.source)
|
||||
xPlayer.setMeta("health", GetEntityHealth(ped))
|
||||
xPlayer.setMeta("armor", GetPedArmour(ped))
|
||||
xPlayer.setMeta("lastPlaytime", xPlayer.getPlayTime())
|
||||
end
|
||||
|
||||
---@param xPlayer table
|
||||
---@param cb? function
|
||||
---@return nil
|
||||
function Core.SavePlayer(xPlayer, cb)
|
||||
if not xPlayer.spawned then
|
||||
return cb and cb()
|
||||
end
|
||||
|
||||
updateHealthAndArmorInMetadata(xPlayer)
|
||||
local parameters <const> = {
|
||||
json.encode(xPlayer.getAccounts(true)),
|
||||
xPlayer.job.name,
|
||||
xPlayer.job.grade,
|
||||
xPlayer.group,
|
||||
json.encode(xPlayer.getCoords(false, true)),
|
||||
json.encode(xPlayer.getInventory(true)),
|
||||
json.encode(xPlayer.getLoadout(true)),
|
||||
json.encode(xPlayer.getMeta()),
|
||||
xPlayer.identifier,
|
||||
}
|
||||
|
||||
MySQL.prepare(
|
||||
"UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ?, `metadata` = ? WHERE `identifier` = ?",
|
||||
parameters,
|
||||
function(affectedRows)
|
||||
if affectedRows == 1 then
|
||||
print(('[^2INFO^7] Saved player ^5"%s^7"'):format(xPlayer.name))
|
||||
TriggerEvent("esx:playerSaved", xPlayer.playerId, xPlayer)
|
||||
end
|
||||
if cb then
|
||||
cb()
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
---@param cb? function
|
||||
---@return nil
|
||||
function Core.SavePlayers(cb)
|
||||
local xPlayers <const> = ESX.Players
|
||||
if not next(xPlayers) then
|
||||
return
|
||||
end
|
||||
|
||||
local startTime <const> = os.time()
|
||||
local parameters = {}
|
||||
|
||||
for _, xPlayer in pairs(ESX.Players) do
|
||||
updateHealthAndArmorInMetadata(xPlayer)
|
||||
parameters[#parameters + 1] = {
|
||||
json.encode(xPlayer.getAccounts(true)),
|
||||
xPlayer.job.name,
|
||||
xPlayer.job.grade,
|
||||
xPlayer.group,
|
||||
json.encode(xPlayer.getCoords(false, true)),
|
||||
json.encode(xPlayer.getInventory(true)),
|
||||
json.encode(xPlayer.getLoadout(true)),
|
||||
json.encode(xPlayer.getMeta()),
|
||||
xPlayer.identifier,
|
||||
}
|
||||
end
|
||||
|
||||
MySQL.prepare(
|
||||
"UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ?, `metadata` = ? WHERE `identifier` = ?",
|
||||
parameters,
|
||||
function(results)
|
||||
if not results then
|
||||
return
|
||||
end
|
||||
|
||||
if type(cb) == "function" then
|
||||
return cb()
|
||||
end
|
||||
|
||||
print(("[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms"):format(#parameters,
|
||||
#parameters > 1 and "players" or "player", ESX.Math.Round((os.time() - startTime) / 1000000, 2)))
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
ESX.GetPlayers = GetPlayers
|
||||
|
||||
local function checkTable(key, val, xPlayer, xPlayers, minimal)
|
||||
for valIndex = 1, #val do
|
||||
local value = val[valIndex]
|
||||
if not xPlayers[value] then
|
||||
xPlayers[value] = {}
|
||||
end
|
||||
|
||||
if (key == "job" and xPlayer.job.name == value) or xPlayer[key] == value then
|
||||
xPlayers[value][#xPlayers[value] + 1] = (minimal and xPlayer.source or xPlayer)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param key? string
|
||||
---@param val? string|table
|
||||
---@param minimal? boolean
|
||||
---@return xPlayer[]|number[]|table<any, xPlayer[]>|table<any, number[]>
|
||||
function ESX.GetExtendedPlayers(key, val, minimal)
|
||||
if not key then
|
||||
if not minimal then
|
||||
return ESX.Table.ToArray(ESX.Players)
|
||||
end
|
||||
|
||||
local xPlayers = {}
|
||||
local index = 1
|
||||
for src, _ in pairs(ESX.Players) do
|
||||
xPlayers[index] = src
|
||||
index += 1
|
||||
end
|
||||
|
||||
return xPlayers
|
||||
end
|
||||
|
||||
local xPlayers = {}
|
||||
if type(val) == "table" then
|
||||
for _, xPlayer in pairs(ESX.Players) do
|
||||
checkTable(key, val, xPlayer, xPlayers, minimal)
|
||||
end
|
||||
|
||||
return xPlayers
|
||||
end
|
||||
|
||||
for _, xPlayer in pairs(ESX.Players) do
|
||||
if (key == "job" and xPlayer.job.name == val) or xPlayer[key] == val then
|
||||
xPlayers[#xPlayers + 1] = (minimal and xPlayer.source or xPlayer)
|
||||
end
|
||||
end
|
||||
|
||||
return xPlayers
|
||||
end
|
||||
|
||||
---@param key? string
|
||||
---@param val? string|table
|
||||
---@return number | table
|
||||
function ESX.GetNumPlayers(key, val)
|
||||
if not key then
|
||||
return #GetPlayers()
|
||||
end
|
||||
|
||||
if type(val) == "table" then
|
||||
local numPlayers = {}
|
||||
if key == "job" then
|
||||
for _, v in ipairs(val) do
|
||||
numPlayers[v] = (Core.JobsPlayerCount[v] or 0)
|
||||
end
|
||||
return numPlayers
|
||||
end
|
||||
|
||||
local filteredPlayers = ESX.GetExtendedPlayers(key, val)
|
||||
for i, v in pairs(filteredPlayers) do
|
||||
numPlayers[i] = (#v or 0)
|
||||
end
|
||||
return numPlayers
|
||||
end
|
||||
|
||||
if key == "job" then
|
||||
return (Core.JobsPlayerCount[val] or 0)
|
||||
end
|
||||
|
||||
return #ESX.GetExtendedPlayers(key, val)
|
||||
end
|
||||
|
||||
---@param source number
|
||||
---@return xPlayer?
|
||||
function ESX.GetPlayerFromId(source)
|
||||
return ESX.Players[tonumber(source)]
|
||||
end
|
||||
|
||||
---@param identifier string
|
||||
---@return xPlayer?
|
||||
function ESX.GetPlayerFromIdentifier(identifier)
|
||||
return Core.playersByIdentifier[identifier]
|
||||
end
|
||||
|
||||
---@param identifier string
|
||||
---@return number playerId
|
||||
function ESX.GetPlayerIdFromIdentifier(identifier)
|
||||
return Core.playersByIdentifier[identifier]?.source
|
||||
end
|
||||
|
||||
---@param source number
|
||||
---@return boolean
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
function ESX.IsPlayerLoaded(source)
|
||||
return ESX.Players[source] ~= nil
|
||||
end
|
||||
|
||||
---@param playerId number | string
|
||||
---@return string, number
|
||||
function ESX.GetIdentifier(playerId)
|
||||
local fxDk = GetConvarInt("sv_fxdkMode", 0)
|
||||
if fxDk == 1 then
|
||||
return "ESX-DEBUG-LICENCE", 0
|
||||
end
|
||||
|
||||
playerId = tostring(playerId)
|
||||
|
||||
local identifierType = Config.Identifier
|
||||
local identifier = GetPlayerIdentifierByType(playerId, identifierType)
|
||||
|
||||
assert(identifier, ("[ESX] GetIdentifier failed: no identifier found for playerId %s with type '%s'"):format(playerId, identifierType))
|
||||
|
||||
return identifier:gsub(("%s:"):format(identifierType), "")
|
||||
end
|
||||
|
||||
---@param model string|number
|
||||
---@param player number
|
||||
---@param cb function?
|
||||
---@return string?
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
function ESX.GetVehicleType(model, player, cb)
|
||||
if cb and not ESX.IsFunctionReference(cb) then
|
||||
error("Invalid callback function")
|
||||
end
|
||||
|
||||
local promise = not cb and promise.new()
|
||||
local function resolve(result)
|
||||
if promise then
|
||||
promise:resolve(result)
|
||||
elseif cb then
|
||||
cb(result)
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
model = type(model) == "string" and joaat(model) or model
|
||||
|
||||
if Core.vehicleTypesByModel[model] then
|
||||
return resolve(Core.vehicleTypesByModel[model])
|
||||
end
|
||||
|
||||
ESX.TriggerClientCallback(player, "esx:GetVehicleType", function(vehicleType)
|
||||
Core.vehicleTypesByModel[model] = vehicleType
|
||||
resolve(vehicleType)
|
||||
end, model)
|
||||
|
||||
if promise then
|
||||
return Citizen.Await(promise)
|
||||
end
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param title string
|
||||
---@param color string
|
||||
---@param message string
|
||||
---@return nil
|
||||
function ESX.DiscordLog(name, title, color, message)
|
||||
local webHook = Config.DiscordLogs.Webhooks[name] or Config.DiscordLogs.Webhooks.default
|
||||
local embedData = {
|
||||
{
|
||||
["title"] = title,
|
||||
["color"] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default,
|
||||
["footer"] = {
|
||||
["text"] = "| ESX Logs | " .. os.date(),
|
||||
["icon_url"] =
|
||||
"https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png",
|
||||
},
|
||||
["description"] = message,
|
||||
["author"] = {
|
||||
["name"] = "ESX Framework",
|
||||
["icon_url"] = "https://cdn.discordapp.com/emojis/939245183621558362.webp?size=128&quality=lossless",
|
||||
},
|
||||
},
|
||||
}
|
||||
PerformHttpRequest(
|
||||
webHook,
|
||||
function()
|
||||
return
|
||||
end,
|
||||
"POST",
|
||||
json.encode({
|
||||
username = "Logs",
|
||||
embeds = embedData,
|
||||
}),
|
||||
{
|
||||
["Content-Type"] = "application/json",
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param title string
|
||||
---@param color string
|
||||
---@param fields table
|
||||
---@return nil
|
||||
function ESX.DiscordLogFields(name, title, color, fields)
|
||||
for i = 1, #fields do
|
||||
local field = fields[i]
|
||||
field.value = tostring(field.value)
|
||||
end
|
||||
|
||||
local webHook = Config.DiscordLogs.Webhooks[name] or Config.DiscordLogs.Webhooks.default
|
||||
local embedData = {
|
||||
{
|
||||
["title"] = title,
|
||||
["color"] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default,
|
||||
["footer"] = {
|
||||
["text"] = "| ESX Logs | " .. os.date(),
|
||||
["icon_url"] =
|
||||
"https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png",
|
||||
},
|
||||
["fields"] = fields,
|
||||
["description"] = "",
|
||||
["author"] = {
|
||||
["name"] = "ESX Framework",
|
||||
["icon_url"] = "https://cdn.discordapp.com/emojis/939245183621558362.webp?size=128&quality=lossless",
|
||||
},
|
||||
},
|
||||
}
|
||||
PerformHttpRequest(
|
||||
webHook,
|
||||
function()
|
||||
return
|
||||
end,
|
||||
"POST",
|
||||
json.encode({
|
||||
username = "Logs",
|
||||
embeds = embedData,
|
||||
}),
|
||||
{
|
||||
["Content-Type"] = "application/json",
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
---@return nil
|
||||
function ESX.RefreshJobs()
|
||||
Core.JobsLoaded = false
|
||||
|
||||
local Jobs = {}
|
||||
local jobs = MySQL.query.await("SELECT * FROM jobs")
|
||||
|
||||
for _, v in ipairs(jobs) do
|
||||
Jobs[v.name] = v
|
||||
Jobs[v.name].grades = {}
|
||||
end
|
||||
|
||||
local jobGrades = MySQL.query.await("SELECT * FROM job_grades")
|
||||
|
||||
for _, v in ipairs(jobGrades) do
|
||||
if Jobs[v.job_name] then
|
||||
Jobs[v.job_name].grades[tostring(v.grade)] = v
|
||||
else
|
||||
print(('[^3WARNING^7] Ignoring job grades for ^5"%s"^0 due to missing job'):format(v.job_name))
|
||||
end
|
||||
end
|
||||
|
||||
for _, v in pairs(Jobs) do
|
||||
if ESX.Table.SizeOf(v.grades) == 0 then
|
||||
Jobs[v.name] = nil
|
||||
print(('[^3WARNING^7] Ignoring job ^5"%s"^0 due to no job grades found'):format(v.name))
|
||||
end
|
||||
end
|
||||
|
||||
if not Jobs then
|
||||
-- Fallback data, if no jobs exist
|
||||
ESX.Jobs["unemployed"] = { name = "unemployed", label = "Unemployed", type = "civ", whitelisted = false, grades = { ["0"] = { grade = 0, name = "unemployed", label = "Unemployed", salary = 200, skin_male = {}, skin_female = {} } } }
|
||||
else
|
||||
ESX.Jobs = Jobs
|
||||
end
|
||||
|
||||
TriggerEvent("esx:jobsRefreshed")
|
||||
Core.JobsLoaded = true
|
||||
end
|
||||
|
||||
---@param item string
|
||||
---@param cb function
|
||||
---@return nil
|
||||
function ESX.RegisterUsableItem(item, cb)
|
||||
Core.UsableItemsCallbacks[item] = cb
|
||||
end
|
||||
|
||||
---@param source number
|
||||
---@param item string
|
||||
---@param ... any
|
||||
---@return nil
|
||||
function ESX.UseItem(source, item, ...)
|
||||
if ESX.Items[item] then
|
||||
local itemCallback = Core.UsableItemsCallbacks[item]
|
||||
|
||||
if itemCallback then
|
||||
local success, result = pcall(itemCallback, source, item, ...)
|
||||
|
||||
if not success then
|
||||
return result and print(result) or
|
||||
print(('[^3WARNING^7] An error occured when using item ^5"%s"^7! This was not caused by ESX.'):format(
|
||||
item))
|
||||
end
|
||||
end
|
||||
else
|
||||
print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(item))
|
||||
end
|
||||
end
|
||||
|
||||
---@param index string
|
||||
---@param overrides table
|
||||
---@return nil
|
||||
function ESX.RegisterPlayerFunctionOverrides(index, overrides)
|
||||
Core.PlayerFunctionOverrides[index] = overrides
|
||||
end
|
||||
|
||||
---@param index string
|
||||
---@return nil
|
||||
function ESX.SetPlayerFunctionOverride(index)
|
||||
if not index or not Core.PlayerFunctionOverrides[index] then
|
||||
return print("[^3WARNING^7] No valid index provided.")
|
||||
end
|
||||
|
||||
Config.PlayerFunctionOverride = index
|
||||
end
|
||||
|
||||
---@param item string
|
||||
---@return string?
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
function ESX.GetItemLabel(item)
|
||||
if ESX.Items[item] then
|
||||
return ESX.Items[item].label
|
||||
else
|
||||
print(("[^3WARNING^7] Attemting to get invalid Item -> ^5%s^7"):format(item))
|
||||
end
|
||||
end
|
||||
|
||||
---@param jobType string|string[]?
|
||||
---@return table
|
||||
function ESX.GetJobs(jobType)
|
||||
while not Core.JobsLoaded do
|
||||
Citizen.Wait(200)
|
||||
end
|
||||
|
||||
if not jobType then
|
||||
return ESX.Jobs
|
||||
end
|
||||
|
||||
jobType = type(jobType) == "string" and { jobType } or jobType
|
||||
|
||||
local jobTypeLookup = {}
|
||||
for i = 1, #jobType do
|
||||
jobTypeLookup[jobType[i]] = true
|
||||
end
|
||||
|
||||
local filteredJobs = {}
|
||||
for jobName, jobObject in pairs(ESX.Jobs) do
|
||||
if jobTypeLookup[jobObject.type] then
|
||||
filteredJobs[jobName] = jobObject
|
||||
end
|
||||
end
|
||||
|
||||
return filteredJobs
|
||||
end
|
||||
|
||||
---@return table
|
||||
function ESX.GetItems()
|
||||
return ESX.Items
|
||||
end
|
||||
|
||||
---@return table
|
||||
function ESX.GetUsableItems()
|
||||
local Usables = {}
|
||||
for k in pairs(Core.UsableItemsCallbacks) do
|
||||
Usables[k] = true
|
||||
end
|
||||
return Usables
|
||||
end
|
||||
|
||||
if not Config.CustomInventory then
|
||||
---@param itemType string
|
||||
---@param name string
|
||||
---@param count integer
|
||||
---@param label string
|
||||
---@param playerId number
|
||||
---@param components? string | table
|
||||
---@param tintIndex? integer
|
||||
---@param coords? table | vector3
|
||||
---@return nil
|
||||
function ESX.CreatePickup(itemType, name, count, label, playerId, components, tintIndex, coords)
|
||||
local pickupId = (Core.PickupId == 65635 and 0 or Core.PickupId + 1)
|
||||
local xPlayer = ESX.Players[playerId]
|
||||
coords = ((type(coords) == "vector3" or type(coords) == "vector4") and coords.xyz or xPlayer.getCoords(true))
|
||||
|
||||
Core.Pickups[pickupId] = { type = itemType, name = name, count = count, label = label, coords = coords }
|
||||
|
||||
if itemType == "item_weapon" then
|
||||
Core.Pickups[pickupId].components = components
|
||||
Core.Pickups[pickupId].tintIndex = tintIndex
|
||||
end
|
||||
|
||||
TriggerClientEvent("esx:createPickup", -1, pickupId, label, coords, itemType, name, components, tintIndex)
|
||||
Core.PickupId = pickupId
|
||||
end
|
||||
|
||||
local function refreshPlayerInventories()
|
||||
local xPlayers = ESX.GetExtendedPlayers()
|
||||
for i = 1, #xPlayers do
|
||||
local xPlayer = xPlayers[i]
|
||||
local minimalInv = xPlayer.getInventory(true)
|
||||
|
||||
for itemName, _ in pairs(minimalInv) do
|
||||
if not ESX.Items[itemName] then
|
||||
xPlayer.setInventoryItem(itemName, 0)
|
||||
minimalInv[itemName] = nil
|
||||
end
|
||||
end
|
||||
|
||||
xPlayer.inventory = {}
|
||||
local playerInvIndex = 1
|
||||
for itemName, itemData in pairs(ESX.Items) do
|
||||
xPlayer.inventory[playerInvIndex] = {
|
||||
name = itemName,
|
||||
count = minimalInv[itemName] or 0,
|
||||
label = itemData.label,
|
||||
weight = itemData.weight,
|
||||
usable = Core.UsableItemsCallbacks[itemName] ~= nil,
|
||||
rare = itemData.rare,
|
||||
canRemove = itemData.canRemove,
|
||||
}
|
||||
playerInvIndex += 1
|
||||
end
|
||||
|
||||
TriggerClientEvent("esx:setInventory", xPlayer.source, xPlayer.inventory)
|
||||
end
|
||||
end
|
||||
|
||||
---@return number newItemCount
|
||||
function ESX.RefreshItems()
|
||||
ESX.Items = {}
|
||||
|
||||
local items = MySQL.query.await("SELECT * FROM items")
|
||||
local itemCount = #items
|
||||
for i = 1, itemCount do
|
||||
local item = items[i]
|
||||
ESX.Items[item.name] = { label = item.label, weight = item.weight, rare = item.rare, canRemove = item
|
||||
.can_remove }
|
||||
end
|
||||
refreshPlayerInventories()
|
||||
|
||||
return itemCount
|
||||
end
|
||||
|
||||
---@param items { name: string, label: string, weight?: number, rare?: boolean, canRemove?: boolean }[]
|
||||
function ESX.AddItems(items)
|
||||
local toInsert = {}
|
||||
local toInsertIndex = 1
|
||||
|
||||
for i = 1, #items do
|
||||
local item = items[i]
|
||||
local name = item.name
|
||||
local label = item.label
|
||||
local weight = item.weight or 1
|
||||
local rare = item.rare or false
|
||||
local canRemove = item.canRemove ~= false
|
||||
|
||||
if type(name) ~= "string" then
|
||||
print(("^1[AddItems]^0 Invalid item name: %s"):format(name))
|
||||
goto continue
|
||||
end
|
||||
|
||||
if ESX.Items[name] then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if type(label) ~= "string" then
|
||||
print(("^1[AddItems]^0 Invalid label for item '%s'"):format(name))
|
||||
goto continue
|
||||
end
|
||||
|
||||
if type(weight) ~= "number" then
|
||||
print(("^1[AddItems]^0 Invalid weight for item '%s'"):format(name))
|
||||
goto continue
|
||||
end
|
||||
|
||||
if type(rare) ~= "boolean" then
|
||||
print(("^1[AddItems]^0 Invalid rare flag for item '%s'"):format(name))
|
||||
goto continue
|
||||
end
|
||||
|
||||
if type(canRemove) ~= "boolean" then
|
||||
print(("^1[AddItems]^0 Invalid canRemove flag for item '%s'"):format(name))
|
||||
goto continue
|
||||
end
|
||||
|
||||
toInsert[toInsertIndex] = {
|
||||
name = name,
|
||||
label = label,
|
||||
weight = weight,
|
||||
rare = rare,
|
||||
canRemove = canRemove,
|
||||
}
|
||||
toInsertIndex += 1
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
if #toInsert > 0 then
|
||||
MySQL.prepare.await(
|
||||
"INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES (?, ?, ?, ?, ?)",
|
||||
toInsert)
|
||||
|
||||
for i = 1, #toInsert do
|
||||
local row = toInsert[i]
|
||||
ESX.Items[row.name] = {
|
||||
label = row.label,
|
||||
weight = row.weight,
|
||||
rare = row.rare,
|
||||
canRemove = row.canRemove,
|
||||
}
|
||||
end
|
||||
|
||||
refreshPlayerInventories()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param job string
|
||||
---@param grade string
|
||||
---@return boolean
|
||||
function ESX.DoesJobExist(job, grade)
|
||||
while not Core.JobsLoaded do
|
||||
Citizen.Wait(200)
|
||||
end
|
||||
|
||||
return (ESX.Jobs[job] and ESX.Jobs[job].grades[tostring(grade)] ~= nil) or false
|
||||
end
|
||||
|
||||
---@param playerSrc number
|
||||
---@return boolean
|
||||
function Core.IsPlayerAdmin(playerSrc)
|
||||
if type(playerSrc) ~= "number" then
|
||||
return false
|
||||
end
|
||||
|
||||
if IsPlayerAceAllowed(playerSrc --[[@as string]], "command") or GetConvar("sv_lan", "") == "true" then
|
||||
return true
|
||||
end
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromId(playerSrc)
|
||||
return xPlayer and Config.AdminGroups[xPlayer.getGroup()] or false
|
||||
end
|
||||
|
||||
-- Generates a unique 9-digit SSN in dashed format (XXX-XX-XXXX).
|
||||
---@param skipUniqueCheck boolean?
|
||||
---@return string
|
||||
function Core.generateSSN(skipUniqueCheck)
|
||||
local reservedSSNs = {
|
||||
["078-05-1120"] = true,
|
||||
["219-09-9999"] = true,
|
||||
["123-45-6789"] = true
|
||||
}
|
||||
|
||||
while true do
|
||||
-- Generate the first part (area number)
|
||||
local area = math.random(1, 899)
|
||||
|
||||
-- 666 is never assigned
|
||||
if area == 666 then
|
||||
goto continue
|
||||
end
|
||||
|
||||
-- Generate the second part (group number)
|
||||
local group = math.random(1, 99)
|
||||
|
||||
-- Generate the last part (serial number)
|
||||
local serial = math.random(1, 9999)
|
||||
|
||||
-- Skip reserved SSN range (987-65-4320..4329)
|
||||
if area == 987 and group == 65 and serial >= 4320 and serial <= 4329 then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local candidate = string.format("%03d-%02d-%04d", area, group, serial)
|
||||
|
||||
if reservedSSNs[candidate] then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if skipUniqueCheck then
|
||||
return candidate
|
||||
end
|
||||
|
||||
local exists = MySQL.scalar.await("SELECT 1 FROM `users` WHERE `ssn` = ? LIMIT 1", { candidate })
|
||||
|
||||
if not exists then
|
||||
return candidate
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
---@param owner string
|
||||
---@param plate string
|
||||
---@param coords vector4
|
||||
---@return CExtendedVehicle?
|
||||
function ESX.CreateExtendedVehicle(owner, plate, coords)
|
||||
return Core.vehicleClass.new(owner, plate, coords)
|
||||
end
|
||||
|
||||
---@param plate string
|
||||
---@return CExtendedVehicle?
|
||||
function ESX.GetExtendedVehicleFromPlate(plate)
|
||||
return Core.vehicleClass.getFromPlate(plate)
|
||||
end
|
||||
792
resources/[core]/es_extended/server/main.lua
Normal file
792
resources/[core]/es_extended/server/main.lua
Normal file
@@ -0,0 +1,792 @@
|
||||
SetMapName("San Andreas")
|
||||
SetGameType("ESX Legacy")
|
||||
|
||||
local oneSyncState = GetConvar("onesync", "off")
|
||||
local newPlayer = "INSERT INTO `users` SET `accounts` = ?, `identifier` = ?, `ssn` = ?, `group` = ?"
|
||||
local loadPlayer = "SELECT `accounts`, `ssn`, `job`, `job_grade`, `group`, `position`, `inventory`, `skin`, `loadout`, `metadata`"
|
||||
|
||||
if Config.Multichar then
|
||||
newPlayer = newPlayer .. ", `firstname` = ?, `lastname` = ?, `dateofbirth` = ?, `sex` = ?, `height` = ?"
|
||||
end
|
||||
|
||||
if Config.StartingInventoryItems then
|
||||
newPlayer = newPlayer .. ", `inventory` = ?"
|
||||
end
|
||||
|
||||
if Config.Multichar or Config.Identity then
|
||||
loadPlayer = loadPlayer .. ", `firstname`, `lastname`, `dateofbirth`, `sex`, `height`"
|
||||
end
|
||||
|
||||
loadPlayer = loadPlayer .. " FROM `users` WHERE identifier = ?"
|
||||
|
||||
local function createESXPlayer(identifier, playerId, data)
|
||||
local accounts = {}
|
||||
|
||||
for account, money in pairs(Config.StartingAccountMoney) do
|
||||
accounts[account] = money
|
||||
end
|
||||
|
||||
local defaultGroup = "user"
|
||||
if Core.IsPlayerAdmin(playerId) then
|
||||
print(("[^2INFO^0] Player ^5%s^0 Has been granted admin permissions via ^5Ace Perms^7."):format(playerId))
|
||||
defaultGroup = "admin"
|
||||
end
|
||||
local parameters = Config.Multichar and
|
||||
{ json.encode(accounts), identifier, Core.generateSSN(), defaultGroup, data.firstname, data.lastname, data.dateofbirth, data.sex, data.height }
|
||||
or { json.encode(accounts), identifier, Core.generateSSN(), defaultGroup }
|
||||
|
||||
if Config.StartingInventoryItems then
|
||||
table.insert(parameters, json.encode(Config.StartingInventoryItems))
|
||||
end
|
||||
|
||||
MySQL.prepare(newPlayer, parameters, function()
|
||||
loadESXPlayer(identifier, playerId, true)
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
local function onPlayerJoined(playerId)
|
||||
local identifier = ESX.GetIdentifier(playerId)
|
||||
if not identifier then
|
||||
return DropPlayer(playerId, "there was an error loading your character!\nError code: identifier-missing-ingame\n\nThe cause of this error is not known, your identifier could not be found. Please come back later or report this problem to the server administration team.")
|
||||
end
|
||||
|
||||
if ESX.GetPlayerFromIdentifier(identifier) then
|
||||
DropPlayer(
|
||||
playerId,
|
||||
("there was an error loading your character!\nError code: identifier-active-ingame\n\nThis error is caused by a player on this server who has the same identifier as you have. Make sure you are not playing on the same Rockstar account.\n\nYour Rockstar identifier: %s"):format(
|
||||
identifier
|
||||
)
|
||||
)
|
||||
else
|
||||
local result = MySQL.scalar.await("SELECT 1 FROM users WHERE identifier = ?", { identifier })
|
||||
if result then
|
||||
loadESXPlayer(identifier, playerId, false)
|
||||
else
|
||||
createESXPlayer(identifier, playerId)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param playerId number
|
||||
---@param reason string
|
||||
---@param cb function?
|
||||
local function onPlayerDropped(playerId, reason, cb)
|
||||
local p = not cb and promise:new()
|
||||
local function resolve()
|
||||
if cb then
|
||||
return cb()
|
||||
elseif(p) then
|
||||
return p:resolve()
|
||||
end
|
||||
end
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
if not xPlayer then
|
||||
return resolve()
|
||||
end
|
||||
|
||||
TriggerEvent("esx:playerDropped", playerId, reason)
|
||||
local job = xPlayer.getJob().name
|
||||
local currentJob = Core.JobsPlayerCount[job]
|
||||
Core.JobsPlayerCount[job] = ((currentJob and currentJob > 0) and currentJob or 1) - 1
|
||||
|
||||
GlobalState[("%s:count"):format(job)] = Core.JobsPlayerCount[job]
|
||||
|
||||
Core.SavePlayer(xPlayer, function()
|
||||
GlobalState["playerCount"] = GlobalState["playerCount"] - 1
|
||||
ESX.Players[playerId] = nil
|
||||
Core.playersByIdentifier[xPlayer.identifier] = nil
|
||||
|
||||
resolve()
|
||||
end)
|
||||
|
||||
if p then
|
||||
return Citizen.Await(p)
|
||||
end
|
||||
end
|
||||
AddEventHandler("esx:onPlayerDropped", onPlayerDropped)
|
||||
|
||||
|
||||
if Config.Multichar then
|
||||
AddEventHandler("esx:onPlayerJoined", function(src, char, data)
|
||||
while not next(ESX.Jobs) do
|
||||
Wait(50)
|
||||
end
|
||||
|
||||
if not ESX.Players[src] then
|
||||
local identifier = char .. ":" .. ESX.GetIdentifier(src)
|
||||
if data then
|
||||
createESXPlayer(identifier, src, data)
|
||||
else
|
||||
loadESXPlayer(identifier, src, false)
|
||||
end
|
||||
end
|
||||
end)
|
||||
else
|
||||
RegisterNetEvent("esx:onPlayerJoined", function()
|
||||
local _source = source
|
||||
while not next(ESX.Jobs) do
|
||||
Wait(50)
|
||||
end
|
||||
|
||||
if not ESX.Players[_source] then
|
||||
onPlayerJoined(_source)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
if not Config.Multichar then
|
||||
AddEventHandler("playerConnecting", function(_, _, deferrals)
|
||||
local playerId = source
|
||||
deferrals.defer()
|
||||
Wait(0) -- Required
|
||||
local identifier
|
||||
local correctLicense, _ = pcall(function ()
|
||||
identifier = ESX.GetIdentifier(playerId)
|
||||
end)
|
||||
|
||||
-- luacheck: ignore
|
||||
if not SetEntityOrphanMode then
|
||||
return deferrals.done(("[ESX] ESX Requires a minimum Artifact version of 10188, Please update your server."))
|
||||
end
|
||||
|
||||
if oneSyncState == "off" or oneSyncState == "legacy" then
|
||||
return deferrals.done(("[ESX] ESX Requires Onesync Infinity to work. This server currently has Onesync set to: %s"):format(oneSyncState))
|
||||
end
|
||||
|
||||
if not Core.DatabaseConnected then
|
||||
return deferrals.done("[ESX] OxMySQL Was Unable To Connect to your database. Please make sure it is turned on and correctly configured in your server.cfg")
|
||||
end
|
||||
|
||||
if not identifier or not correctLicense then
|
||||
if GetResourceState("esx_identity") ~= "started" then
|
||||
return deferrals.done("[ESX] There was an error loading your character!\nError code: identifier-missing\n\nThe cause of this error is not known, your identifier could not be found. Please come back later or report this problem to the server administration team.")
|
||||
end
|
||||
end
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromIdentifier(identifier)
|
||||
|
||||
if not xPlayer then
|
||||
return deferrals.done()
|
||||
end
|
||||
|
||||
if GetPlayerPing(xPlayer.source --[[@as string]]) > 0 then
|
||||
return deferrals.done(
|
||||
("[ESX] There was an error loading your character!\nError code: identifier-active\n\nThis error is caused by a player on this server who has the same identifier as you have. Make sure you are not playing on the same account.\n\nYour identifier: %s"):format(identifier)
|
||||
)
|
||||
end
|
||||
|
||||
deferrals.update(("[ESX] Cleaning stale player entry..."):format(identifier))
|
||||
onPlayerDropped(xPlayer.source, "esx_stale_player_obj")
|
||||
deferrals.done()
|
||||
end)
|
||||
end
|
||||
|
||||
function loadESXPlayer(identifier, playerId, isNew)
|
||||
local userData = {
|
||||
accounts = {},
|
||||
inventory = {},
|
||||
loadout = {},
|
||||
weight = 0,
|
||||
name = GetPlayerName(playerId),
|
||||
identifier = identifier,
|
||||
firstName = "John",
|
||||
lastName = "Doe",
|
||||
dateofbirth = "01/01/2000",
|
||||
height = 120,
|
||||
dead = false,
|
||||
}
|
||||
|
||||
local result = MySQL.prepare.await(loadPlayer, { identifier })
|
||||
|
||||
-- Accounts
|
||||
local accounts = result.accounts
|
||||
accounts = (accounts and accounts ~= "") and json.decode(accounts) or {}
|
||||
|
||||
for account, data in pairs(Config.Accounts) do
|
||||
data.round = data.round or data.round == nil
|
||||
|
||||
local index = #userData.accounts + 1
|
||||
userData.accounts[index] = {
|
||||
name = account,
|
||||
money = accounts[account] or Config.StartingAccountMoney[account] or 0,
|
||||
label = data.label,
|
||||
round = data.round,
|
||||
index = index,
|
||||
}
|
||||
end
|
||||
|
||||
-- SSN
|
||||
userData.ssn = result.ssn
|
||||
|
||||
-- Job
|
||||
local job, grade = result.job, tostring(result.job_grade)
|
||||
|
||||
if not ESX.DoesJobExist(job, grade) then
|
||||
print(("[^3WARNING^7] Ignoring invalid job for ^5%s^7 [job: ^5%s^7, grade: ^5%s^7]"):format(identifier, job, grade))
|
||||
job, grade = "unemployed", "0"
|
||||
end
|
||||
|
||||
local jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade]
|
||||
|
||||
userData.job = {
|
||||
id = jobObject.id,
|
||||
name = jobObject.name,
|
||||
label = jobObject.label,
|
||||
type = jobObject.type,
|
||||
|
||||
grade = tonumber(grade),
|
||||
grade_name = gradeObject.name,
|
||||
grade_label = gradeObject.label,
|
||||
grade_salary = gradeObject.salary,
|
||||
|
||||
skin_male = gradeObject.skin_male and json.decode(gradeObject.skin_male) or {},
|
||||
skin_female = gradeObject.skin_female and json.decode(gradeObject.skin_female) or {},
|
||||
}
|
||||
|
||||
-- Inventory
|
||||
if not Config.CustomInventory then
|
||||
local inventory = (result.inventory and result.inventory ~= "") and json.decode(result.inventory) or {}
|
||||
|
||||
for name, item in pairs(ESX.Items) do
|
||||
local count = inventory[name] or 0
|
||||
userData.weight += (count * item.weight)
|
||||
|
||||
userData.inventory[#userData.inventory + 1] = {
|
||||
name = name,
|
||||
count = count,
|
||||
label = item.label,
|
||||
weight = item.weight,
|
||||
usable = Core.UsableItemsCallbacks[name] ~= nil,
|
||||
rare = item.rare,
|
||||
canRemove = item.canRemove,
|
||||
}
|
||||
end
|
||||
table.sort(userData.inventory, function(a, b)
|
||||
return a.label < b.label
|
||||
end)
|
||||
elseif result.inventory and result.inventory ~= "" then
|
||||
userData.inventory = json.decode(result.inventory)
|
||||
end
|
||||
|
||||
-- Group
|
||||
if result.group then
|
||||
if result.group == "superadmin" then
|
||||
userData.group = "admin"
|
||||
print("[^3WARNING^7] ^5Superadmin^7 detected, setting group to ^5admin^7")
|
||||
else
|
||||
userData.group = result.group
|
||||
end
|
||||
else
|
||||
userData.group = "user"
|
||||
end
|
||||
|
||||
-- Loadout
|
||||
if not Config.CustomInventory then
|
||||
if result.loadout and result.loadout ~= "" then
|
||||
|
||||
local loadout = json.decode(result.loadout)
|
||||
for name, weapon in pairs(loadout) do
|
||||
local label = ESX.GetWeaponLabel(name)
|
||||
|
||||
if label then
|
||||
userData.loadout[#userData.loadout + 1] = {
|
||||
name = name,
|
||||
ammo = weapon.ammo,
|
||||
label = label,
|
||||
components = weapon.components or {},
|
||||
tintIndex = weapon.tintIndex or 0,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Position
|
||||
userData.coords = json.decode(result.position) or Config.DefaultSpawns[ESX.Math.Random(1,#Config.DefaultSpawns)]
|
||||
|
||||
-- Skin
|
||||
userData.skin = (result.skin and result.skin ~= "") and json.decode(result.skin) or { sex = userData.sex == "f" and 1 or 0 }
|
||||
|
||||
-- Metadata
|
||||
userData.metadata = (result.metadata and result.metadata ~= "") and json.decode(result.metadata) or {}
|
||||
|
||||
-- xPlayer Creation
|
||||
local xPlayer = CreateExtendedPlayer(playerId, identifier, userData.ssn, userData.group, userData.accounts, userData.inventory, userData.weight, userData.job, userData.loadout, GetPlayerName(playerId), userData.coords, userData.metadata)
|
||||
|
||||
GlobalState["playerCount"] = GlobalState["playerCount"] + 1
|
||||
ESX.Players[playerId] = xPlayer
|
||||
Core.playersByIdentifier[identifier] = xPlayer
|
||||
|
||||
-- Identity
|
||||
if result.firstname and result.firstname ~= "" then
|
||||
userData.firstName = result.firstname
|
||||
userData.lastName = result.lastname
|
||||
|
||||
local name = ("%s %s"):format(result.firstname, result.lastname)
|
||||
userData.name = name
|
||||
|
||||
xPlayer.set("firstName", result.firstname)
|
||||
xPlayer.set("lastName", result.lastname)
|
||||
xPlayer.setName(name)
|
||||
|
||||
if result.dateofbirth then
|
||||
userData.dateofbirth = result.dateofbirth
|
||||
xPlayer.set("dateofbirth", result.dateofbirth)
|
||||
end
|
||||
if result.sex then
|
||||
userData.sex = result.sex
|
||||
xPlayer.set("sex", result.sex)
|
||||
end
|
||||
if result.height then
|
||||
userData.height = result.height
|
||||
xPlayer.set("height", result.height)
|
||||
end
|
||||
end
|
||||
|
||||
TriggerEvent("esx:playerLoaded", playerId, xPlayer, isNew)
|
||||
userData.money = xPlayer.getMoney()
|
||||
userData.maxWeight = xPlayer.getMaxWeight()
|
||||
userData.variables = xPlayer.variables or {}
|
||||
xPlayer.triggerEvent("esx:playerLoaded", userData, isNew, userData.skin)
|
||||
|
||||
if not Config.CustomInventory then
|
||||
xPlayer.triggerEvent("esx:createMissingPickups", Core.Pickups)
|
||||
elseif setPlayerInventory then
|
||||
setPlayerInventory(playerId, xPlayer, userData.inventory, isNew)
|
||||
end
|
||||
|
||||
xPlayer.triggerEvent("esx:registerSuggestions", Core.RegisteredCommands)
|
||||
print(('[^2INFO^0] Player ^5"%s"^0 has connected to the server. ID: ^5%s^7'):format(xPlayer.getName(), playerId))
|
||||
end
|
||||
|
||||
AddEventHandler("chatMessage", function(playerId, _, message)
|
||||
local xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
if xPlayer and message:sub(1, 1) == "/" and playerId > 0 then
|
||||
CancelEvent()
|
||||
local commandName = message:sub(1):gmatch("%w+")()
|
||||
xPlayer.showNotification(TranslateCap("commanderror_invalidcommand", commandName))
|
||||
end
|
||||
end)
|
||||
|
||||
---@param reason string
|
||||
AddEventHandler("playerDropped", function(reason)
|
||||
onPlayerDropped(source --[[@as number]], reason)
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:playerLoaded", function(_, xPlayer, isNew)
|
||||
local job = xPlayer.getJob().name
|
||||
local jobKey = ("%s:count"):format(job)
|
||||
|
||||
Core.JobsPlayerCount[job] = (Core.JobsPlayerCount[job] or 0) + 1
|
||||
GlobalState[jobKey] = Core.JobsPlayerCount[job]
|
||||
if isNew then
|
||||
Player(xPlayer.source).state:set('isNew', true, false)
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:setJob", function(_, job, lastJob)
|
||||
local lastJobKey = ("%s:count"):format(lastJob.name)
|
||||
local jobKey = ("%s:count"):format(job.name)
|
||||
local currentLastJob = Core.JobsPlayerCount[lastJob.name]
|
||||
|
||||
Core.JobsPlayerCount[lastJob.name] = ((currentLastJob and currentLastJob > 0) and currentLastJob or 1) - 1
|
||||
Core.JobsPlayerCount[job.name] = (Core.JobsPlayerCount[job.name] or 0) + 1
|
||||
|
||||
GlobalState[lastJobKey] = Core.JobsPlayerCount[lastJob.name]
|
||||
GlobalState[jobKey] = Core.JobsPlayerCount[job.name]
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:playerLogout", function(playerId, cb)
|
||||
onPlayerDropped(playerId, "esx_player_logout", cb)
|
||||
TriggerClientEvent("esx:onPlayerLogout", playerId)
|
||||
end)
|
||||
|
||||
if not Config.CustomInventory then
|
||||
RegisterNetEvent("esx:updateWeaponAmmo", function(weaponName, ammoCount)
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
|
||||
if xPlayer then
|
||||
xPlayer.updateWeaponAmmo(weaponName, ammoCount)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:giveInventoryItem", function(target, itemType, itemName, itemCount)
|
||||
local playerId = source
|
||||
local sourceXPlayer = ESX.GetPlayerFromId(playerId)
|
||||
local targetXPlayer = ESX.GetPlayerFromId(target)
|
||||
local distance = #(GetEntityCoords(GetPlayerPed(playerId)) - GetEntityCoords(GetPlayerPed(target)))
|
||||
if not sourceXPlayer or not targetXPlayer or distance > Config.DistanceGive then
|
||||
print(("[^3WARNING^7] Player Detected Cheating: ^5%s^7"):format(GetPlayerName(playerId)))
|
||||
return
|
||||
end
|
||||
|
||||
if itemType == "item_standard" then
|
||||
local sourceItem = sourceXPlayer.getInventoryItem(itemName)
|
||||
|
||||
if not sourceItem then
|
||||
return
|
||||
end
|
||||
|
||||
if itemCount < 1 or sourceItem.count < itemCount then
|
||||
return sourceXPlayer.showNotification(TranslateCap("imp_invalid_quantity"))
|
||||
end
|
||||
|
||||
if not targetXPlayer.canCarryItem(itemName, itemCount) then
|
||||
return sourceXPlayer.showNotification(TranslateCap("ex_inv_lim", targetXPlayer.name))
|
||||
end
|
||||
|
||||
sourceXPlayer.removeInventoryItem(itemName, itemCount)
|
||||
targetXPlayer.addInventoryItem(itemName, itemCount)
|
||||
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_item", itemCount, sourceItem.label, targetXPlayer.name))
|
||||
targetXPlayer.showNotification(TranslateCap("received_item", itemCount, sourceItem.label, sourceXPlayer.name))
|
||||
elseif itemType == "item_account" then
|
||||
if itemCount < 1 or sourceXPlayer.getAccount(itemName).money < itemCount then
|
||||
return sourceXPlayer.showNotification(TranslateCap("imp_invalid_amount"))
|
||||
end
|
||||
|
||||
sourceXPlayer.removeAccountMoney(itemName, itemCount, "Gave to " .. targetXPlayer.name)
|
||||
targetXPlayer.addAccountMoney(itemName, itemCount, "Received from " .. sourceXPlayer.name)
|
||||
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_account_money", ESX.Math.GroupDigits(itemCount), Config.Accounts[itemName].label, targetXPlayer.name))
|
||||
targetXPlayer.showNotification(TranslateCap("received_account_money", ESX.Math.GroupDigits(itemCount), Config.Accounts[itemName].label, sourceXPlayer.name))
|
||||
elseif itemType == "item_weapon" then
|
||||
if not sourceXPlayer.hasWeapon(itemName) then
|
||||
return
|
||||
end
|
||||
|
||||
local weaponLabel = ESX.GetWeaponLabel(itemName)
|
||||
if targetXPlayer.hasWeapon(itemName) then
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_weapon_hasalready", targetXPlayer.name, weaponLabel))
|
||||
targetXPlayer.showNotification(TranslateCap("received_weapon_hasalready", sourceXPlayer.name, weaponLabel))
|
||||
return
|
||||
end
|
||||
|
||||
local _, weapon = sourceXPlayer.getWeapon(itemName)
|
||||
if not weapon then
|
||||
return
|
||||
end
|
||||
|
||||
local _, weaponObject = ESX.GetWeapon(itemName)
|
||||
itemCount = weapon.ammo
|
||||
local weaponComponents = ESX.Table.Clone(weapon.components)
|
||||
local weaponTint = weapon.tintIndex
|
||||
|
||||
if weaponTint then
|
||||
targetXPlayer.setWeaponTint(itemName, weaponTint)
|
||||
end
|
||||
|
||||
if weaponComponents then
|
||||
for _, v in pairs(weaponComponents) do
|
||||
targetXPlayer.addWeaponComponent(itemName, v)
|
||||
end
|
||||
end
|
||||
|
||||
sourceXPlayer.removeWeapon(itemName)
|
||||
targetXPlayer.addWeapon(itemName, itemCount)
|
||||
|
||||
if weaponObject.ammo and itemCount > 0 then
|
||||
local ammoLabel = weaponObject.ammo.label
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_weapon_withammo", weaponLabel, itemCount, ammoLabel, targetXPlayer.name))
|
||||
targetXPlayer.showNotification(TranslateCap("received_weapon_withammo", weaponLabel, itemCount, ammoLabel, sourceXPlayer.name))
|
||||
else
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_weapon", weaponLabel, targetXPlayer.name))
|
||||
targetXPlayer.showNotification(TranslateCap("received_weapon", weaponLabel, sourceXPlayer.name))
|
||||
end
|
||||
elseif itemType == "item_ammo" then
|
||||
if not sourceXPlayer.hasWeapon(itemName) then
|
||||
return
|
||||
end
|
||||
|
||||
local _, weapon = sourceXPlayer.getWeapon(itemName)
|
||||
if not weapon then
|
||||
return
|
||||
end
|
||||
|
||||
if not targetXPlayer.hasWeapon(itemName) then
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_weapon_noweapon", targetXPlayer.name))
|
||||
targetXPlayer.showNotification(TranslateCap("received_weapon_noweapon", sourceXPlayer.name, weapon.label))
|
||||
return
|
||||
end
|
||||
|
||||
local _, weaponObject = ESX.GetWeapon(itemName)
|
||||
|
||||
if not weaponObject.ammo then return end
|
||||
|
||||
local ammoLabel = weaponObject.ammo.label
|
||||
if weapon.ammo >= itemCount then
|
||||
sourceXPlayer.removeWeaponAmmo(itemName, itemCount)
|
||||
targetXPlayer.addWeaponAmmo(itemName, itemCount)
|
||||
|
||||
sourceXPlayer.showNotification(TranslateCap("gave_weapon_ammo", itemCount, ammoLabel, weapon.label, targetXPlayer.name))
|
||||
targetXPlayer.showNotification(TranslateCap("received_weapon_ammo", itemCount, ammoLabel, weapon.label, sourceXPlayer.name))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:removeInventoryItem", function(itemType, itemName, itemCount)
|
||||
local playerId = source
|
||||
local xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
|
||||
if not xPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
if itemType == "item_standard" then
|
||||
if not itemCount or itemCount < 1 then
|
||||
return xPlayer.showNotification(TranslateCap("imp_invalid_quantity"))
|
||||
end
|
||||
|
||||
local xItem = xPlayer.getInventoryItem(itemName)
|
||||
if not xItem then
|
||||
return
|
||||
end
|
||||
|
||||
if itemCount > xItem.count or xItem.count < 1 then
|
||||
return xPlayer.showNotification(TranslateCap("imp_invalid_quantity"))
|
||||
end
|
||||
|
||||
xPlayer.removeInventoryItem(itemName, itemCount)
|
||||
local pickupLabel = ("%s [%s]"):format(xItem.label, itemCount)
|
||||
ESX.CreatePickup("item_standard", itemName, itemCount, pickupLabel, playerId)
|
||||
xPlayer.showNotification(TranslateCap("threw_standard", itemCount, xItem.label))
|
||||
elseif itemType == "item_account" then
|
||||
if itemCount == nil or itemCount < 1 then
|
||||
return xPlayer.showNotification(TranslateCap("imp_invalid_amount"))
|
||||
end
|
||||
|
||||
local account = xPlayer.getAccount(itemName)
|
||||
if not account then
|
||||
return
|
||||
end
|
||||
|
||||
if itemCount > account.money or account.money < 1 then
|
||||
return xPlayer.showNotification(TranslateCap("imp_invalid_amount"))
|
||||
end
|
||||
|
||||
xPlayer.removeAccountMoney(itemName, itemCount, "Threw away")
|
||||
local pickupLabel = ("%s [%s]"):format(account.label, TranslateCap("locale_currency", ESX.Math.GroupDigits(itemCount)))
|
||||
ESX.CreatePickup("item_account", itemName, itemCount, pickupLabel, playerId)
|
||||
xPlayer.showNotification(TranslateCap("threw_account", ESX.Math.GroupDigits(itemCount), string.lower(account.label)))
|
||||
elseif itemType == "item_weapon" then
|
||||
itemName = string.upper(itemName)
|
||||
|
||||
if not xPlayer.hasWeapon(itemName) then return end
|
||||
|
||||
local _, weapon = xPlayer.getWeapon(itemName)
|
||||
if not weapon then
|
||||
return
|
||||
end
|
||||
|
||||
local _, weaponObject = ESX.GetWeapon(itemName)
|
||||
-- luacheck: ignore weaponPickupLabel
|
||||
local weaponPickupLabel = ""
|
||||
local components = ESX.Table.Clone(weapon.components)
|
||||
xPlayer.removeWeapon(itemName)
|
||||
|
||||
if weaponObject.ammo and weapon.ammo > 0 then
|
||||
local ammoLabel = weaponObject.ammo.label
|
||||
weaponPickupLabel = ("%s [%s %s]"):format(weapon.label, weapon.ammo, ammoLabel)
|
||||
xPlayer.showNotification(TranslateCap("threw_weapon_ammo", weapon.label, weapon.ammo, ammoLabel))
|
||||
else
|
||||
weaponPickupLabel = ("%s"):format(weapon.label)
|
||||
xPlayer.showNotification(TranslateCap("threw_weapon", weapon.label))
|
||||
end
|
||||
|
||||
ESX.CreatePickup("item_weapon", itemName, weapon.ammo, weaponPickupLabel, playerId, components, weapon.tintIndex)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:useItem", function(itemName)
|
||||
local source = source
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
|
||||
if not xPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
local count = xPlayer.getInventoryItem(itemName).count
|
||||
|
||||
if count < 1 then
|
||||
return xPlayer.showNotification(TranslateCap("act_imp"))
|
||||
end
|
||||
|
||||
ESX.UseItem(source, itemName)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:onPickup", function(pickupId)
|
||||
local pickup, xPlayer, success = Core.Pickups[pickupId], ESX.GetPlayerFromId(source)
|
||||
|
||||
if not xPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
if not pickup then return end
|
||||
|
||||
local playerPickupDistance = #(pickup.coords - xPlayer.getCoords(true))
|
||||
if playerPickupDistance > 5.0 then
|
||||
print(("[^3WARNING^7] Player Detected Cheating (Out of range pickup): ^5%s^7"):format(xPlayer.getIdentifier()))
|
||||
return
|
||||
end
|
||||
|
||||
if pickup.type == "item_standard" then
|
||||
if not xPlayer.canCarryItem(pickup.name, pickup.count) then
|
||||
return xPlayer.showNotification(TranslateCap("threw_cannot_pickup"))
|
||||
end
|
||||
|
||||
xPlayer.addInventoryItem(pickup.name, pickup.count)
|
||||
success = true
|
||||
elseif pickup.type == "item_account" then
|
||||
success = true
|
||||
xPlayer.addAccountMoney(pickup.name, pickup.count, "Picked up")
|
||||
elseif pickup.type == "item_weapon" then
|
||||
if xPlayer.hasWeapon(pickup.name) then
|
||||
return xPlayer.showNotification(TranslateCap("threw_weapon_already"))
|
||||
end
|
||||
|
||||
success = true
|
||||
xPlayer.addWeapon(pickup.name, pickup.count)
|
||||
xPlayer.setWeaponTint(pickup.name, pickup.tintIndex)
|
||||
|
||||
for _, v in ipairs(pickup.components) do
|
||||
xPlayer.addWeaponComponent(pickup.name, v)
|
||||
end
|
||||
end
|
||||
|
||||
if success then
|
||||
Core.Pickups[pickupId] = nil
|
||||
TriggerClientEvent("esx:removePickup", -1, pickupId)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ESX.RegisterServerCallback("esx:getPlayerData", function(source, cb)
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
|
||||
if not xPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
cb({
|
||||
identifier = xPlayer.identifier,
|
||||
accounts = xPlayer.getAccounts(),
|
||||
inventory = xPlayer.getInventory(),
|
||||
job = xPlayer.getJob(),
|
||||
loadout = xPlayer.getLoadout(),
|
||||
money = xPlayer.getMoney(),
|
||||
position = xPlayer.getCoords(true),
|
||||
metadata = xPlayer.getMeta(),
|
||||
})
|
||||
end)
|
||||
|
||||
ESX.RegisterServerCallback("esx:isUserAdmin", function(source, cb)
|
||||
cb(Core.IsPlayerAdmin(source))
|
||||
end)
|
||||
|
||||
ESX.RegisterServerCallback("esx:getGameBuild", function(_, cb)
|
||||
cb(tonumber(GetConvar("sv_enforceGameBuild", "1604")))
|
||||
end)
|
||||
|
||||
ESX.RegisterServerCallback("esx:getOtherPlayerData", function(_, cb, target)
|
||||
local xPlayer = ESX.GetPlayerFromId(target)
|
||||
|
||||
if not xPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
cb({
|
||||
identifier = xPlayer.identifier,
|
||||
accounts = xPlayer.getAccounts(),
|
||||
inventory = xPlayer.getInventory(),
|
||||
job = xPlayer.getJob(),
|
||||
loadout = xPlayer.getLoadout(),
|
||||
money = xPlayer.getMoney(),
|
||||
position = xPlayer.getCoords(true),
|
||||
metadata = xPlayer.getMeta(),
|
||||
})
|
||||
end)
|
||||
|
||||
ESX.RegisterServerCallback("esx:getPlayerNames", function(source, cb, players)
|
||||
players[source] = nil
|
||||
|
||||
for playerId, _ in pairs(players) do
|
||||
local xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
|
||||
if xPlayer then
|
||||
players[playerId] = xPlayer.getName()
|
||||
else
|
||||
players[playerId] = nil
|
||||
end
|
||||
end
|
||||
|
||||
cb(players)
|
||||
end)
|
||||
|
||||
ESX.RegisterServerCallback("esx:spawnVehicle", function(source, cb, vehData)
|
||||
local ped = GetPlayerPed(source)
|
||||
ESX.OneSync.SpawnVehicle(vehData.model or `ADDER`, vehData.coords or GetEntityCoords(ped), vehData.coords.w or 0.0, vehData.props or {}, function(id)
|
||||
if vehData.warp then
|
||||
local vehicle = NetworkGetEntityFromNetworkId(id)
|
||||
local timeout = 0
|
||||
while GetVehiclePedIsIn(ped, false) ~= vehicle and timeout <= 15 do
|
||||
Wait(0)
|
||||
TaskWarpPedIntoVehicle(ped, vehicle, -1)
|
||||
timeout += 1
|
||||
end
|
||||
end
|
||||
cb(id)
|
||||
end)
|
||||
end)
|
||||
|
||||
AddEventHandler("txAdmin:events:scheduledRestart", function(eventData)
|
||||
if eventData.secondsRemaining == 60 then
|
||||
CreateThread(function()
|
||||
Wait(50000)
|
||||
Core.SavePlayers()
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("txAdmin:events:serverShuttingDown", function()
|
||||
Core.SavePlayers()
|
||||
end)
|
||||
|
||||
local DoNotUse = {
|
||||
["essentialmode"] = true,
|
||||
["es_admin2"] = true,
|
||||
["basic-gamemode"] = true,
|
||||
["mapmanager"] = true,
|
||||
["fivem-map-skater"] = true,
|
||||
["fivem-map-hipster"] = true,
|
||||
["qb-core"] = true,
|
||||
["default_spawnpoint"] = true,
|
||||
}
|
||||
|
||||
AddEventHandler("onResourceStart", function(key)
|
||||
if DoNotUse[string.lower(key)] then
|
||||
while GetResourceState(key) ~= "started" do
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
StopResource(key)
|
||||
error(("WE STOPPED A RESOURCE THAT WILL BREAK ^1ESX^1, PLEASE REMOVE ^5%s^1"):format(key))
|
||||
end
|
||||
-- luacheck: ignore
|
||||
if not SetEntityOrphanMode then
|
||||
CreateThread(function()
|
||||
while true do
|
||||
error("ESX Requires a minimum Artifact version of 10188, Please update your server.")
|
||||
Wait(60 * 1000)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
for key in pairs(DoNotUse) do
|
||||
if GetResourceState(key) == "started" or GetResourceState(key) == "starting" then
|
||||
StopResource(key)
|
||||
error(("WE STOPPED A RESOURCE THAT WILL BREAK ^1ESX^1, PLEASE REMOVE ^5%s^1"):format(key))
|
||||
end
|
||||
end
|
||||
46
resources/[core]/es_extended/server/migration/main.lua
Normal file
46
resources/[core]/es_extended/server/migration/main.lua
Normal file
@@ -0,0 +1,46 @@
|
||||
RegisterCommand("resetmigrations", function(src)
|
||||
if src > 0 then
|
||||
print("^1[ERROR]^7 This command can only be run from the server console.")
|
||||
return
|
||||
end
|
||||
|
||||
for version, _ in pairs(Core.Migrations or {}) do
|
||||
DeleteResourceKvp(("esx_migration:%s"):format(version))
|
||||
end
|
||||
print("^2[SUCCESS]^7 Reset all migrations. This will re-run all migrations on the next server start.")
|
||||
end)
|
||||
|
||||
local migrationsRan = 0
|
||||
local restartRequired = false
|
||||
|
||||
for esxVersion, migrations in pairs(Core.Migrations or {}) do
|
||||
---@cast esxVersion string
|
||||
---@cast migrations table<string, function>
|
||||
|
||||
if ESX.Table.SizeOf(migrations) > 0 then
|
||||
print(("^4[INFO]^7 Running migrations for ESX version %s"):format(esxVersion))
|
||||
|
||||
for migrationName, migration in pairs(migrations) do
|
||||
local success, result = pcall(migration)
|
||||
if not success then
|
||||
local err = result --[[@as string]]
|
||||
error(("^1[ERROR]^7 Failed migration ^4['%s.%s']^7: %s"):format(esxVersion, migrationName, err))
|
||||
end
|
||||
|
||||
local migrationRequiresRestart = result --[[@as boolean]]
|
||||
|
||||
if not restartRequired and migrationRequiresRestart then
|
||||
restartRequired = true
|
||||
end
|
||||
end
|
||||
|
||||
SetResourceKvpInt(("esx_migration:%s"):format(esxVersion), 1)
|
||||
print(("^2[SUCCESS]^7 Successfully completed migrations for ESX version %s"):format(esxVersion))
|
||||
migrationsRan += 1
|
||||
end
|
||||
end
|
||||
|
||||
while restartRequired do
|
||||
print(("^4[INFO]^7 Ran migrations for %d ESX version(s). ^1Server restart required!^7"):format(migrationsRan))
|
||||
Wait(500)
|
||||
end
|
||||
@@ -0,0 +1,70 @@
|
||||
local esxVersion = "v1.13.3"
|
||||
|
||||
Core.Migrations = Core.Migrations or {}
|
||||
Core.Migrations[esxVersion] = Core.Migrations[esxVersion] or {}
|
||||
|
||||
if GetResourceKvpInt(("esx_migration:%s"):format(esxVersion)) == 1 then
|
||||
return
|
||||
end
|
||||
|
||||
---@return boolean restartRequired
|
||||
Core.Migrations[esxVersion].ssn = function()
|
||||
print("^4[esx_migration:v.1.13.3:ssn]^7 Adding SSN column to users table.")
|
||||
local col = MySQL.scalar.await([[
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'users'
|
||||
AND COLUMN_NAME = 'ssn'
|
||||
]])
|
||||
|
||||
local idx = MySQL.scalar.await([[
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'users'
|
||||
AND INDEX_NAME = 'unique_ssn'
|
||||
]])
|
||||
|
||||
if col == 0 and idx == 0 then
|
||||
MySQL.update.await([[
|
||||
ALTER TABLE `users`
|
||||
ADD COLUMN `ssn` VARCHAR(11) NULL DEFAULT NULL AFTER `identifier`,
|
||||
ADD UNIQUE KEY `unique_ssn` (`ssn`)
|
||||
]])
|
||||
elseif col == 0 then
|
||||
MySQL.update.await("ALTER TABLE `users` ADD COLUMN `ssn` VARCHAR(11) NULL DEFAULT NULL AFTER `identifier`")
|
||||
elseif idx == 0 then
|
||||
MySQL.update.await("ALTER TABLE `users` ADD UNIQUE KEY `unique_ssn` (`ssn`)")
|
||||
end
|
||||
|
||||
|
||||
local Result = MySQL.query.await("SELECT `identifier` FROM `users` WHERE `ssn` IS NULL")
|
||||
if #Result == 0 then
|
||||
print("^4[esx_migration:v.1.13.3:ssn]^7 No users found without SSN, migration not needed.")
|
||||
return false
|
||||
end
|
||||
|
||||
print("^4[esx_migration:v.1.13.3:ssn]^7 Generating SSN for existing users.")
|
||||
local GeneratedSSNs = {}
|
||||
local Parameters = {}
|
||||
for i = 1, #Result do
|
||||
local ssn
|
||||
repeat
|
||||
ssn = Core.generateSSN(true)
|
||||
until not GeneratedSSNs[ssn]
|
||||
|
||||
GeneratedSSNs[ssn] = true
|
||||
Parameters[i] = { ssn, Result[i].identifier }
|
||||
end
|
||||
|
||||
print("^4[esx_migration:v.1.13.3:ssn]^7 Updating users with generated SSN. This may take a minute...")
|
||||
MySQL.prepare.await("UPDATE `users` SET `ssn` = ? WHERE `identifier` = ?", Parameters)
|
||||
|
||||
print("^4[esx_migration:v.1.13.3:ssn]^7 Removing SSN default value.")
|
||||
MySQL.update.await("ALTER TABLE `users` MODIFY `ssn` VARCHAR(11) NOT NULL")
|
||||
|
||||
print(("^4[esx_migration:v.1.13.3:ssn]^7 Successfully migrated %d users."):format(#Parameters))
|
||||
|
||||
return true
|
||||
end
|
||||
@@ -0,0 +1,35 @@
|
||||
local esxVersion = "v1.13.5"
|
||||
|
||||
Core.Migrations = Core.Migrations or {}
|
||||
Core.Migrations[esxVersion] = Core.Migrations[esxVersion] or {}
|
||||
|
||||
if GetResourceKvpInt(("esx_migration:%s"):format(esxVersion)) == 1 then
|
||||
return
|
||||
end
|
||||
|
||||
---@return boolean restartRequired
|
||||
Core.Migrations[esxVersion].jobTypes = function()
|
||||
print("^4[esx_migration:v1.13.5:jobTypes]^7 Adding job type column to jobs table.")
|
||||
|
||||
local col = MySQL.scalar.await([[
|
||||
SELECT COUNT(*)
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'jobs'
|
||||
AND COLUMN_NAME = 'type'
|
||||
]])
|
||||
|
||||
if col == 0 then
|
||||
print("^4[esx_migration:v1.13.5:jobTypes]^7 Column not found, altering jobs table.")
|
||||
MySQL.update.await([[
|
||||
ALTER TABLE `jobs`
|
||||
ADD COLUMN `type` VARCHAR(50) NOT NULL DEFAULT 'civ' AFTER `label`
|
||||
]])
|
||||
else
|
||||
print("^4[esx_migration:v1.13.5:jobTypes]^7 Column already exists, migration not needed.")
|
||||
return false
|
||||
end
|
||||
|
||||
print("^4[esx_migration:v1.13.5:jobTypes]^7 Migration complete.")
|
||||
return true
|
||||
end
|
||||
155
resources/[core]/es_extended/server/modules/callback.lua
Normal file
155
resources/[core]/es_extended/server/modules/callback.lua
Normal file
@@ -0,0 +1,155 @@
|
||||
---@diagnostic disable: duplicate-set-field
|
||||
|
||||
-- =============================================
|
||||
-- MARK: Variables
|
||||
-- =============================================
|
||||
|
||||
Callbacks = {}
|
||||
|
||||
Callbacks.requests = {}
|
||||
Callbacks.storage = {}
|
||||
Callbacks.id = 0
|
||||
|
||||
-- =============================================
|
||||
-- MARK: Internal Functions
|
||||
-- =============================================
|
||||
|
||||
function Callbacks:Register(name, resource, cb)
|
||||
self.storage[name] = {
|
||||
resource = resource,
|
||||
cb = cb
|
||||
}
|
||||
end
|
||||
|
||||
function Callbacks:Execute(cb, ...)
|
||||
local success, errorString = pcall(cb, ...)
|
||||
|
||||
if not success then
|
||||
print(("[^1ERROR^7] Failed to execute Callback with RequestId: ^5%s^7"):format(self.currentId))
|
||||
print("^3Callback Error:^7 " .. tostring(errorString)) -- just log, don't throw
|
||||
self.currentId = nil
|
||||
return
|
||||
end
|
||||
|
||||
self.currentId = nil
|
||||
end
|
||||
|
||||
function Callbacks:Trigger(player, event, cb, invoker, ...)
|
||||
self.requests[self.id] = {
|
||||
await = type(cb) == "boolean",
|
||||
cb = cb or promise:new()
|
||||
}
|
||||
local table = self.requests[self.id]
|
||||
|
||||
TriggerClientEvent("esx:triggerClientCallback", player, event, self.id, invoker, ...)
|
||||
|
||||
self.id += 1
|
||||
|
||||
return table.cb
|
||||
end
|
||||
|
||||
function Callbacks:ServerRecieve(player, event, requestId, invoker, ...)
|
||||
self.currentId = requestId
|
||||
|
||||
if not self.storage[event] then
|
||||
return error(("Server Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(event, invoker))
|
||||
end
|
||||
|
||||
local returnCb = function(...)
|
||||
TriggerClientEvent("esx:serverCallback", player, requestId, invoker, ...)
|
||||
end
|
||||
local callback = self.storage[event].cb
|
||||
|
||||
self:Execute(callback, player, returnCb, ...)
|
||||
end
|
||||
|
||||
function Callbacks:RecieveClient(requestId, invoker, ...)
|
||||
self.currentId = requestId
|
||||
|
||||
if not self.requests[self.currentId] then
|
||||
return error(("Client Callback with requestId ^5%s^1 Was Called by ^5%s^1 but does not exist."):format(self.currentId, invoker))
|
||||
end
|
||||
|
||||
local callback = self.requests[self.currentId]
|
||||
|
||||
self.requests[requestId] = nil
|
||||
if callback.await then
|
||||
callback.cb:resolve({ ... })
|
||||
else
|
||||
self:Execute(callback.cb, ...)
|
||||
end
|
||||
end
|
||||
|
||||
-- =============================================
|
||||
-- MARK: ESX Functions
|
||||
-- =============================================
|
||||
|
||||
---@param player number playerId
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
---@param ... any
|
||||
function ESX.TriggerClientCallback(player, eventName, callback, ...)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Trigger(player, eventName, callback, invoker, ...)
|
||||
end
|
||||
|
||||
---@param player number playerId
|
||||
---@param eventName string
|
||||
---@param ... any
|
||||
---@return ...
|
||||
function ESX.AwaitClientCallback(player, eventName, ...)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
local p = Callbacks:Trigger(player, eventName, false, invoker, ...)
|
||||
if not p then return end
|
||||
|
||||
SetTimeout(15000, function()
|
||||
if p.state == "pending" then
|
||||
p:reject("Server Callback Timed Out")
|
||||
end
|
||||
end)
|
||||
|
||||
Citizen.Await(p)
|
||||
|
||||
return table.unpack(p.value)
|
||||
end
|
||||
|
||||
---@param eventName string
|
||||
---@param callback function
|
||||
---@return nil
|
||||
function ESX.RegisterServerCallback(eventName, callback)
|
||||
local invokingResource = GetInvokingResource()
|
||||
local invoker = (invokingResource and invokingResource ~= "Unknown") and invokingResource or "es_extended"
|
||||
|
||||
Callbacks:Register(eventName, invoker, callback)
|
||||
end
|
||||
|
||||
---@param eventName string
|
||||
---@return boolean
|
||||
function ESX.DoesServerCallbackExist(eventName)
|
||||
return Callbacks.storage[eventName] ~= nil
|
||||
end
|
||||
|
||||
-- =============================================
|
||||
-- MARK: Events
|
||||
-- =============================================
|
||||
|
||||
RegisterNetEvent("esx:clientCallback", function(requestId, invoker, ...)
|
||||
Callbacks:RecieveClient(requestId, invoker, ...)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx:triggerServerCallback", function(eventName, requestId, invoker, ...)
|
||||
local source = source
|
||||
Callbacks:ServerRecieve(source, eventName, requestId, invoker, ...)
|
||||
end)
|
||||
|
||||
AddEventHandler("onResourceStop", function(resource)
|
||||
for k, v in pairs(Callbacks.storage) do
|
||||
if v.resource == resource then
|
||||
Callbacks.storage[k] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
774
resources/[core]/es_extended/server/modules/commands.lua
Normal file
774
resources/[core]/es_extended/server/modules/commands.lua
Normal file
@@ -0,0 +1,774 @@
|
||||
ESX.RegisterCommand(
|
||||
{ "setcoords", "tp" },
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
xPlayer.setCoords({ x = args.x, y = args.y, z = args.z })
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Set Coordinates /setcoords Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "X Coord", value = args.x, inline = true },
|
||||
{ name = "Y Coord", value = args.y, inline = true },
|
||||
{ name = "Z Coord", value = args.z, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
false,
|
||||
{
|
||||
help = TranslateCap("command_setcoords"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "x", help = TranslateCap("command_setcoords_x"), type = "coordinate" },
|
||||
{ name = "y", help = TranslateCap("command_setcoords_y"), type = "coordinate" },
|
||||
{ name = "z", help = TranslateCap("command_setcoords_z"), type = "coordinate" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"setjob",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if not ESX.DoesJobExist(args.job, args.grade) then
|
||||
return showError(TranslateCap("command_setjob_invalid"))
|
||||
end
|
||||
|
||||
args.playerId.setJob(args.job, args.grade)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Set Job /setjob Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Job", value = args.job, inline = true },
|
||||
{ name = "Grade", value = args.grade, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_setjob"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "job", help = TranslateCap("command_setjob_job"), type = "string" },
|
||||
{ name = "grade", help = TranslateCap("command_setjob_grade"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
local upgrades = Config.SpawnVehMaxUpgrades and {
|
||||
plate = "ADMINCAR",
|
||||
modEngine = 3,
|
||||
modBrakes = 2,
|
||||
modTransmission = 2,
|
||||
modSuspension = 3,
|
||||
modArmor = true,
|
||||
windowTint = 1,
|
||||
} or {}
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"car",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if not xPlayer then
|
||||
return showError("[^1ERROR^7] The xPlayer value is nil")
|
||||
end
|
||||
|
||||
local playerPed = GetPlayerPed(xPlayer.source)
|
||||
local playerCoords = GetEntityCoords(playerPed)
|
||||
local playerHeading = GetEntityHeading(playerPed)
|
||||
local playerVehicle = GetVehiclePedIsIn(playerPed, false)
|
||||
|
||||
if not args.car or type(args.car) ~= "string" then
|
||||
args.car = "adder"
|
||||
end
|
||||
|
||||
if playerVehicle then
|
||||
DeleteEntity(playerVehicle)
|
||||
end
|
||||
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Spawn Car /car Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Vehicle", value = args.car, inline = true },
|
||||
})
|
||||
end
|
||||
|
||||
local xRoutingBucket = GetPlayerRoutingBucket(xPlayer.source)
|
||||
|
||||
ESX.OneSync.SpawnVehicle(args.car, playerCoords, playerHeading, upgrades, function(networkId)
|
||||
if networkId then
|
||||
local vehicle = NetworkGetEntityFromNetworkId(networkId)
|
||||
|
||||
if xRoutingBucket ~= 0 then
|
||||
SetEntityRoutingBucket(vehicle, xRoutingBucket)
|
||||
end
|
||||
|
||||
for _ = 1, 100 do
|
||||
Wait(0)
|
||||
SetPedIntoVehicle(playerPed, vehicle, -1)
|
||||
|
||||
if GetVehiclePedIsIn(playerPed, false) == vehicle then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if GetVehiclePedIsIn(playerPed, false) ~= vehicle then
|
||||
showError("[^1ERROR^7] The player could not be seated in the vehicle")
|
||||
end
|
||||
end
|
||||
end)
|
||||
end,
|
||||
false,
|
||||
{
|
||||
help = TranslateCap("command_car"),
|
||||
validate = false,
|
||||
arguments = {
|
||||
{ name = "car", validate = false, help = TranslateCap("command_car_car"), type = "string" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
{ "cardel", "dv" },
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
local ped = GetPlayerPed(xPlayer.source)
|
||||
local pedVehicle = GetVehiclePedIsIn(ped, false)
|
||||
|
||||
if DoesEntityExist(pedVehicle) then
|
||||
DeleteEntity(pedVehicle)
|
||||
end
|
||||
|
||||
local coords = GetEntityCoords(ped)
|
||||
local Vehicles = ESX.OneSync.GetVehiclesInArea(coords, tonumber(args.radius) or 5.0)
|
||||
for i = 1, #Vehicles do
|
||||
local Vehicle = NetworkGetEntityFromNetworkId(Vehicles[i])
|
||||
if DoesEntityExist(Vehicle) then
|
||||
DeleteEntity(Vehicle)
|
||||
end
|
||||
end
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Delete Vehicle /dv Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
false,
|
||||
{
|
||||
help = TranslateCap("command_cardel"),
|
||||
validate = false,
|
||||
arguments = {
|
||||
{ name = "radius", validate = false, help = TranslateCap("command_cardel_radius"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
{ "fix", "repair" },
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
local xTarget = args.playerId
|
||||
local ped = GetPlayerPed(xTarget.source)
|
||||
local pedVehicle = GetVehiclePedIsIn(ped, false)
|
||||
if not pedVehicle or GetPedInVehicleSeat(pedVehicle, -1) ~= ped then
|
||||
showError(TranslateCap("not_in_vehicle"))
|
||||
return
|
||||
end
|
||||
xTarget.triggerEvent("esx:repairPedVehicle")
|
||||
xPlayer.showNotification(TranslateCap("command_repair_success"), true, false, 140)
|
||||
if xPlayer.source ~= xTarget.source then
|
||||
xTarget.showNotification(TranslateCap("command_repair_success_target"), true, false, 140)
|
||||
end
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Fix Vehicle /fix Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = xTarget.name, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_repair"),
|
||||
validate = false,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"setaccountmoney",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if not args.playerId.getAccount(args.account) then
|
||||
return showError(TranslateCap("command_giveaccountmoney_invalid"))
|
||||
end
|
||||
args.playerId.setAccountMoney(args.account, args.amount, "Government Grant")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Set Account Money /setaccountmoney Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Account", value = args.account, inline = true },
|
||||
{ name = "Amount", value = args.amount, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_setaccountmoney"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "account", help = TranslateCap("command_giveaccountmoney_account"), type = "string" },
|
||||
{ name = "amount", help = TranslateCap("command_setaccountmoney_amount"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"giveaccountmoney",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if not args.playerId.getAccount(args.account) then
|
||||
return showError(TranslateCap("command_giveaccountmoney_invalid"))
|
||||
end
|
||||
args.playerId.addAccountMoney(args.account, args.amount, "Government Grant")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Give Account Money /giveaccountmoney Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Account", value = args.account, inline = true },
|
||||
{ name = "Amount", value = args.amount, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_giveaccountmoney"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "account", help = TranslateCap("command_giveaccountmoney_account"), type = "string" },
|
||||
{ name = "amount", help = TranslateCap("command_giveaccountmoney_amount"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"removeaccountmoney",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if not args.playerId.getAccount(args.account) then
|
||||
return showError(TranslateCap("command_removeaccountmoney_invalid"))
|
||||
end
|
||||
args.playerId.removeAccountMoney(args.account, args.amount, "Government Tax")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Remove Account Money /removeaccountmoney Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Account", value = args.account, inline = true },
|
||||
{ name = "Amount", value = args.amount, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_removeaccountmoney"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "account", help = TranslateCap("command_removeaccountmoney_account"), type = "string" },
|
||||
{ name = "amount", help = TranslateCap("command_removeaccountmoney_amount"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.RegisterCommand(
|
||||
"giveitem",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
args.playerId.addInventoryItem(args.item, args.count)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Give Item /giveitem Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Item", value = args.item, inline = true },
|
||||
{ name = "Quantity", value = args.count, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_giveitem"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "item", help = TranslateCap("command_giveitem_item"), type = "item" },
|
||||
{ name = "count", help = TranslateCap("command_giveitem_count"), type = "number", Validator = {
|
||||
validate = function(x) return x > 0 end,
|
||||
err = TranslateCap("commanderror_argumentmismatch_positive_number", "count")
|
||||
}},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"giveweapon",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if args.playerId.hasWeapon(args.weapon) then
|
||||
return showError(TranslateCap("command_giveweapon_hasalready"))
|
||||
end
|
||||
args.playerId.addWeapon(args.weapon, args.ammo)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Give Weapon /giveweapon Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Weapon", value = args.weapon, inline = true },
|
||||
{ name = "Ammo", value = args.ammo, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_giveweapon"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "weapon", help = TranslateCap("command_giveweapon_weapon"), type = "weapon" },
|
||||
{ name = "ammo", help = TranslateCap("command_giveweapon_ammo"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"giveammo",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if not args.playerId.hasWeapon(args.weapon) then
|
||||
return showError(TranslateCap("command_giveammo_noweapon_found"))
|
||||
end
|
||||
args.playerId.addWeaponAmmo(args.weapon, args.ammo)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Give Ammunition /giveammo Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Weapon", value = args.weapon, inline = true },
|
||||
{ name = "Ammo", value = args.ammo, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_giveweapon"),
|
||||
validate = false,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "weapon", help = TranslateCap("command_giveammo_weapon"), type = "weapon" },
|
||||
{ name = "ammo", help = TranslateCap("command_giveammo_ammo"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"giveweaponcomponent",
|
||||
"admin",
|
||||
function(xPlayer, args, showError)
|
||||
if args.playerId.hasWeapon(args.weaponName) then
|
||||
local component = ESX.GetWeaponComponent(args.weaponName, args.componentName)
|
||||
|
||||
if component then
|
||||
if args.playerId.hasWeaponComponent(args.weaponName, args.componentName) then
|
||||
showError(TranslateCap("command_giveweaponcomponent_hasalready"))
|
||||
else
|
||||
args.playerId.addWeaponComponent(args.weaponName, args.componentName)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Give Weapon Component /giveweaponcomponent Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Weapon", value = args.weaponName, inline = true },
|
||||
{ name = "Component", value = args.componentName, inline = true },
|
||||
})
|
||||
end
|
||||
end
|
||||
else
|
||||
showError(TranslateCap("command_giveweaponcomponent_invalid"))
|
||||
end
|
||||
else
|
||||
showError(TranslateCap("command_giveweaponcomponent_missingweapon"))
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_giveweaponcomponent"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "weaponName", help = TranslateCap("command_giveweapon_weapon"), type = "weapon" },
|
||||
{ name = "componentName", help = TranslateCap("command_giveweaponcomponent_component"), type = "string" },
|
||||
},
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
ESX.RegisterCommand({ "clear", "cls" }, "user", function(xPlayer)
|
||||
xPlayer.triggerEvent("chat:clear")
|
||||
end, false, { help = TranslateCap("command_clear") })
|
||||
|
||||
ESX.RegisterCommand({ "clearall", "clsall" }, "admin", function(xPlayer)
|
||||
TriggerClientEvent("chat:clear", -1)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Clear Chat /clearall Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
})
|
||||
end
|
||||
end, true, { help = TranslateCap("command_clearall") })
|
||||
|
||||
ESX.RegisterCommand("refreshjobs", "admin", function()
|
||||
ESX.RefreshJobs()
|
||||
end, true, { help = TranslateCap("command_clearall") })
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.RegisterCommand("refreshitems", "admin", function(xPlayer)
|
||||
local itemCount = ESX.RefreshItems()
|
||||
|
||||
xPlayer.showNotification(Translate("command_refreshitems_success", itemCount), true, false, 140)
|
||||
end, true, { help = TranslateCap("command_refreshitems") })
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"clearinventory",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
for _, v in ipairs(args.playerId.inventory) do
|
||||
if v.count > 0 then
|
||||
args.playerId.setInventoryItem(v.name, 0)
|
||||
end
|
||||
end
|
||||
TriggerEvent("esx:playerInventoryCleared", args.playerId)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Clear Inventory /clearinventory Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_clearinventory"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"clearloadout",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
for i = #args.playerId.loadout, 1, -1 do
|
||||
args.playerId.removeWeapon(args.playerId.loadout[i].name)
|
||||
end
|
||||
TriggerEvent("esx:playerLoadoutCleared", args.playerId)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "/clearloadout Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_clearloadout"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"setgroup",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
if not args.playerId then
|
||||
args.playerId = xPlayer.source
|
||||
end
|
||||
if args.group == "superadmin" then
|
||||
args.group = "admin"
|
||||
print("[^3WARNING^7] ^5Superadmin^7 detected, setting group to ^5admin^7")
|
||||
end
|
||||
args.playerId.setGroup(args.group)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "/setgroup Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Group", value = args.group, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_setgroup"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "group", help = TranslateCap("command_setgroup_group"), type = "string" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"save",
|
||||
"admin",
|
||||
function(_, args)
|
||||
Core.SavePlayer(args.playerId)
|
||||
print(("[^2Info^0] Saved Player - ^5%s^0"):format(args.playerId.source))
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_save"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand("saveall", "admin", function()
|
||||
Core.SavePlayers()
|
||||
end, true, { help = TranslateCap("command_saveall") })
|
||||
|
||||
ESX.RegisterCommand("group", { "user", "admin" }, function(xPlayer, _, _)
|
||||
print(("%s, you are currently: ^5%s^0"):format(xPlayer.getName(), xPlayer.getGroup()))
|
||||
end, true)
|
||||
|
||||
ESX.RegisterCommand("job", { "user", "admin" }, function(xPlayer, _, _)
|
||||
local job = xPlayer.getJob()
|
||||
|
||||
print(("%s, your job is: ^5%s^0 - ^5%s^0 - ^5%s^0"):format(xPlayer.getName(), job.name, job.grade_label, job.onDuty and "On Duty" or "Off Duty"))
|
||||
end, false)
|
||||
|
||||
ESX.RegisterCommand("info", { "user", "admin" }, function(xPlayer)
|
||||
local job = xPlayer.getJob().name
|
||||
print(("^2ID: ^5%s^0 | ^2Name: ^5%s^0 | ^2Group: ^5%s^0 | ^2Job: ^5%s^0"):format(xPlayer.source, xPlayer.getName(), xPlayer.getGroup(), job))
|
||||
end, false)
|
||||
|
||||
ESX.RegisterCommand("playtime", { "user", "admin" }, function(xPlayer)
|
||||
local playtime = xPlayer.getPlayTime()
|
||||
local days = math.floor(playtime / 86400)
|
||||
local hours = math.floor((playtime % 86400) / 3600)
|
||||
local minutes = math.floor((playtime % 3600) / 60)
|
||||
print(("Playtime: ^5%s^0 Days | ^5%s^0 Hours | ^5%s^0 Minutes"):format(days, hours, minutes))
|
||||
end, false)
|
||||
|
||||
ESX.RegisterCommand("coords", "admin", function(xPlayer)
|
||||
local ped = GetPlayerPed(xPlayer.source)
|
||||
local coords = GetEntityCoords(ped, false)
|
||||
local heading = GetEntityHeading(ped)
|
||||
print(("Coords - Vector3: ^5%s^0"):format(vector3(coords.x, coords.y, coords.z)))
|
||||
print(("Coords - Vector4: ^5%s^0"):format(vector4(coords.x, coords.y, coords.z, heading)))
|
||||
end, false)
|
||||
|
||||
ESX.RegisterCommand("tpm", "admin", function(xPlayer)
|
||||
xPlayer.triggerEvent("esx:tpm")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin Teleport /tpm Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
})
|
||||
end
|
||||
end, false)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"goto",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
local targetCoords = args.playerId.getCoords()
|
||||
local srcDim = GetPlayerRoutingBucket(xPlayer.source)
|
||||
local targetDim = GetPlayerRoutingBucket(args.playerId.source)
|
||||
|
||||
if srcDim ~= targetDim then
|
||||
SetPlayerRoutingBucket(xPlayer.source, targetDim)
|
||||
end
|
||||
xPlayer.setCoords(targetCoords)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin Teleport /goto Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Target Coords", value = targetCoords, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
false,
|
||||
{
|
||||
help = TranslateCap("command_goto"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"bring",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
local targetCoords = args.playerId.getCoords()
|
||||
local playerCoords = xPlayer.getCoords()
|
||||
local targetDim = GetPlayerRoutingBucket(args.playerId.source)
|
||||
local srcDim = GetPlayerRoutingBucket(xPlayer.source)
|
||||
|
||||
if targetDim ~= srcDim then
|
||||
SetPlayerRoutingBucket(args.playerId.source, srcDim)
|
||||
end
|
||||
args.playerId.setCoords(playerCoords)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin Teleport /bring Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Target Coords", value = targetCoords, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
false,
|
||||
{
|
||||
help = TranslateCap("command_bring"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"kill",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
args.playerId.triggerEvent("esx:killPlayer")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Kill Command /kill Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_kill"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"freeze",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
args.playerId.triggerEvent("esx:freezePlayer", "freeze")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin Freeze /freeze Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_freeze"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
"unfreeze",
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
args.playerId.triggerEvent("esx:freezePlayer", "unfreeze")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin UnFreeze /unfreeze Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_unfreeze"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
ESX.RegisterCommand("noclip", "admin", function(xPlayer)
|
||||
xPlayer.triggerEvent("esx:noclip")
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin NoClip /noclip Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
})
|
||||
end
|
||||
end, false)
|
||||
|
||||
ESX.RegisterCommand("players", "admin", function()
|
||||
local xPlayers = ESX.GetExtendedPlayers() -- Returns all xPlayers
|
||||
print(("^5%s^2 online player(s)^0"):format(#xPlayers))
|
||||
for i = 1, #xPlayers do
|
||||
local xPlayer = xPlayers[i]
|
||||
print(("^1[^2ID: ^5%s^0 | ^2Name : ^5%s^0 | ^2Group : ^5%s^0 | ^2Identifier : ^5%s^1]^0\n"):format(xPlayer.source, xPlayer.getName(), xPlayer.getGroup(), xPlayer.identifier))
|
||||
end
|
||||
end, true)
|
||||
|
||||
ESX.RegisterCommand(
|
||||
{"setdim", "setbucket"},
|
||||
"admin",
|
||||
function(xPlayer, args)
|
||||
SetPlayerRoutingBucket(args.playerId.source, args.dimension)
|
||||
if Config.AdminLogging then
|
||||
ESX.DiscordLogFields("UserActions", "Admin Set Dim /setdim Triggered!", "pink", {
|
||||
{ name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
|
||||
{ name = "ID", value = xPlayer and xPlayer.source or "Unknown ID", inline = true },
|
||||
{ name = "Target", value = args.playerId.name, inline = true },
|
||||
{ name = "Dimension", value = args.dimension, inline = true },
|
||||
})
|
||||
end
|
||||
end,
|
||||
true,
|
||||
{
|
||||
help = TranslateCap("command_setdim"),
|
||||
validate = true,
|
||||
arguments = {
|
||||
{ name = "playerId", help = TranslateCap("commandgeneric_playerid"), type = "player" },
|
||||
{ name = "dimension", help = TranslateCap("commandgeneric_dimension"), type = "number" },
|
||||
},
|
||||
}
|
||||
)
|
||||
101
resources/[core]/es_extended/server/modules/createJob.lua
Normal file
101
resources/[core]/es_extended/server/modules/createJob.lua
Normal file
@@ -0,0 +1,101 @@
|
||||
|
||||
local NOTIFY_TYPES = {
|
||||
INFO = "^5[%s]^7-^6[INFO]^7 %s",
|
||||
SUCCESS = "^5[%s]^7-^2[SUCCESS]^7 %s",
|
||||
ERROR = "^5[%s]^7-^1[ERROR]^7 %s"
|
||||
}
|
||||
|
||||
local function doesJobAndGradesExist(name, grades)
|
||||
if not ESX.Jobs[name] then
|
||||
return false
|
||||
end
|
||||
|
||||
for _, grade in ipairs(grades) do
|
||||
if not ESX.DoesJobExist(name, grade.grade) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
local function generateNewJobTable(name, label, grades, jobType)
|
||||
local job = { name = name, label = label, type = jobType, grades = {} }
|
||||
for _, v in pairs(grades) do
|
||||
job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = v.skin_male or '{}', skin_female = v.skin_female or '{}' }
|
||||
end
|
||||
|
||||
return job
|
||||
end
|
||||
|
||||
local function notify(notifyType,resourceName,message,...)
|
||||
local formattedMessage = string.format(message, ...)
|
||||
|
||||
if not NOTIFY_TYPES[notifyType] then
|
||||
return print(NOTIFY_TYPES.INFO:format(resourceName,formattedMessage))
|
||||
end
|
||||
|
||||
return print(NOTIFY_TYPES[notifyType]:format(resourceName,formattedMessage))
|
||||
end
|
||||
|
||||
--- Create Job at Runtime
|
||||
--- @param name string
|
||||
--- @param label string
|
||||
--- @param grades table
|
||||
--- @param jobType string
|
||||
function ESX.CreateJob(name, label, grades, jobType)
|
||||
local currentResourceName = GetInvokingResource()
|
||||
local success = false
|
||||
|
||||
if not name or name == '' then
|
||||
notify("ERROR",currentResourceName, 'Missing argument `name`')
|
||||
return success
|
||||
end
|
||||
|
||||
if not label or label == '' then
|
||||
notify("ERROR",currentResourceName, 'Missing argument `label`')
|
||||
return success
|
||||
end
|
||||
|
||||
if not grades or not next(grades) then
|
||||
notify("ERROR",currentResourceName, 'Missing argument `grades`')
|
||||
return success
|
||||
end
|
||||
|
||||
if type(jobType) ~= "string" then
|
||||
jobType = "civ"
|
||||
end
|
||||
|
||||
local currentJobExist = doesJobAndGradesExist(name, grades)
|
||||
|
||||
if currentJobExist then
|
||||
notify("ERROR",currentResourceName, 'Job or grades already exists: `%s`', name)
|
||||
return success
|
||||
end
|
||||
|
||||
local queries = {
|
||||
{ query = 'INSERT INTO `jobs` (`name`, `label`, `type`) VALUES (?, ?, ?)', values = { name, label, jobType } }
|
||||
}
|
||||
|
||||
for _, grade in pairs(grades) do
|
||||
queries[#queries + 1] = {
|
||||
query = 'INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)',
|
||||
values = { name, grade.grade, grade.name, grade.label, grade.salary, grade.skin_male and json.encode(grade.skin_male) or '{}', grade.skin_female and json.encode(grade.skin_female) or '{}' }
|
||||
}
|
||||
end
|
||||
|
||||
success = exports.oxmysql:transaction_async(queries)
|
||||
|
||||
if not success then
|
||||
notify("ERROR", currentResourceName, 'Failed to insert one or more grades for job: `%s`', name)
|
||||
return success
|
||||
end
|
||||
|
||||
ESX.Jobs[name] = generateNewJobTable(name, label, grades, jobType)
|
||||
|
||||
notify("SUCCESS", currentResourceName, 'Job created successfully: `%s`', name)
|
||||
|
||||
TriggerEvent('esx:jobCreated', name, ESX.Jobs[name])
|
||||
|
||||
return success
|
||||
end
|
||||
52
resources/[core]/es_extended/server/modules/npwd.lua
Normal file
52
resources/[core]/es_extended/server/modules/npwd.lua
Normal file
@@ -0,0 +1,52 @@
|
||||
local npwd = GetResourceState("npwd"):find("start") and exports.npwd or nil
|
||||
|
||||
AddEventHandler("onServerResourceStart", function(resource)
|
||||
if resource ~= "npwd" then
|
||||
return
|
||||
end
|
||||
|
||||
npwd = GetResourceState("npwd"):find("start") and exports.npwd or nil
|
||||
|
||||
if not npwd then
|
||||
return
|
||||
end
|
||||
for _, xPlayer in pairs(ESX.Players) do
|
||||
npwd:newPlayer({
|
||||
source = xPlayer.source,
|
||||
identifier = xPlayer.identifier,
|
||||
firstname = xPlayer.get("firstName"),
|
||||
lastname = xPlayer.get("lastName"),
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("onServerResourceStop", function(resource)
|
||||
if resource == "npwd" then
|
||||
npwd = nil
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:playerLoaded", function(playerId, xPlayer)
|
||||
if not npwd then
|
||||
return
|
||||
end
|
||||
|
||||
if not xPlayer then
|
||||
xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
end
|
||||
|
||||
npwd:newPlayer({
|
||||
source = playerId,
|
||||
identifier = xPlayer.identifier,
|
||||
firstname = xPlayer.get("firstName"),
|
||||
lastname = xPlayer.get("lastName"),
|
||||
})
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:playerLogout", function(playerId)
|
||||
if not npwd then
|
||||
return
|
||||
end
|
||||
|
||||
npwd:unloadPlayer(playerId)
|
||||
end)
|
||||
387
resources/[core]/es_extended/server/modules/onesync.lua
Normal file
387
resources/[core]/es_extended/server/modules/onesync.lua
Normal file
@@ -0,0 +1,387 @@
|
||||
ESX.OneSync = {}
|
||||
|
||||
---@param source number|vector3
|
||||
---@param closest boolean
|
||||
---@param distance? number
|
||||
---@param ignore? table
|
||||
---@param routingBucket? number
|
||||
local function getNearbyPlayers(source, closest, distance, ignore, routingBucket)
|
||||
local result = {}
|
||||
local count = 0
|
||||
local playerPed
|
||||
local playerCoords
|
||||
ignore = ignore or {}
|
||||
|
||||
if not distance then
|
||||
distance = 100
|
||||
end
|
||||
|
||||
if type(source) == "number" then
|
||||
playerPed = GetPlayerPed(source)
|
||||
|
||||
if not source then
|
||||
error("Received invalid first argument (source); should be playerId")
|
||||
end
|
||||
|
||||
playerCoords = GetEntityCoords(playerPed)
|
||||
|
||||
if not playerCoords then
|
||||
error("Received nil value (playerCoords); perhaps source is nil at first place?")
|
||||
end
|
||||
end
|
||||
|
||||
if type(source) == "vector3" then
|
||||
playerCoords = source
|
||||
|
||||
if not playerCoords then
|
||||
error("Received nil value (playerCoords); perhaps source is nil at first place?")
|
||||
end
|
||||
end
|
||||
|
||||
for _, xPlayer in pairs(ESX.Players) do
|
||||
if not ignore[xPlayer.source] and (not routingBucket or GetPlayerRoutingBucket(xPlayer.source) == routingBucket) then
|
||||
local entity = GetPlayerPed(xPlayer.source)
|
||||
local coords = GetEntityCoords(entity)
|
||||
|
||||
if not closest then
|
||||
local dist = #(playerCoords - coords)
|
||||
if dist <= distance then
|
||||
count = count + 1
|
||||
result[count] = { id = xPlayer.source, ped = NetworkGetNetworkIdFromEntity(entity), coords = coords, dist = dist }
|
||||
end
|
||||
else
|
||||
if xPlayer.source ~= source then
|
||||
local dist = #(playerCoords - coords)
|
||||
if dist <= (result.dist or distance) then
|
||||
result = { id = xPlayer.source, ped = NetworkGetNetworkIdFromEntity(entity), coords = coords, dist = dist }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
---@param source vector3|number playerId or vector3 coordinates
|
||||
---@param maxDistance number
|
||||
---@param ignore? table playerIds to ignore, where the key is playerId and value is true
|
||||
---@param routingBucket? number
|
||||
function ESX.OneSync.GetPlayersInArea(source, maxDistance, ignore, routingBucket)
|
||||
return getNearbyPlayers(source, false, maxDistance, ignore, routingBucket)
|
||||
end
|
||||
|
||||
---@param source vector3|number playerId or vector3 coordinates
|
||||
---@param maxDistance number
|
||||
---@param ignore? table playerIds to ignore, where the key is playerId and value is true
|
||||
---@param routingBucket? number
|
||||
function ESX.OneSync.GetClosestPlayer(source, maxDistance, ignore, routingBucket)
|
||||
return getNearbyPlayers(source, true, maxDistance, ignore, routingBucket)
|
||||
end
|
||||
|
||||
---@param vehicleModel number|string
|
||||
---@param coords vector3|table
|
||||
---@param heading number
|
||||
---@param vehicleProperties table
|
||||
---@param cb? fun(netId: number)
|
||||
---@param vehicleType string?
|
||||
---@return number? netId
|
||||
function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperties, cb, vehicleType)
|
||||
if cb and not ESX.IsFunctionReference(cb) then
|
||||
error("Invalid callback function")
|
||||
end
|
||||
|
||||
vehicleModel = joaat(vehicleModel)
|
||||
|
||||
local promise = not cb and promise.new()
|
||||
|
||||
local function resolve(result)
|
||||
if promise then
|
||||
promise:resolve(result)
|
||||
elseif cb then
|
||||
cb(result)
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
local function reject(err)
|
||||
if promise then
|
||||
promise:reject(err)
|
||||
end
|
||||
error(err)
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
if not vehicleType then
|
||||
local xPlayer = ESX.GetExtendedPlayers()[1]
|
||||
if xPlayer then
|
||||
vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source)
|
||||
end
|
||||
end
|
||||
|
||||
if not vehicleType then
|
||||
return reject("No players found nearby to check vehicle type! Alternatively, you can specify the vehicle type manually.")
|
||||
end
|
||||
|
||||
local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading)
|
||||
local tries = 0
|
||||
|
||||
local hasNetOwner = next(ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0) or {}) ~= nil
|
||||
|
||||
while not createdVehicle or createdVehicle == 0
|
||||
or (hasNetOwner and NetworkGetEntityOwner(createdVehicle) == -1)
|
||||
or (not hasNetOwner and not DoesEntityExist(createdVehicle)) do
|
||||
Wait(200)
|
||||
tries = tries + 1
|
||||
if tries > 40 then
|
||||
return reject(("Could not spawn vehicle - ^5%s^7!"):format(vehicleModel))
|
||||
end
|
||||
end
|
||||
|
||||
-- luacheck: ignore
|
||||
SetEntityOrphanMode(createdVehicle, 2)
|
||||
local networkId = NetworkGetNetworkIdFromEntity(createdVehicle)
|
||||
Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true)
|
||||
|
||||
resolve(networkId)
|
||||
end)
|
||||
|
||||
if promise then
|
||||
return Citizen.Await(promise)
|
||||
end
|
||||
end
|
||||
|
||||
---@param model number|string
|
||||
---@param coords vector3|table
|
||||
---@param heading number
|
||||
---@param cb? fun(netId: number)
|
||||
---@return number? netId
|
||||
function ESX.OneSync.SpawnObject(model, coords, heading, cb)
|
||||
if type(model) == "string" then
|
||||
model = joaat(model)
|
||||
end
|
||||
|
||||
local promise = not cb and promise.new()
|
||||
local objectCoords = type(coords) == "vector3" and coords or vector3(coords.x, coords.y, coords.z)
|
||||
|
||||
local function resolve(result)
|
||||
if promise then
|
||||
promise:resolve(result)
|
||||
elseif cb then
|
||||
cb(result)
|
||||
end
|
||||
end
|
||||
|
||||
local function reject(err)
|
||||
if promise then
|
||||
promise:reject(err)
|
||||
end
|
||||
error(err)
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
local entity = CreateObject(model, objectCoords.x, objectCoords.y, objectCoords.z, true, true, false)
|
||||
local tries = 0
|
||||
|
||||
while not DoesEntityExist(entity) do
|
||||
Wait(200)
|
||||
|
||||
tries = tries + 1
|
||||
|
||||
if tries > 40 then
|
||||
return reject(("Could not spawn object - ^5%s^7!"):format(entity))
|
||||
end
|
||||
end
|
||||
|
||||
local networkId = NetworkGetNetworkIdFromEntity(entity)
|
||||
|
||||
SetEntityHeading(entity, heading)
|
||||
resolve(networkId)
|
||||
end)
|
||||
|
||||
if promise then
|
||||
return Citizen.Await(promise)
|
||||
end
|
||||
end
|
||||
|
||||
---@param model number|string
|
||||
---@param coords vector3|table
|
||||
---@param heading number
|
||||
---@param cb? fun(netId: number)
|
||||
---@return number? netId
|
||||
function ESX.OneSync.SpawnPed(model, coords, heading, cb)
|
||||
if type(model) == "string" then
|
||||
model = joaat(model)
|
||||
end
|
||||
|
||||
local promise = not cb and promise.new()
|
||||
|
||||
local function resolve(result)
|
||||
if promise then
|
||||
promise:resolve(result)
|
||||
elseif cb then
|
||||
cb(result)
|
||||
end
|
||||
end
|
||||
|
||||
local function reject(err)
|
||||
if promise then
|
||||
promise:reject(err)
|
||||
end
|
||||
error(err)
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
local entity = CreatePed(0, model, coords.x, coords.y, coords.z, heading, true, true)
|
||||
local tries = 0
|
||||
|
||||
while not DoesEntityExist(entity) do
|
||||
Wait(200)
|
||||
|
||||
tries = tries + 1
|
||||
|
||||
if tries > 40 then
|
||||
return reject(("Could not spawn ped - ^5%s^7!"):format(model))
|
||||
end
|
||||
end
|
||||
|
||||
local networkId = NetworkGetNetworkIdFromEntity(entity)
|
||||
resolve(networkId)
|
||||
end)
|
||||
|
||||
if promise then
|
||||
return Citizen.Await(promise)
|
||||
end
|
||||
end
|
||||
|
||||
---@param model number|string
|
||||
---@param vehicle number entityId
|
||||
---@param seat number
|
||||
---@param cb? fun(netId: number)
|
||||
---@return number? netId
|
||||
function ESX.OneSync.SpawnPedInVehicle(model, vehicle, seat, cb)
|
||||
if type(model) == "string" then
|
||||
model = joaat(model)
|
||||
end
|
||||
|
||||
local promise = not cb and promise.new()
|
||||
|
||||
local function resolve(result)
|
||||
if promise then
|
||||
promise:resolve(result)
|
||||
elseif cb then
|
||||
cb(result)
|
||||
end
|
||||
end
|
||||
|
||||
local function reject(err)
|
||||
if promise then
|
||||
promise:reject(err)
|
||||
end
|
||||
error(err)
|
||||
end
|
||||
|
||||
CreateThread(function()
|
||||
local entity = CreatePedInsideVehicle(vehicle, 1, model, seat, true, true)
|
||||
local tries = 0
|
||||
|
||||
while not DoesEntityExist(entity) do
|
||||
Wait(200)
|
||||
|
||||
tries = tries + 1
|
||||
|
||||
if tries > 40 then
|
||||
reject(("Could not spawn ped - ^5%s^7!"):format(model))
|
||||
end
|
||||
end
|
||||
|
||||
local networkId = NetworkGetNetworkIdFromEntity(entity)
|
||||
resolve(networkId)
|
||||
end)
|
||||
|
||||
if promise then
|
||||
return Citizen.Await(promise)
|
||||
end
|
||||
end
|
||||
|
||||
local function getNearbyEntities(entities, coords, modelFilter, maxDistance, isPed)
|
||||
local nearbyEntities = {}
|
||||
coords = type(coords) == "number" and GetEntityCoords(GetPlayerPed(coords)) or vector3(coords.x, coords.y, coords.z)
|
||||
for _, entity in pairs(entities) do
|
||||
if not isPed or (isPed and not IsPedAPlayer(entity)) then
|
||||
if not modelFilter or modelFilter[GetEntityModel(entity)] then
|
||||
local entityCoords = GetEntityCoords(entity)
|
||||
if not maxDistance or #(coords - entityCoords) <= maxDistance then
|
||||
nearbyEntities[#nearbyEntities + 1] = NetworkGetNetworkIdFromEntity(entity)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return nearbyEntities
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param maxDistance number
|
||||
---@param modelFilter table models to ignore, where the key is the model hash and the value is true
|
||||
---@return table
|
||||
function ESX.OneSync.GetPedsInArea(coords, maxDistance, modelFilter)
|
||||
return getNearbyEntities(GetAllPeds(), coords, modelFilter, maxDistance, true)
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param maxDistance number
|
||||
---@param modelFilter table models to ignore, where the key is the model hash and the value is true
|
||||
---@return table
|
||||
function ESX.OneSync.GetObjectsInArea(coords, maxDistance, modelFilter)
|
||||
return getNearbyEntities(GetAllObjects(), coords, modelFilter, maxDistance)
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param maxDistance number
|
||||
---@param modelFilter table | nil models to ignore, where the key is the model hash and the value is true
|
||||
---@return table
|
||||
function ESX.OneSync.GetVehiclesInArea(coords, maxDistance, modelFilter)
|
||||
return getNearbyEntities(GetAllVehicles(), coords, modelFilter, maxDistance)
|
||||
end
|
||||
|
||||
local function getClosestEntity(entities, coords, modelFilter, isPed)
|
||||
local distance, closestEntity, closestCoords = 100, 0, vector3(0, 0, 0)
|
||||
coords = type(coords) == "number" and GetEntityCoords(GetPlayerPed(coords)) or vector3(coords.x, coords.y, coords.z)
|
||||
|
||||
for _, entity in pairs(entities) do
|
||||
if not isPed or (isPed and not IsPedAPlayer(entity)) then
|
||||
if not modelFilter or modelFilter[GetEntityModel(entity)] then
|
||||
local entityCoords = GetEntityCoords(entity)
|
||||
local dist = #(coords - entityCoords)
|
||||
if dist < distance then
|
||||
closestEntity, distance, closestCoords = entity, dist, entityCoords
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return NetworkGetNetworkIdFromEntity(closestEntity), distance, closestCoords
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param modelFilter table models to ignore, where the key is the model hash and the value is true
|
||||
---@return number entityId, number distance, vector3 coords
|
||||
function ESX.OneSync.GetClosestPed(coords, modelFilter)
|
||||
return getClosestEntity(GetAllPeds(), coords, modelFilter, true)
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param modelFilter table models to ignore, where the key is the model hash and the value is true
|
||||
---@return number entityId, number distance, vector3 coords
|
||||
function ESX.OneSync.GetClosestObject(coords, modelFilter)
|
||||
return getClosestEntity(GetAllObjects(), coords, modelFilter)
|
||||
end
|
||||
|
||||
---@param coords vector3
|
||||
---@param modelFilter table models to ignore, where the key is the model hash and the value is true
|
||||
---@return number entityId, number distance, vector3 coords
|
||||
function ESX.OneSync.GetClosestVehicle(coords, modelFilter)
|
||||
return getClosestEntity(GetAllVehicles(), coords, modelFilter)
|
||||
end
|
||||
71
resources/[core]/es_extended/server/modules/paycheck.lua
Normal file
71
resources/[core]/es_extended/server/modules/paycheck.lua
Normal file
@@ -0,0 +1,71 @@
|
||||
function StartPayCheck()
|
||||
CreateThread(function()
|
||||
while true do
|
||||
Wait(Config.PaycheckInterval)
|
||||
for player, xPlayer in pairs(ESX.Players) do
|
||||
local jobLabel = xPlayer.job.label
|
||||
local job = xPlayer.job.grade_name
|
||||
local onDuty = xPlayer.job.onDuty
|
||||
local salary = (job == "unemployed" or onDuty) and xPlayer.job.grade_salary or ESX.Math.Round(xPlayer.job.grade_salary * Config.OffDutyPaycheckMultiplier)
|
||||
|
||||
if xPlayer.paycheckEnabled then
|
||||
if salary > 0 then
|
||||
if job == "unemployed" then -- unemployed
|
||||
xPlayer.addAccountMoney("bank", salary, "Welfare Check")
|
||||
TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_help", salary), "CHAR_BANK_MAZE", 9)
|
||||
if Config.LogPaycheck then
|
||||
ESX.DiscordLogFields("Paycheck", "Paycheck - Unemployment Benefits", "green", {
|
||||
{ name = "Player", value = xPlayer.name, inline = true },
|
||||
{ name = "ID", value = xPlayer.source, inline = true },
|
||||
{ name = "Amount", value = salary, inline = true },
|
||||
})
|
||||
end
|
||||
elseif Config.EnableSocietyPayouts then -- possibly a society
|
||||
TriggerEvent("esx_society:getSociety", xPlayer.job.name, function(society)
|
||||
if society ~= nil then -- verified society
|
||||
TriggerEvent("esx_addonaccount:getSharedAccount", society.account, function(account)
|
||||
if account.money >= salary then -- does the society money to pay its employees?
|
||||
xPlayer.addAccountMoney("bank", salary, "Paycheck")
|
||||
account.removeMoney(salary)
|
||||
if Config.LogPaycheck then
|
||||
ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", {
|
||||
{ name = "Player", value = xPlayer.name, inline = true },
|
||||
{ name = "ID", value = xPlayer.source, inline = true },
|
||||
{ name = "Amount", value = salary, inline = true },
|
||||
})
|
||||
end
|
||||
|
||||
TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9)
|
||||
else
|
||||
TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), "", TranslateCap("company_nomoney"), "CHAR_BANK_MAZE", 1)
|
||||
end
|
||||
end)
|
||||
else -- not a society
|
||||
xPlayer.addAccountMoney("bank", salary, "Paycheck")
|
||||
if Config.LogPaycheck then
|
||||
ESX.DiscordLogFields("Paycheck", "Paycheck - " .. jobLabel, "green", {
|
||||
{ name = "Player", value = xPlayer.name, inline = true },
|
||||
{ name = "ID", value = xPlayer.source, inline = true },
|
||||
{ name = "Amount", value = salary, inline = true },
|
||||
})
|
||||
end
|
||||
TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9)
|
||||
end
|
||||
end)
|
||||
else -- generic job
|
||||
xPlayer.addAccountMoney("bank", salary, "Paycheck")
|
||||
if Config.LogPaycheck then
|
||||
ESX.DiscordLogFields("Paycheck", "Paycheck - Generic", "green", {
|
||||
{ name = "Player", value = xPlayer.name, inline = true },
|
||||
{ name = "ID", value = xPlayer.source, inline = true },
|
||||
{ name = "Amount", value = salary, inline = true },
|
||||
})
|
||||
end
|
||||
TriggerClientEvent("esx:showAdvancedNotification", player, TranslateCap("bank"), TranslateCap("received_paycheck"), TranslateCap("received_salary", salary), "CHAR_BANK_MAZE", 9)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
80
resources/[core]/es_extended/shared/config/adjustments.lua
Normal file
80
resources/[core]/es_extended/shared/config/adjustments.lua
Normal file
@@ -0,0 +1,80 @@
|
||||
Config.DisableHealthRegeneration = false -- Player will no longer regenerate health
|
||||
Config.DisableVehicleRewards = false -- Disables Player Receiving weapons from vehicles
|
||||
Config.DisableNPCDrops = false -- stops NPCs from dropping weapons on death
|
||||
Config.DisableDispatchServices = true -- Disable Dispatch services
|
||||
Config.DisableScenarios = true -- Disable Scenarios
|
||||
Config.DisableAimAssist = false -- disables AIM assist (mainly on controllers)
|
||||
Config.DisableVehicleSeatShuff = false -- Disables vehicle seat shuff
|
||||
Config.DisableDisplayAmmo = false -- Disable ammunition display
|
||||
Config.EnablePVP = true -- Allow Player to player combat
|
||||
Config.EnableWantedLevel = false -- Use Normal GTA wanted Level?
|
||||
|
||||
Config.RemoveHudComponents = {
|
||||
[1] = false, --WANTED_STARS,
|
||||
[2] = false, --WEAPON_ICON
|
||||
[3] = false, --CASH
|
||||
[4] = false, --MP_CASH
|
||||
[5] = false, --MP_MESSAGE
|
||||
[6] = true, --VEHICLE_NAME
|
||||
[7] = true, -- AREA_NAME
|
||||
[8] = true, -- VEHICLE_CLASS
|
||||
[9] = true, --STREET_NAME
|
||||
[10] = false, --HELP_TEXT
|
||||
[11] = false, --FLOATING_HELP_TEXT_1
|
||||
[12] = false, --FLOATING_HELP_TEXT_2
|
||||
[13] = false, --CASH_CHANGE
|
||||
[14] = false, --RETICLE
|
||||
[15] = false, --SUBTITLE_TEXT
|
||||
[16] = false, --RADIO_STATIONS
|
||||
[17] = false, --SAVING_GAME,
|
||||
[18] = false, --GAME_STREAM
|
||||
[19] = false, --WEAPON_WHEEL
|
||||
[20] = false, --WEAPON_WHEEL_STATS
|
||||
[21] = false, --HUD_COMPONENTS
|
||||
[22] = false, --HUD_WEAPONS
|
||||
}
|
||||
|
||||
Config.Multipliers = {
|
||||
pedDensity = 1.0,
|
||||
scenarioPedDensityInterior = 0.0,
|
||||
scenarioPedDensityExterior = 1.0,
|
||||
ambientVehicleRange = 1.0,
|
||||
parkedVehicleDensity = 1.0,
|
||||
randomVehicleDensity = 1.0,
|
||||
vehicleDensity = 1.0
|
||||
}
|
||||
|
||||
-- Pattern string format
|
||||
--1 will lead to a random number from 0-9.
|
||||
--A will lead to a random letter from A-Z.
|
||||
-- . will lead to a random letter or number, with a 50% probability of being either.
|
||||
--^1 will lead to a literal 1 being emitted.
|
||||
--^A will lead to a literal A being emitted.
|
||||
--Any other character will lead to said character being emitted.
|
||||
-- A string shorter than 8 characters will be padded on the right.
|
||||
Config.CustomAIPlates = "........" -- Custom plates for AI vehicles
|
||||
|
||||
--[[
|
||||
PlaceHolders:
|
||||
{server_name} - Server Display Name
|
||||
{server_endpoint} - Server IP:Server Port
|
||||
{server_players} - Current Player Count
|
||||
{server_maxplayers} - Max Player Count
|
||||
|
||||
{player_name} - Player Name
|
||||
{player_rp_name} - Player RP Name
|
||||
{player_id} - Player ID
|
||||
{player_street} - Player Street Name
|
||||
]]
|
||||
|
||||
Config.DiscordActivity = {
|
||||
appId = 0, -- Discord Application ID,
|
||||
assetName = "LargeIcon", --image name for the "large" icon.
|
||||
assetText = "{server_name}", -- Text to display on the asset
|
||||
buttons = {
|
||||
{ label = "Join Server", url = "fivem://connect/{server_endpoint}" },
|
||||
{ label = "Discord", url = "https://discord.esx-framework.org" },
|
||||
},
|
||||
presence = "{player_name} [{player_id}] | {server_players}/{server_maxplayers}",
|
||||
refresh = 1 * 60 * 1000, -- 1 minute
|
||||
}
|
||||
23
resources/[core]/es_extended/shared/config/logs.lua
Normal file
23
resources/[core]/es_extended/shared/config/logs.lua
Normal file
@@ -0,0 +1,23 @@
|
||||
Config.DiscordLogs = {
|
||||
Webhooks = {
|
||||
default = "",
|
||||
test = "",
|
||||
Chat = "",
|
||||
UserActions = "",
|
||||
Resources = "",
|
||||
Paycheck = "",
|
||||
},
|
||||
|
||||
Colors = { -- https://www.spycolor.com/
|
||||
default = 14423100,
|
||||
blue = 255,
|
||||
red = 16711680,
|
||||
green = 65280,
|
||||
white = 16777215,
|
||||
black = 0,
|
||||
orange = 16744192,
|
||||
yellow = 16776960,
|
||||
pink = 16761035,
|
||||
lightgreen = 65309,
|
||||
},
|
||||
}
|
||||
75
resources/[core]/es_extended/shared/config/main.lua
Normal file
75
resources/[core]/es_extended/shared/config/main.lua
Normal file
@@ -0,0 +1,75 @@
|
||||
Config = {}
|
||||
|
||||
local txAdminLocale = GetConvar("txAdmin-locale", "en")
|
||||
local esxLocale = GetConvar("esx:locale", "invalid")
|
||||
Config.Locale = (esxLocale ~= "invalid") and esxLocale or (txAdminLocale ~= "custom" and txAdminLocale) or "en"
|
||||
|
||||
-- For ox inventory, this will automatically be adjusted, do not change! For other inventories, leave as false unless specifically instructed to change.
|
||||
Config.CustomInventory = false
|
||||
|
||||
Config.Accounts = {
|
||||
bank = {
|
||||
label = TranslateCap("account_bank"),
|
||||
round = true,
|
||||
},
|
||||
black_money = {
|
||||
label = TranslateCap("account_black_money"),
|
||||
round = true,
|
||||
},
|
||||
money = {
|
||||
label = TranslateCap("account_money"),
|
||||
round = true,
|
||||
},
|
||||
}
|
||||
|
||||
Config.StartingAccountMoney = { bank = 50000 }
|
||||
|
||||
Config.StartingInventoryItems = false -- table/false
|
||||
|
||||
Config.DefaultSpawns = { -- If you want to have more spawn positions and select them randomly uncomment commented code or add more locations
|
||||
{ x = 222.2027, y = -864.0162, z = 30.2922, heading = 1.0 },
|
||||
--{x = 224.9865, y = -865.0871, z = 30.2922, heading = 1.0},
|
||||
--{x = 227.8436, y = -866.0400, z = 30.2922, heading = 1.0},
|
||||
--{x = 230.6051, y = -867.1450, z = 30.2922, heading = 1.0},
|
||||
--{x = 233.5459, y = -868.2626, z = 30.2922, heading = 1.0}
|
||||
}
|
||||
|
||||
Config.AdminGroups = {
|
||||
["owner"] = true,
|
||||
["admin"] = true,
|
||||
}
|
||||
|
||||
Config.ValidCharacterSets = { -- Only enable additional charsets if your server is multilingual. By default everything is false.
|
||||
['el'] = false, -- Greek
|
||||
['sr'] = false, -- Cyrillic
|
||||
['he'] = false, -- Hebrew
|
||||
['ar'] = false, -- Arabic
|
||||
['zh-cn'] = false -- Chinese, Japanese, Korean
|
||||
}
|
||||
|
||||
Config.EnablePaycheck = true -- enable paycheck
|
||||
Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via webhook (default is false)
|
||||
Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
|
||||
Config.MaxWeight = 24 -- the max inventory weight without a backpack
|
||||
Config.PaycheckInterval = 7 * 60000 -- how often to receive paychecks in milliseconds
|
||||
Config.SaveDeathStatus = true -- Save the death status of a player
|
||||
Config.EnableDebug = false -- Use Debug options?
|
||||
|
||||
Config.DefaultJobDuty = true -- A players default duty status when changing jobs
|
||||
Config.OffDutyPaycheckMultiplier = 0.5 -- The multiplier for off duty paychecks. 0.5 = 50% of the on duty paycheck
|
||||
|
||||
Config.Multichar = GetResourceState("esx_multicharacter") ~= "missing"
|
||||
Config.Identity = true -- Select a character identity data before they have loaded in (this happens by default with multichar)
|
||||
Config.DistanceGive = 4.0 -- Max distance when giving items, weapons etc.
|
||||
|
||||
Config.AdminLogging = false -- Logs the usage of certain commands by those with group.admin ace permissions (default is false)
|
||||
|
||||
-------------------------------------
|
||||
-- DO NOT CHANGE BELOW THIS LINE !!!
|
||||
-------------------------------------
|
||||
if GetResourceState("ox_inventory") ~= "missing" then
|
||||
Config.CustomInventory = "ox"
|
||||
end
|
||||
|
||||
Config.EnableDefaultInventory = Config.CustomInventory == false -- Display the default Inventory ( F2 )
|
||||
Config.Identifier = GetConvar("esx:identifier", "license")
|
||||
1108
resources/[core]/es_extended/shared/config/weapons.lua
Normal file
1108
resources/[core]/es_extended/shared/config/weapons.lua
Normal file
File diff suppressed because it is too large
Load Diff
293
resources/[core]/es_extended/shared/functions.lua
Normal file
293
resources/[core]/es_extended/shared/functions.lua
Normal file
@@ -0,0 +1,293 @@
|
||||
local Charset = {}
|
||||
|
||||
for i = 48, 57 do
|
||||
table.insert(Charset, string.char(i))
|
||||
end
|
||||
for i = 65, 90 do
|
||||
table.insert(Charset, string.char(i))
|
||||
end
|
||||
for i = 97, 122 do
|
||||
table.insert(Charset, string.char(i))
|
||||
end
|
||||
|
||||
local weaponsByName = {}
|
||||
local weaponsByHash = {}
|
||||
|
||||
CreateThread(function()
|
||||
for index, weapon in pairs(Config.Weapons) do
|
||||
weaponsByName[weapon.name] = index
|
||||
weaponsByHash[joaat(weapon.name)] = weapon
|
||||
end
|
||||
end)
|
||||
|
||||
---@param length number
|
||||
---@return string
|
||||
function ESX.GetRandomString(length)
|
||||
math.randomseed(GetGameTimer())
|
||||
|
||||
return length > 0 and ESX.GetRandomString(length - 1) .. Charset[math.random(1, #Charset)] or ""
|
||||
end
|
||||
|
||||
---@param key? string Key pair to get specific value of config
|
||||
---@return unknown Returns the whole config if no key is passed, or a specific value
|
||||
function ESX.GetConfig(key)
|
||||
if key then
|
||||
return Config[key]
|
||||
end
|
||||
|
||||
return Config
|
||||
end
|
||||
|
||||
---@param weaponName string
|
||||
---@return number, table
|
||||
function ESX.GetWeapon(weaponName)
|
||||
weaponName = string.upper(weaponName)
|
||||
|
||||
assert(weaponsByName[weaponName], "Invalid weapon name!")
|
||||
|
||||
local index = weaponsByName[weaponName]
|
||||
return index, Config.Weapons[index]
|
||||
end
|
||||
|
||||
---@param weaponHash number
|
||||
---@return table
|
||||
function ESX.GetWeaponFromHash(weaponHash)
|
||||
weaponHash = type(weaponHash) == "string" and joaat(weaponHash) or weaponHash
|
||||
|
||||
return weaponsByHash[weaponHash]
|
||||
end
|
||||
|
||||
---@param byHash boolean
|
||||
---@return table
|
||||
function ESX.GetWeaponList(byHash)
|
||||
return byHash and weaponsByHash or Config.Weapons
|
||||
end
|
||||
|
||||
---@param weaponName string
|
||||
---@return string
|
||||
function ESX.GetWeaponLabel(weaponName)
|
||||
weaponName = string.upper(weaponName)
|
||||
|
||||
assert(weaponsByName[weaponName], "Invalid weapon name!")
|
||||
|
||||
local index = weaponsByName[weaponName]
|
||||
return Config.Weapons[index].label or ""
|
||||
end
|
||||
|
||||
---@param weaponName string
|
||||
---@param weaponComponent string
|
||||
---@return ESXWeaponComponent?
|
||||
function ESX.GetWeaponComponent(weaponName, weaponComponent)
|
||||
weaponName = string.upper(weaponName)
|
||||
|
||||
assert(weaponsByName[weaponName], "Invalid weapon name!")
|
||||
local weapon = Config.Weapons[weaponsByName[weaponName]]
|
||||
|
||||
for _, component in ipairs(weapon.components) do
|
||||
---@cast component ESXWeaponComponent
|
||||
if component.name == weaponComponent then
|
||||
return component
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param table table
|
||||
---@param nb? number
|
||||
---@return string
|
||||
function ESX.DumpTable(table, nb)
|
||||
if nb == nil then
|
||||
nb = 0
|
||||
end
|
||||
|
||||
if type(table) == "table" then
|
||||
local s = ""
|
||||
for _ = 1, nb + 1, 1 do
|
||||
s = s .. " "
|
||||
end
|
||||
|
||||
s = "{\n"
|
||||
for k, v in pairs(table) do
|
||||
if type(k) ~= "number" then
|
||||
k = '"' .. k .. '"'
|
||||
end
|
||||
for _ = 1, nb, 1 do
|
||||
s = s .. " "
|
||||
end
|
||||
s = s .. "[" .. k .. "] = " .. ESX.DumpTable(v, nb + 1) .. ",\n"
|
||||
end
|
||||
|
||||
for _ = 1, nb, 1 do
|
||||
s = s .. " "
|
||||
end
|
||||
|
||||
return s .. "}"
|
||||
else
|
||||
return tostring(table)
|
||||
end
|
||||
end
|
||||
|
||||
---@param value any
|
||||
---@param numDecimalPlaces? number
|
||||
---@return number
|
||||
function ESX.Round(value, numDecimalPlaces)
|
||||
return ESX.Math.Round(value, numDecimalPlaces)
|
||||
end
|
||||
|
||||
---@param value string
|
||||
---@param ... any
|
||||
---@return boolean, string?
|
||||
function ESX.ValidateType(value, ...)
|
||||
local types = { ... }
|
||||
if #types == 0 then return true end
|
||||
|
||||
local mapType = {}
|
||||
for i = 1, #types, 1 do
|
||||
local validateType = types[i]
|
||||
assert(type(validateType) == "string", "bad argument types, only expected string") -- should never use anyhing else than string
|
||||
mapType[validateType] = true
|
||||
end
|
||||
|
||||
local valueType = type(value)
|
||||
|
||||
local matches = mapType[valueType] ~= nil
|
||||
|
||||
if not matches then
|
||||
local requireTypes = table.concat(types, " or ")
|
||||
local errorMessage = ("bad value (%s expected, got %s)"):format(requireTypes, valueType)
|
||||
|
||||
return false, errorMessage
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
---@param ... any
|
||||
---@return boolean
|
||||
function ESX.AssertType(...)
|
||||
local matches, errorMessage = ESX.ValidateType(...)
|
||||
|
||||
assert(matches, errorMessage)
|
||||
|
||||
return matches
|
||||
end
|
||||
|
||||
---@param val unknown
|
||||
function ESX.IsFunctionReference(val)
|
||||
local typeVal = type(val)
|
||||
|
||||
return typeVal == "function" or (typeVal == "table" and type(getmetatable(val)?.__call) == "function")
|
||||
end
|
||||
|
||||
---@param conditionFunc function A function that is repeatedly called until it returns a truthy value or the timeout is exceeded.
|
||||
---@param errorMessage? string Optional. If set, an error will be thrown with this message if the condition is not met within the timeout. If not set, no error will be thrown.
|
||||
---@param timeoutMs? number Optional. The maximum time to wait (in milliseconds) for the condition to be met. Defaults to 1000ms.
|
||||
---@return boolean, any: Returns success status and the returned value of the condition function.
|
||||
function ESX.Await(conditionFunc, errorMessage, timeoutMs)
|
||||
timeoutMs = timeoutMs or 1000
|
||||
|
||||
if timeoutMs < 0 then
|
||||
error("Timeout should be a positive number.")
|
||||
end
|
||||
|
||||
if not ESX.IsFunctionReference(conditionFunc) then
|
||||
error("Condition Function should be a function reference.")
|
||||
end
|
||||
|
||||
-- since errorMessage is optional, we only validate it if the user provided it.
|
||||
if errorMessage then
|
||||
ESX.AssertType(errorMessage, "string", "errorMessage should be a string.")
|
||||
end
|
||||
|
||||
local invokingResource = GetInvokingResource()
|
||||
local startTimeMs = GetGameTimer()
|
||||
while GetGameTimer() - startTimeMs < timeoutMs do
|
||||
local result = conditionFunc()
|
||||
|
||||
if result then
|
||||
return true, result
|
||||
end
|
||||
|
||||
Wait(0)
|
||||
end
|
||||
|
||||
if errorMessage then
|
||||
error(("[%s] -> %s"):format(invokingResource, errorMessage))
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---@param str string
|
||||
---@param allowDigits boolean? Allow numbers if necessary
|
||||
---@return boolean
|
||||
function ESX.IsValidLocaleString(str, allowDigits)
|
||||
if not ESX.ValidateType(str, 'string') then
|
||||
return false
|
||||
end
|
||||
|
||||
local locale = string.lower(Config.Locale)
|
||||
|
||||
local defaultRanges ={
|
||||
{0x0041, 0x005A}, -- Basic Latin uppercase
|
||||
{0x0061, 0x007A}, -- Basic Latin lowercase
|
||||
{0x0020, 0x0020}, -- Space
|
||||
{0x002D, 0x002D}, -- Dash
|
||||
{0x00C0, 0x02AF} -- Latin Extended
|
||||
}
|
||||
|
||||
if allowDigits then
|
||||
defaultRanges[#defaultRanges + 1] = {0x0030, 0x0039} -- 0-9 Numbers
|
||||
end
|
||||
|
||||
local localeRanges = {
|
||||
["el"] = { {0x0370, 0x03FF} }, -- Greek
|
||||
["sr"] ={ {0x0400, 0x04FF} }, -- Cyrillic
|
||||
["he"] ={ {0x05D0, 0x05EA} }, -- Hebrew letters
|
||||
["ar"] = {
|
||||
{0x0620, 0x063F}, -- Arabic
|
||||
{0x0641, 0x064A},
|
||||
{0x066E, 0x066F},
|
||||
{0x0671, 0x06D3},
|
||||
{0x06D5, 0x06D5},
|
||||
{0x0750, 0x077F},
|
||||
{0x08A0, 0x08BD}
|
||||
},
|
||||
["zh-cn"] ={ {0x4E00, 0x9FFF} } -- CJK
|
||||
}
|
||||
|
||||
local validRanges = { table.unpack(defaultRanges) }
|
||||
|
||||
if localeRanges[locale] then
|
||||
for i = 1, #localeRanges[locale] do
|
||||
validRanges[#validRanges + 1] = localeRanges[locale][i]
|
||||
end
|
||||
end
|
||||
|
||||
if Config.ValidCharacterSets then
|
||||
for charset, enabled in pairs(Config.ValidCharacterSets) do
|
||||
if enabled and charset ~= locale and localeRanges[charset] then
|
||||
for i = 1, #localeRanges[charset] do
|
||||
validRanges[#validRanges + 1] = localeRanges[charset][i]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _, code in utf8.codes(str) do
|
||||
local isValid = false
|
||||
|
||||
for i = 1, #validRanges do
|
||||
local range = validRanges[i]
|
||||
if code >= range[1] and code <= range[2] then
|
||||
isValid = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not isValid then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
14
resources/[core]/es_extended/shared/main.lua
Normal file
14
resources/[core]/es_extended/shared/main.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
ESX = {}
|
||||
|
||||
exports("getSharedObject", function()
|
||||
return ESX
|
||||
end)
|
||||
|
||||
AddEventHandler("esx:getSharedObject", function(cb)
|
||||
if ESX.IsFunctionReference(cb) then
|
||||
cb(ESX)
|
||||
end
|
||||
end)
|
||||
|
||||
-- backwards compatibility (DO NOT TOUCH !)
|
||||
Config.OxInventory = Config.CustomInventory == "ox"
|
||||
50
resources/[core]/es_extended/shared/modules/math.lua
Normal file
50
resources/[core]/es_extended/shared/modules/math.lua
Normal file
@@ -0,0 +1,50 @@
|
||||
ESX.Math = {}
|
||||
|
||||
---@param value number
|
||||
---@param numDecimalPlaces? number
|
||||
---@return number
|
||||
function ESX.Math.Round(value, numDecimalPlaces)
|
||||
if numDecimalPlaces then
|
||||
local power = 10 ^ numDecimalPlaces
|
||||
return math.floor((value * power) + 0.5) / power
|
||||
else
|
||||
return math.floor(value + 0.5)
|
||||
end
|
||||
end
|
||||
|
||||
-- credit http://richard.warburton.it
|
||||
---@param value number
|
||||
---@return string
|
||||
function ESX.Math.GroupDigits(value)
|
||||
local left, num, right = string.match(value, "^([^%d]*%d)(%d*)(.-)$")
|
||||
|
||||
return left .. (num:reverse():gsub("(%d%d%d)", "%1" .. TranslateCap("locale_digit_grouping_symbol")):reverse()) .. right
|
||||
end
|
||||
|
||||
---@param value string | number
|
||||
---@return string | nil
|
||||
function ESX.Math.Trim(value)
|
||||
value = tostring(value)
|
||||
return (string.gsub(value, "^%s*(.-)%s*$", "%1"))
|
||||
end
|
||||
|
||||
---@param minRange number
|
||||
---@param maxRange number
|
||||
---@return number
|
||||
function ESX.Math.Random(minRange, maxRange)
|
||||
math.randomseed(GetGameTimer())
|
||||
return math.random(minRange or 1, maxRange or 10)
|
||||
end
|
||||
|
||||
---@param origin vector
|
||||
---@param target vector
|
||||
---@return number
|
||||
function ESX.Math.GetHeadingFromCoords(origin, target)
|
||||
local dx = origin.x - target.x
|
||||
local dy = origin.y - target.y
|
||||
|
||||
local heading = math.deg(math.atan(dy, dx)) + 90
|
||||
|
||||
return (heading + 360) % 360
|
||||
end
|
||||
|
||||
241
resources/[core]/es_extended/shared/modules/table.lua
Normal file
241
resources/[core]/es_extended/shared/modules/table.lua
Normal file
@@ -0,0 +1,241 @@
|
||||
ESX.Table = {}
|
||||
|
||||
-- nil proof alternative to #table
|
||||
---@param t table
|
||||
---@return number
|
||||
function ESX.Table.SizeOf(t)
|
||||
local count = 0
|
||||
|
||||
for _, _ in pairs(t) do
|
||||
count = count + 1
|
||||
end
|
||||
|
||||
return count
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@return table
|
||||
function ESX.Table.Set(t)
|
||||
local set = {}
|
||||
for _, v in ipairs(t) do
|
||||
set[v] = true
|
||||
end
|
||||
return set
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param value any
|
||||
---@return number
|
||||
function ESX.Table.IndexOf(t, value)
|
||||
for i = 1, #t, 1 do
|
||||
if t[i] == value then
|
||||
return i
|
||||
end
|
||||
end
|
||||
|
||||
return -1
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param value any
|
||||
---@return number
|
||||
function ESX.Table.LastIndexOf(t, value)
|
||||
for i = #t, 1, -1 do
|
||||
if t[i] == value then
|
||||
return i
|
||||
end
|
||||
end
|
||||
|
||||
return -1
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param cb function
|
||||
---@return any
|
||||
function ESX.Table.Find(t, cb)
|
||||
for i = 1, #t, 1 do
|
||||
if cb(t[i]) then
|
||||
return t[i]
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param cb function
|
||||
---@return number
|
||||
function ESX.Table.FindIndex(t, cb)
|
||||
for i = 1, #t, 1 do
|
||||
if cb(t[i]) then
|
||||
return i
|
||||
end
|
||||
end
|
||||
|
||||
return -1
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param cb function
|
||||
---@return table
|
||||
function ESX.Table.Filter(t, cb)
|
||||
local newTable = {}
|
||||
|
||||
for i = 1, #t, 1 do
|
||||
if cb(t[i]) then
|
||||
newTable[#newTable + 1] = t[i]
|
||||
end
|
||||
end
|
||||
|
||||
return newTable
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param cb function
|
||||
---@return table
|
||||
function ESX.Table.Map(t, cb)
|
||||
local newTable = {}
|
||||
|
||||
for i = 1, #t, 1 do
|
||||
newTable[i] = cb(t[i], i)
|
||||
end
|
||||
|
||||
return newTable
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@return table
|
||||
function ESX.Table.Reverse(t)
|
||||
local newTable = {}
|
||||
|
||||
for i = #t, 1, -1 do
|
||||
table.insert(newTable, t[i])
|
||||
end
|
||||
|
||||
return newTable
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@return table
|
||||
function ESX.Table.Clone(t)
|
||||
if type(t) ~= "table" then
|
||||
return t
|
||||
end
|
||||
|
||||
local meta = getmetatable(t)
|
||||
local target = {}
|
||||
|
||||
for k, v in pairs(t) do
|
||||
if type(v) == "table" then
|
||||
target[k] = ESX.Table.Clone(v)
|
||||
else
|
||||
target[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
setmetatable(target, meta)
|
||||
|
||||
return target
|
||||
end
|
||||
|
||||
---@param t1 table
|
||||
---@param t2 table
|
||||
---@return table
|
||||
function ESX.Table.Concat(t1, t2)
|
||||
local t3 = ESX.Table.Clone(t1)
|
||||
|
||||
for i = 1, #t2, 1 do
|
||||
table.insert(t3, t2[i])
|
||||
end
|
||||
|
||||
return t3
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@param sep string
|
||||
---@return string
|
||||
function ESX.Table.Join(t, sep)
|
||||
local str = ""
|
||||
|
||||
for i = 1, #t, 1 do
|
||||
if i > 1 then
|
||||
str = str .. (sep or ",")
|
||||
end
|
||||
|
||||
str = str .. t[i]
|
||||
end
|
||||
|
||||
return str
|
||||
end
|
||||
|
||||
-- Credits: https://github.com/JonasDev99/qb-garages/blob/b0335d67cb72a6b9ac60f62a87fb3946f5c2f33d/server/main.lua#L5
|
||||
---@param tab table
|
||||
---@param val any
|
||||
---@return boolean
|
||||
function ESX.Table.TableContains(tab, val)
|
||||
if type(val) == "table" then
|
||||
for _, value in pairs(tab) do
|
||||
if ESX.Table.TableContains(val, value) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
else
|
||||
for _, value in pairs(tab) do
|
||||
if value == val then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Credit: https://stackoverflow.com/a/15706820
|
||||
-- Description: sort function for pairs
|
||||
---@param t table
|
||||
---@param order function
|
||||
---@return function
|
||||
function ESX.Table.Sort(t, order)
|
||||
-- collect the keys
|
||||
local keys = {}
|
||||
|
||||
for k, _ in pairs(t) do
|
||||
keys[#keys + 1] = k
|
||||
end
|
||||
|
||||
-- if order function given, sort by it by passing the table and keys a, b,
|
||||
-- otherwise just sort the keys
|
||||
if order then
|
||||
table.sort(keys, function(a, b)
|
||||
return order(t, a, b)
|
||||
end)
|
||||
else
|
||||
table.sort(keys)
|
||||
end
|
||||
|
||||
-- return the iterator function
|
||||
local i = 0
|
||||
|
||||
return function()
|
||||
i = i + 1
|
||||
if keys[i] then
|
||||
return keys[i], t[keys[i]]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@return Array
|
||||
function ESX.Table.ToArray(t)
|
||||
local array = {}
|
||||
for _, v in pairs(t) do
|
||||
array[#array + 1] = v
|
||||
end
|
||||
return array
|
||||
end
|
||||
|
||||
---@param t table
|
||||
---@return table
|
||||
function ESX.Table.Wipe(t)
|
||||
return table.wipe(t)
|
||||
end
|
||||
28
resources/[core]/es_extended/shared/modules/timeout.lua
Normal file
28
resources/[core]/es_extended/shared/modules/timeout.lua
Normal file
@@ -0,0 +1,28 @@
|
||||
local TimeoutCount = 0
|
||||
local CancelledTimeouts = {}
|
||||
|
||||
---@param msec number
|
||||
---@param cb function
|
||||
---@return number
|
||||
ESX.SetTimeout = function(msec, cb)
|
||||
local id <const> = TimeoutCount + 1
|
||||
|
||||
SetTimeout(msec, function()
|
||||
if CancelledTimeouts[id] then
|
||||
CancelledTimeouts[id] = nil
|
||||
return
|
||||
end
|
||||
|
||||
cb()
|
||||
end)
|
||||
|
||||
TimeoutCount = id
|
||||
|
||||
return id
|
||||
end
|
||||
|
||||
---@param id number
|
||||
---@return nil
|
||||
ESX.ClearTimeout = function(id)
|
||||
CancelledTimeouts[id] = true
|
||||
end
|
||||
Reference in New Issue
Block a user