This commit is contained in:
2026-07-07 21:08:52 +02:00
commit 4c20cfc716
2613 changed files with 318021 additions and 0 deletions

View 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>.

View 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/>.

File diff suppressed because it is too large Load Diff

View 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

View 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

View 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)

View 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()

View 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

View 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)

View 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)

View 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)

View 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)

View 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)

View 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)

View 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

View 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

View 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)

View 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');

View 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',
}

View 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;
}

Binary file not shown.

Binary file not shown.

View 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);
});
};
})();

View 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 = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;", "/": "&#x2F;", "`": "&#x60;", "=": "&#x3D;" };
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;
});

View 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));
}
};
})();

View 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>

View 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

View 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
;
});
};

View 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

View 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á",
}

View 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",
}

View 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"] = "μεταλλικό κόκκινο-κίτρινο",
}

View 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",
}

View 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",
}

View 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",
}

View 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",
}

View 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"] = "אדום צהוב מתכתי",
}

View 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",
}

View 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",
}

View 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",
}

View 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",
}

View 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",
}

View 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",
}

View 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",
}

View 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",
}

View 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ıı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"] = "ık Fişeği Tabancası",
["weapon_gadgetpistol"] = "Cihaz Tabancası",
["weapon_heavypistol"] = "ı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"] = "ı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"] = "ır Tüfek",
-- Keskin Nişancı
["weapon_heavysniper"] = "ır Keskin Nişancı",
["weapon_heavysniper_mk2"] = "ı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"] = "ı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"] = "ır Namlu",
["component_ammo_tracer"] = "ı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",
}

View 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"] = "金属红黄色"
}

View File

@@ -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

View File

@@ -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,
}

View 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)

View 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,
}

View 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

View 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 = {}

View 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

View 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

View 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

View File

@@ -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

View File

@@ -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

View 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)

View 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" },
},
}
)

View 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

View 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)

View 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

View 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

View 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
}

View 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,
},
}

View 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")

File diff suppressed because it is too large Load Diff

View 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

View 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"

View 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

View 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

View 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