mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 09:18:53 +00:00
Feat: ESX Property 2.0
This commit is contained in:
@@ -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.
|
||||
|
||||
ESX Property - Properties Made Right!
|
||||
Copyright (C) 2022 ESX-Framework
|
||||
|
||||
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:
|
||||
|
||||
esx-legacy Copyright (C) 2015-2022 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>.
|
||||
@@ -0,0 +1,94 @@
|
||||
<h1 align='center'>[ESX] Property</a></h1><p align='center'><b><a href='https://discord.esx-framework.org/'>Discord</a> - <a href='https://esx-framework.org/'>Website</a> - <a href='https://docs.esx-framework.org/legacy/installation'>Documentation</a></b></h5>
|
||||
|
||||
## Features
|
||||
|
||||
* 95 Premade Properties
|
||||
* Dynamic Json Storage
|
||||
* Key Management System
|
||||
* Garage System
|
||||
* Furniture System
|
||||
* Can configure everything in the config
|
||||
* Editing system
|
||||
* Easy to use controls
|
||||
* Furniture Stores
|
||||
* Keymapped quick access menu
|
||||
* Shell / IPL support
|
||||
* Police Raiding
|
||||
* In-Game property Creator
|
||||
* Routing Buckets for instancing
|
||||
* Wardrobe functionality
|
||||
* OX Inventory Support
|
||||
* CCTV Camera System
|
||||
* Night Vision
|
||||
* Cool HUD overlay
|
||||
* ability to zoom in/out
|
||||
* Discord webhook support (copies link to clipboard aswell)
|
||||
* Admin Menu
|
||||
* **EVERY** part of the property can be changed!
|
||||
* Real estate Job Can also access
|
||||
* Real Estate Job
|
||||
* Built in Discord Logs
|
||||
* Highly Configurable
|
||||
|
||||
## Dependencies
|
||||
|
||||
* es_extended
|
||||
* esx_society *for Player Management* *
|
||||
* [OX-inventory](https://github.com/overextended/ox_inventory) *For Property Stashes* *
|
||||
* ESX Context
|
||||
* ESX Notify
|
||||
* ESX Progressbar *for Raiding* *
|
||||
* ESX Datastore *for wardrobe* *
|
||||
* ESX Clotheshop *for wardrobe* *
|
||||
* [k4mb1 Starter Shells](https://www.k4mb1maps.com/package/5015840) *only for shell use* *
|
||||
* [bob74_ipl](https://github.com/Bob74/bob74_ipl) *only for IPL use* *
|
||||
|
||||
> `*` = Optional
|
||||
|
||||
## Create A Property
|
||||
|
||||
* [Menu Preview](https://prnt.sc/Xczb5Fs9xW-t)
|
||||
* Use the command `property:create` while an admin
|
||||
* Set Street Number
|
||||
* Set Price of Property
|
||||
* Select an Interior
|
||||
> Note: To Use the Default Shells, you **NEED** [this Shell Pack](https://www.k4mb1maps.com/package/5015840)
|
||||
|
||||
> [Catagory Selection](https://prnt.sc/3RGaIEVTL6zw)
|
||||
|
||||
> [Interior Selection](https://prnt.sc/za9aOSsuqkce)
|
||||
* Set The Entrance Position
|
||||
> Note: Uses Player`s Current Coordinates
|
||||
|
||||
## Getting Shell Offset
|
||||
|
||||
* To get the spawn Offset of the shell, use [Loaf`s Offset Finder](https://github.com/loaf-scripts/loaf_offsetfinder)
|
||||
|
||||
* To Get the Wardrobe or Storage offset, go inside the Property, goto where u want them to be and then use the `getoffset` command and it will print the offset in F8
|
||||
|
||||
## Admin Menu
|
||||
|
||||
* As an Admin, use the command, `property:admin`
|
||||
* From There, you can select A property
|
||||
* You Can then either `Manage`, `Teleport To Entrance` or `Delete`
|
||||
* Allows you to edit all options and evict users
|
||||
* [Menu Preview](https://prnt.sc/Jpxox2ZcKn9G)
|
||||
* [Menu Preview 2](https://prnt.sc/IbP-ynHgYSMA)
|
||||
|
||||
# Copyright
|
||||
|
||||
ESX Property - Properties Made Right!
|
||||
Copyright (C) 2022 ESX-Framework
|
||||
|
||||
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/>.
|
||||
@@ -0,0 +1,277 @@
|
||||
--[[
|
||||
ESX Property - Properties Made Right!
|
||||
Copyright (C) 2022 ESX-Framework
|
||||
|
||||
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/>.
|
||||
]]
|
||||
function CCTV(PropertyID)
|
||||
DoScreenFadeOut(500)
|
||||
Wait(500)
|
||||
local PlyCoordsBefore = GetEntityCoords(PlayerPedId())
|
||||
local Property = Properties[PropertyID]
|
||||
local CamTakePic = true
|
||||
if Property.cctv.enabled then
|
||||
ESX.TriggerServerCallback("esx_property:CCTV", function(CanCCTV)
|
||||
if CanCCTV then
|
||||
InCCTV = true
|
||||
local NightVision = false
|
||||
local function InstructionButtonMessage(text)
|
||||
BeginTextCommandScaleformString("STRING")
|
||||
AddTextComponentScaleform(text)
|
||||
EndTextCommandScaleformString()
|
||||
end
|
||||
|
||||
local function CreateInstuctionScaleform(scaleform)
|
||||
local scaleform = RequestScaleformMovie(scaleform)
|
||||
while not HasScaleformMovieLoaded(scaleform) do
|
||||
Wait(0)
|
||||
end
|
||||
PushScaleformMovieFunction(scaleform, "CLEAR_ALL")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_CLEAR_SPACE")
|
||||
PushScaleformMovieFunctionParameterInt(200)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
if Config.CCTV.PictureWebook ~= "" then
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(1)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.Screenshot, true))
|
||||
InstructionButtonMessage("Take Picture")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
end
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(2)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.Right, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.Left, true))
|
||||
InstructionButtonMessage("Left/Right")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(3)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.Down, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.Up, true))
|
||||
InstructionButtonMessage("Up/Down")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(4)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.ZoomOut, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.ZoomIn, true))
|
||||
InstructionButtonMessage("Zoom In/Out")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(5)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.NightVision, true))
|
||||
InstructionButtonMessage("Toggle Night Vision")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.Exit, true))
|
||||
InstructionButtonMessage("Exit Camera")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "DRAW_INSTRUCTIONAL_BUTTONS")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_BACKGROUND_COLOUR")
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(80)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
return scaleform
|
||||
end
|
||||
ESX.CloseContext()
|
||||
local cctvcam = nil
|
||||
local angleZ = 0.0
|
||||
ClearFocus()
|
||||
local playerPed = PlayerPedId()
|
||||
cctvcam = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA",
|
||||
vector3(Property.Entrance.x, Property.Entrance.y, Property.Entrance.z + Config.CCTV.HeightAboveDoor), 0, 0, 0, Config.CCTV.FOV)
|
||||
SetCamRot(cctvcam, Property.cctv.rot.x, Property.cctv.rot.y, Property.cctv.rot.z, 2)
|
||||
SetCamActive(cctvcam, true)
|
||||
SetTimecycleModifier("scanline_cam_cheap")
|
||||
TriggerServerEvent("p_instance:s:leave")
|
||||
DisableAllControlActions(0)
|
||||
FreezeEntityPosition(playerPed, true)
|
||||
SetEntityCollision(playerPed, false, true)
|
||||
local ShowButtons = true
|
||||
SetEntityVisible(playerPed, false)
|
||||
SetTimecycleModifierStrength(2.0)
|
||||
SetFocusArea(Property.Entrance.x, Property.Entrance.y, Property.Entrance.z, 0.0, 0.0, 0.0)
|
||||
PointCamAtCoord(cctvcam, vector3(Property.Entrance.x, Property.Entrance.y, Property.Entrance.z + Config.CCTV.HeightAboveDoor))
|
||||
RenderScriptCams(true, false, 1, true, false)
|
||||
Wait(1000)
|
||||
DoScreenFadeIn(500)
|
||||
RequestAmbientAudioBank("Phone_Soundset_Franklin", 0, 0)
|
||||
RequestAmbientAudioBank("HintCamSounds", 0, 0)
|
||||
while IsCamActive(cctvcam) do
|
||||
Wait(5)
|
||||
DisableAllControlActions(0)
|
||||
EnableControlAction(0, 245, true)
|
||||
EnableControlAction(0, 246, true)
|
||||
EnableControlAction(0, 249, true)
|
||||
HideHudComponentThisFrame(7)
|
||||
HideHudComponentThisFrame(8)
|
||||
HideHudComponentThisFrame(9)
|
||||
HideHudComponentThisFrame(6)
|
||||
HideHudComponentThisFrame(19)
|
||||
HideHudAndRadarThisFrame()
|
||||
|
||||
if ShowButtons then
|
||||
local instructions = CreateInstuctionScaleform("instructional_buttons")
|
||||
DrawScaleformMovieFullscreen(instructions, 255, 255, 255, 255, 0)
|
||||
end
|
||||
-- ROTATE LEFT
|
||||
local getCameraRot = GetCamRot(cctvcam, 2)
|
||||
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.Left) and getCameraRot.z < Property.cctv.maxleft then
|
||||
PlaySoundFrontend(-1, " FocusIn", "HintCamSounds", false)
|
||||
SetCamRot(cctvcam, getCameraRot.x, 0.0, getCameraRot.z + Config.CCTV.RotateSpeed, 2)
|
||||
end
|
||||
-- ROTATE RIGHT
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.Right) and getCameraRot.z > Property.cctv.maxright then
|
||||
PlaySoundFrontend(-1, " FocusIn", "HintCamSounds", false)
|
||||
SetCamRot(cctvcam, getCameraRot.x, 0.0, getCameraRot.z - Config.CCTV.RotateSpeed, 2)
|
||||
end
|
||||
|
||||
-- ROTATE UP
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.Up) and getCameraRot.x < Config.CCTV.MaxUpRotation then
|
||||
PlaySoundFrontend(-1, " FocusIn", "HintCamSounds", false)
|
||||
SetCamRot(cctvcam, getCameraRot.x + Config.CCTV.RotateSpeed, 0.0, getCameraRot.z, 2)
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.Down) and getCameraRot.x > Config.CCTV.MaxDownRotation then
|
||||
PlaySoundFrontend(-1, " FocusIn", "HintCamSounds", false)
|
||||
SetCamRot(cctvcam, getCameraRot.x - Config.CCTV.RotateSpeed, 0.0, getCameraRot.z, 2)
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.ZoomIn) and GetCamFov(cctvcam) > Config.CCTV.MaxZoom then
|
||||
SetCamFov(cctvcam, GetCamFov(cctvcam) - 1.0)
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.ZoomOut) and GetCamFov(cctvcam) < Config.CCTV.MinZoom then
|
||||
SetCamFov(cctvcam, GetCamFov(cctvcam) + 1.0)
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.Down) and getCameraRot.x > Config.CCTV.MaxDownRotation then
|
||||
PlaySoundFrontend(-1, " FocusIn", "HintCamSounds", false)
|
||||
SetCamRot(cctvcam, getCameraRot.x - Config.CCTV.RotateSpeed, 0.0, getCameraRot.z, 2)
|
||||
end
|
||||
|
||||
SetTextFont(4)
|
||||
SetTextScale(0.8, 0.8)
|
||||
SetTextColour(255, 255, 255, 255)
|
||||
SetTextDropshadow(0.1, 3, 27, 27, 255)
|
||||
BeginTextCommandDisplayText('STRING')
|
||||
AddTextComponentSubstringPlayerName(Property.setName ~= "" and Property.setName or Property.Name)
|
||||
EndTextCommandDisplayText(0.01, 0.01)
|
||||
|
||||
SetTextFont(4)
|
||||
SetTextScale(0.7, 0.7)
|
||||
SetTextColour(255, 255, 255, 255)
|
||||
SetTextDropshadow(0.1, 3, 27, 27, 255)
|
||||
BeginTextCommandDisplayText('STRING')
|
||||
local year --[[ integer ]] , month --[[ integer ]] , day --[[ integer ]] , hour --[[ integer ]] , minute --[[ integer ]] , second --[[ integer ]] =
|
||||
GetPosixTime()
|
||||
AddTextComponentSubstringPlayerName("" .. day .. "/" .. month .. "/" .. year .. " " .. hour .. ":" .. minute .. ":" .. second)
|
||||
EndTextCommandDisplayText(0.01, 0.055)
|
||||
|
||||
SetTextFont(4)
|
||||
SetTextScale(0.6, 0.6)
|
||||
SetTextColour(255, 255, 255, 255)
|
||||
SetTextDropshadow(0.1, 3, 27, 27, 255)
|
||||
BeginTextCommandDisplayText('STRING')
|
||||
local Zoom = ((Config.CCTV.FOV - GetCamFov(cctvcam)) / GetCamFov(cctvcam)) * 100
|
||||
AddTextComponentSubstringPlayerName("Zoom Level: " .. math.floor(Zoom) .. "%")
|
||||
EndTextCommandDisplayText(0.01, 0.09)
|
||||
|
||||
SetTextFont(4)
|
||||
SetTextScale(0.6, 0.6)
|
||||
SetTextColour(255, 255, 255, 255)
|
||||
SetTextDropshadow(0.1, 3, 27, 27, 255)
|
||||
BeginTextCommandDisplayText('STRING')
|
||||
AddTextComponentSubstringPlayerName(NightVision and "Night Vision: Active" or "CCTV System: Active")
|
||||
EndTextCommandDisplayText(0.01, 0.12)
|
||||
|
||||
if IsDisabledControlPressed(0, Config.CCTV.Controls.Down) and getCameraRot.x > Config.CCTV.MaxDownRotation then
|
||||
PlaySoundFrontend(-1, " FocusIn", "HintCamSounds", false)
|
||||
SetCamRot(cctvcam, getCameraRot.x - Config.CCTV.RotateSpeed, 0.0, getCameraRot.z, 2)
|
||||
end
|
||||
|
||||
if IsDisabledControlJustPressed(0, 38) then
|
||||
NightVision = not NightVision
|
||||
SetNightvision(NightVision)
|
||||
SetTimecycleModifier("scanline_cam")
|
||||
end
|
||||
|
||||
if Config.CCTV.PictureWebook ~= "" and IsDisabledControlJustPressed(0, 201) then
|
||||
if CamTakePic then
|
||||
ShowButtons = false
|
||||
Wait(1)
|
||||
PlaySoundFrontend(-1, "Camera_Shoot", "Phone_Soundset_Franklin", 1)
|
||||
ESX.TriggerServerCallback("esx_property:GetWebhook", function(hook)
|
||||
if hook then
|
||||
exports['screenshot-basic']:requestScreenshotUpload(hook, "files[]", function(data)
|
||||
local image = json.decode(data)
|
||||
print(ESX.DumpTable(image))
|
||||
ESX.ShowNotification("Picture Taken!", "success")
|
||||
SendNUIMessage({link = image.attachments[1].proxy_url})
|
||||
ESX.ShowNotification("Link Copied To ~b~Cipboard", "success")
|
||||
ShowButtons = true
|
||||
CamTakePic = false
|
||||
SetTimeout(5000, function()
|
||||
CamTakePic = true
|
||||
end)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
else
|
||||
ESX.ShowNotification("Please Wait Before taking another ~b~Picture", "error")
|
||||
end
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(1, Config.CCTV.Controls.Exit) then
|
||||
DoScreenFadeOut(1000)
|
||||
ESX.TriggerServerCallback("esx_property:ExitCCTV", function(CanExit)
|
||||
if CanExit then
|
||||
InCCTV = false
|
||||
Wait(1000)
|
||||
ClearFocus()
|
||||
ClearTimecycleModifier()
|
||||
ClearExtraTimecycleModifier()
|
||||
RenderScriptCams(false, false, 0, true, false)
|
||||
DestroyCam(cctvcam, false)
|
||||
SetFocusEntity(playerPed)
|
||||
SetNightvision(false)
|
||||
SetSeethrough(false)
|
||||
SetEntityCollision(playerPed, true, true)
|
||||
FreezeEntityPosition(playerPed, false)
|
||||
SetEntityVisible(playerPed, true)
|
||||
Wait(1500)
|
||||
DoScreenFadeIn(1000)
|
||||
end
|
||||
end, PropertyID)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end, PropertyID)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,407 @@
|
||||
--[[
|
||||
ESX Property - Properties Made Right!
|
||||
Copyright (C) 2022 ESX-Framework
|
||||
|
||||
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/>.
|
||||
]]
|
||||
if Config.Furniture.Enabled then
|
||||
SpawnedFurniture = {}
|
||||
RegisterNetEvent("esx_property:syncFurniture", function(PropertyId, Furniture)
|
||||
if Properties[PropertyId] and Furniture then
|
||||
Properties[PropertyId].furniture = Furniture
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx_property:placeFurniture", function(Id, furniture, findex)
|
||||
if Properties[Id] and InProperty and CurrentId == Id then
|
||||
ESX.Game.SpawnLocalObject(furniture.Name, vector3(furniture.Pos.x, furniture.Pos.y, furniture.Pos.z - 0.1), function(object)
|
||||
SetEntityCoordsNoOffset(object, furniture.Pos.x, furniture.Pos.y, furniture.Pos.z)
|
||||
SetEntityHeading(object, furniture.Heading)
|
||||
SetEntityAsMissionEntity(object, true, true)
|
||||
FreezeEntityPosition(object, true)
|
||||
SpawnedFurniture[findex] = {obj = object, data = furniture}
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx_property:removeFurniture", function(Id, furniture)
|
||||
if Properties[Id] and InProperty and CurrentId == Id then
|
||||
if SpawnedFurniture[furniture] then
|
||||
DeleteEntity(SpawnedFurniture[furniture].obj)
|
||||
SpawnedFurniture[furniture] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent("esx_property:editFurniture", function(Id, furniture, Pos, Heading)
|
||||
if Properties[Id] and InProperty and CurrentId == Id then
|
||||
|
||||
if SpawnedFurniture[furniture] then
|
||||
local obj = SpawnedFurniture[furniture].obj
|
||||
SetEntityCoordsNoOffset(obj, Pos.x, Pos.y, Pos.z)
|
||||
SetEntityHeading(obj, Heading)
|
||||
SpawnedFurniture[furniture].data.Pos = Pos
|
||||
SpawnedFurniture[furniture].data.Heading = Heading
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
------------------------ Furniture Start -------------------------------
|
||||
local inFurniture = false
|
||||
local CurrentlyEditing = nil
|
||||
|
||||
function TempFurniturePlacement(PropertyId, PropName, PropIndex, PropCatagory, PropPrice, Existing, Pos, Heading)
|
||||
ESX.CloseContext()
|
||||
if CurrentlyEditing then
|
||||
DeleteEntity(CurrentlyEditing)
|
||||
CurrentlyEditing = nil
|
||||
end
|
||||
local function InstructionButtonMessage(text)
|
||||
BeginTextCommandScaleformString("STRING")
|
||||
AddTextComponentScaleform(text)
|
||||
EndTextCommandScaleformString()
|
||||
end
|
||||
|
||||
local function CreateInstuctionScaleform(scaleform)
|
||||
local scaleform = RequestScaleformMovie(scaleform)
|
||||
while not HasScaleformMovieLoaded(scaleform) do
|
||||
Wait(0)
|
||||
end
|
||||
PushScaleformMovieFunction(scaleform, "CLEAR_ALL")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_CLEAR_SPACE")
|
||||
PushScaleformMovieFunctionParameterInt(200)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(1)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.MinusX, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.PlusX, true))
|
||||
InstructionButtonMessage("X Axis")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(3)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.MinusY, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.PlusY, true))
|
||||
InstructionButtonMessage("Y axis")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(5)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.Up, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.Down, true))
|
||||
InstructionButtonMessage("Height")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(7)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.RotateLeft, true))
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.RotateRight, true))
|
||||
InstructionButtonMessage("Rotation")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(9)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.Confirm, true))
|
||||
InstructionButtonMessage("Place Furniture")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.Exit, true))
|
||||
InstructionButtonMessage("Delete")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "DRAW_INSTRUCTIONAL_BUTTONS")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(scaleform, "SET_BACKGROUND_COLOUR")
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(80)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
return scaleform
|
||||
end
|
||||
function GetCameraDirection()
|
||||
local rotation = GetGameplayCamRot() * (math.pi / 180)
|
||||
|
||||
return vector3(-math.sin(rotation.z), math.cos(rotation.z), math.sin(rotation.x))
|
||||
end
|
||||
local Position = GetEntityCoords(ESX.PlayerData.ped)
|
||||
local PropSpawn = Position - vector3(0.5, 0.5, 1.0)
|
||||
ESX.Game.SpawnLocalObject(PropName, PropSpawn, function(CurrentlyEditing)
|
||||
CurrentlyEditing = CurrentlyEditing
|
||||
NetworkSetObjectForceStaticBlend(CurrentlyEditing, true)
|
||||
SetEntityAsMissionEntity(CurrentlyEditing, true, true)
|
||||
SetEntityCollision(CurrentlyEditing, false, true)
|
||||
if Existing then
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, vector3(Pos.x, Pos.y, Pos.z))
|
||||
SetEntityHeading(CurrentlyEditing, Heading)
|
||||
else
|
||||
PlaceObjectOnGroundProperly(CurrentlyEditing)
|
||||
end
|
||||
FreezeEntityPosition(CurrentlyEditing, true)
|
||||
while true do
|
||||
HudForceWeaponWheel(false)
|
||||
HideHudComponentThisFrame(19)
|
||||
HideHudComponentThisFrame(20)
|
||||
local CurrentPos = GetEntityCoords(CurrentlyEditing)
|
||||
local CurrentHeading = GetEntityHeading(CurrentlyEditing)
|
||||
local Rotation = GetEntityRotation(CurrentlyEditing, 2)
|
||||
SetEntityDrawOutline(CurrentlyEditing, true)
|
||||
SetEntityDrawOutlineColor(55, 140, 191, 200)
|
||||
SetEntityDrawOutlineShader(1)
|
||||
local instructions = CreateInstuctionScaleform("instructional_buttons")
|
||||
DrawScaleformMovieFullscreen(instructions, 255, 255, 255, 255, 0)
|
||||
Wait(0)
|
||||
if IsControlJustPressed(0, 202) then
|
||||
DeleteObject(CurrentlyEditing)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.MinusY) then
|
||||
local direction = GetCameraDirection()
|
||||
CurrentPos = CurrentPos - vector3(direction.x * Config.Furniture.MovementSpeed, direction.y * Config.Furniture.MovementSpeed, 0)
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, CurrentPos.x, CurrentPos.y, CurrentPos.z)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.PlusY) then
|
||||
local direction = GetCameraDirection()
|
||||
CurrentPos = CurrentPos + vector3(direction.x * Config.Furniture.MovementSpeed, direction.y * Config.Furniture.MovementSpeed, 0)
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, CurrentPos)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.Up) then
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, CurrentPos.x, CurrentPos.y, CurrentPos.z + Config.Furniture.MovementZspeed)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.Down) then
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, CurrentPos.x, CurrentPos.y, CurrentPos.z - Config.Furniture.MovementZspeed)
|
||||
end
|
||||
if IsControlPressed(0, Config.Furniture.Controls.RotateLeft) then
|
||||
CurrentHeading = CurrentHeading + Config.Furniture.RotationSpeed
|
||||
SetEntityRotation(CurrentlyEditing, 0, 0, CurrentHeading, 1, true)
|
||||
-- SetEntityRotation(CurrentlyEditing, Rotation.x, Rotation.y, Rotation.z + Config.Furniture.RotationSpeed, 2, false)
|
||||
-- SetEntityHeading(CurrentlyEditing, CurrentHeading + Config.Furniture.RotationSpeed)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.RotateRight) then
|
||||
CurrentHeading = CurrentHeading - Config.Furniture.RotationSpeed
|
||||
SetEntityRotation(CurrentlyEditing, 0, 0, CurrentHeading, 1, true)
|
||||
-- SetEntityRotation(CurrentlyEditing, Rotation.x, Rotation.y, Rotation.z - Config.Furniture.RotationSpeed, 2, false)
|
||||
-- SetEntityHeading(CurrentlyEditing, CurrentHeading - Config.Furniture.RotationSpeed)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.PlusX) then
|
||||
local direction = GetCameraDirection()
|
||||
CurrentPos = CurrentPos + vector3(-direction.y * Config.Furniture.MovementSpeed, direction.x * Config.Furniture.MovementSpeed, 0)
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, CurrentPos)
|
||||
end
|
||||
|
||||
if IsControlPressed(0, Config.Furniture.Controls.MinusX) then
|
||||
local direction = GetCameraDirection()
|
||||
CurrentPos = CurrentPos - vector3(-direction.y * Config.Furniture.MovementSpeed, direction.x * Config.Furniture.MovementSpeed, 0)
|
||||
SetEntityCoordsNoOffset(CurrentlyEditing, CurrentPos)
|
||||
end
|
||||
|
||||
if IsControlJustPressed(0, Config.Furniture.Controls.Confirm) then
|
||||
if not Existing then
|
||||
ESX.OpenContext("right",
|
||||
{{unslectable = true, title = "Do you want to buy " .. Config.FurnitureCatagories[PropCatagory][PropIndex].title .. "?",
|
||||
description = "Price: $" .. Config.FurnitureCatagories[PropCatagory][PropIndex].price, icon = "fas fa-shopping-cart"},
|
||||
{title = "Yes", value = "buy", icon = "fas fa-check"}, {title = "No", icon = "fas fa-minus"}}, function(menu, element)
|
||||
if element.value and element.value == "buy" then
|
||||
ESX.TriggerServerCallback("esx_property:buyFurniture", function(response)
|
||||
if response then
|
||||
DeleteEntity(CurrentlyEditing)
|
||||
ESX.ShowNotification("You Bought ~b~" .. Config.FurnitureCatagories[PropCatagory][PropIndex].title .. "~s~!", "success")
|
||||
ESX.CloseContext()
|
||||
else
|
||||
ESX.ShowNotification("You ~r~Cannot~s~ Buy This Furniture", "error")
|
||||
end
|
||||
end, CurrentId, PropName, PropIndex, PropCatagory, vector3(CurrentPos.x, CurrentPos.y, CurrentPos.z), CurrentHeading)
|
||||
end
|
||||
end)
|
||||
else
|
||||
ESX.TriggerServerCallback("esx_property:editFurniture", function(response)
|
||||
if response then
|
||||
DeleteEntity(CurrentlyEditing)
|
||||
ESX.ShowNotification("You Edited ~b~" .. Config.FurnitureCatagories[PropCatagory][PropPrice].title .. "~s~!", "success")
|
||||
ESX.CloseContext()
|
||||
else
|
||||
ESX.ShowNotification("You ~r~Cannot~s~ Edit This Furniture", "error")
|
||||
end
|
||||
end, CurrentId, PropIndex, vector3(CurrentPos.x, CurrentPos.y, CurrentPos.z), CurrentHeading)
|
||||
end
|
||||
end
|
||||
|
||||
if DoesEntityExist(CurrentlyEditing) then
|
||||
inFurniture = true
|
||||
else
|
||||
inFurniture = false
|
||||
for _, Control in pairs(Config.Furniture.Controls) do
|
||||
EnableControlAction(0, Control, true)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function FurnitureItems(house, Store, StoreIndex, Catagory)
|
||||
local Items = {{unselectable = true, title = Store .. " Store - " .. Catagory, icon = "fas fa-store"},
|
||||
{title = "Go Back", value = "go-back", icon = "fas fa-arrow-left"}}
|
||||
|
||||
for k, v in pairs(Config.FurnitureCatagories[Catagory]) do
|
||||
table.insert(Items, {title = v.title, value = v.name, index = k, description = "Price: " .. v.price, icon = "fas fa-shopping-cart"})
|
||||
end
|
||||
|
||||
ESX.OpenContext("right", Items, function(data, element)
|
||||
if element.value == "go-back" then
|
||||
FurnitureCatagories(house, Store, StoreIndex)
|
||||
else
|
||||
TempFurniturePlacement(house, element.value, element.index, Catagory)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function FurnitureCatagories(house, Store, StoreIndex)
|
||||
local Catagories = {{unselectable = true, title = Store .. " Store", icon = "fas fa-store"},
|
||||
{title = "Go Back", value = "go-back", icon = "fas fa-arrow-left"}}
|
||||
|
||||
for k, v in pairs(Config.FurnitureStores[StoreIndex].Catagories) do
|
||||
table.insert(Catagories, {title = v})
|
||||
end
|
||||
|
||||
ESX.OpenContext("right", Catagories, function(data, element)
|
||||
if element.value == "go-back" then
|
||||
FurnitureStores(house)
|
||||
else
|
||||
FurnitureItems(house, Store, StoreIndex, element.title)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function FurnitureEdit(propertyId, furniture)
|
||||
local furni = SpawnedFurniture[furniture]
|
||||
local Funiture = Config.FurnitureCatagories[furni.data.Catagory][furni.data.Index]
|
||||
local Catagories = {{unselectable = true, title = "Edit " .. Funiture.title, icon = "fas fa-store"},
|
||||
{title = "Go Back", value = "go-back", icon = "fas fa-arrow-left"},
|
||||
{title = "Move", value = "rotate", icon = "fas fa-sync-alt"}, {title = "Delete", value = "delete", icon = "fas fa-trash-alt"}}
|
||||
|
||||
ESX.OpenContext("right", Catagories, function(data, element)
|
||||
if element.value == "go-back" then
|
||||
FurnitureEditSelect(propertyId)
|
||||
end
|
||||
if element.value == "delete" then
|
||||
ESX.TriggerServerCallback("esx_property:deleteFurniture", function(response)
|
||||
if response then
|
||||
ESX.ShowNotification("You Deleted ~b~" .. Funiture.title .. "~s~!", "success")
|
||||
FurnitureEditSelect(propertyId)
|
||||
else
|
||||
ESX.ShowNotification("You ~r~Cannot~s~ Delete This Furniture", "error")
|
||||
end
|
||||
end, propertyId, furniture)
|
||||
end
|
||||
if element.value == "rotate" then
|
||||
ESX.CloseContext()
|
||||
TempFurniturePlacement(propertyId, furni.data.Name, furniture, furni.data.Catagory, furni.data.Index, true, furni.data.Pos, furni.data.Heading)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function FurnitureEditSelect(propertyId)
|
||||
local Furni = {{unselectable = true, title = "Owned Furniture", icon = "far fa-edit"},
|
||||
{title = "Go Back", value = "go-back", icon = "fas fa-arrow-left"}}
|
||||
|
||||
for k, v in pairs(SpawnedFurniture) do
|
||||
local Funiture = Config.FurnitureCatagories[v.data.Catagory][v.data.Index]
|
||||
table.insert(Furni, {title = Funiture.title, value = k})
|
||||
end
|
||||
|
||||
ESX.OpenContext("right", Furni, function(data, element)
|
||||
if element.value == "go-back" then
|
||||
FurnitureMenu(propertyId)
|
||||
else
|
||||
FurnitureEdit(propertyId, element.value)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function FurnitureStores(house)
|
||||
local Options = {{unselectable = true, title = "Furniture Stores", icon = "fas fa-store"},
|
||||
{title = "Go Back", value = "go-back", icon = "fas fa-arrow-left"}}
|
||||
|
||||
for k, v in pairs(Config.FurnitureStores) do
|
||||
table.insert(Options, {title = v.title, Store = k})
|
||||
end
|
||||
|
||||
ESX.OpenContext("right", Options, function(data, element)
|
||||
if element.Store then
|
||||
FurnitureCatagories(house, element.title, element.Store)
|
||||
elseif element.value == "go-back" then
|
||||
FurnitureMenu(house)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function FurnitureMenu(PropertyId)
|
||||
local Options = {{unselectable = true, title = "Furniture Management", icon = "fas fa-lamp"},
|
||||
{title = "Furniture Shop", description = "Buy Furniture", icon = "fas fa-dollar-sign", value = "store"}}
|
||||
|
||||
if #SpawnedFurniture > 0 then
|
||||
Options[#Options + 1] = {title = "Reset", description = "Clears All Furniture", icon = "fas fa-trash", value = "reset"}
|
||||
Options[#Options + 1] = {title = "Edit", description = "Move and/or Delete furniture items", icon = "fas fa-archive", value = "edit"}
|
||||
|
||||
end
|
||||
ESX.OpenContext("right", Options, function(data, element)
|
||||
if element.value then
|
||||
if element.value == "store" then
|
||||
FurnitureStores(PropertyId)
|
||||
elseif element.value == "edit" then
|
||||
FurnitureEditSelect(PropertyId)
|
||||
elseif element.value == "reset" then
|
||||
ESX.TriggerServerCallback("esx_property:RemoveAllfurniture", function(Removed)
|
||||
if Removed then
|
||||
ESX.ShowNotification("Furniture Reset!", "success")
|
||||
else
|
||||
ESX.ShowNotification("You Cannot Reset This Property!", "error")
|
||||
end
|
||||
end, PropertyId)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ESX.RegisterInput("furniture", "(ESX Property) Open Furniture Menu", "keyboard", "M", function()
|
||||
if InProperty then
|
||||
ESX.TriggerServerCallback('esx_property:CanOpenFurniture', function(Access)
|
||||
if Access then
|
||||
if not inFurniture then
|
||||
FurnitureMenu(CurrentId)
|
||||
else
|
||||
FurnitureStores(CurrentId)
|
||||
end
|
||||
else
|
||||
ESX.ShowNotification("You ~r~Cannot~s~ Access This Menu!", 5000, "error")
|
||||
end
|
||||
end, CurrentId)
|
||||
else
|
||||
return
|
||||
end
|
||||
end)
|
||||
end
|
||||
@@ -0,0 +1,25 @@
|
||||
<!-- Cred: https://github.com/TerbSEC/FiveM-CoordsSaver/tree/master/html -->
|
||||
<html>
|
||||
<head>
|
||||
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
|
||||
</head>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
window.addEventListener("message", function(event) {
|
||||
var node = document.createElement("textarea");
|
||||
var selection = document.getSelection();
|
||||
|
||||
node.textContent = event.data.link;
|
||||
document.body.appendChild(node);
|
||||
|
||||
selection.removeAllRanges();
|
||||
node.select();
|
||||
document.execCommand("copy");
|
||||
|
||||
selection.removeAllRanges();
|
||||
document.body.removeChild(node);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,644 @@
|
||||
Config = {}
|
||||
|
||||
-------- Note: Can Cause quite abit of clutter ---------------
|
||||
Config.ForSaleBlips = false -- Add Blips to For Sale Properties
|
||||
Config.OwnedBlips = true -- Add blips for Owned Properties
|
||||
---------------------------------------------------------------
|
||||
|
||||
--------------------- General Settings ---------------------------------
|
||||
Config.Shells = false -- Enable/Disable Shell Interiors Default: false
|
||||
Config.CanAlwaysExit = true -- Disabling this allows players to be locked in
|
||||
Config.OwnerCanAlwaysEnter = true -- Disabling this means the owner can't enter the property unless door is unlocked
|
||||
Config.MaxNameLength = 20 -- Max Name Length for Owned Properties Default: 20
|
||||
Config.CanCustomiseInventoryAndWardrobePositions = true -- Allow users to customise inventory and wardrobe positions Default: true
|
||||
Config.WipeCustomNameOnSell = true -- Wipe custom name on sell Default: true
|
||||
Config.WipeFurnitureOnSell = true -- Wipe custom name on sell Default: true
|
||||
Config.Raiding = {
|
||||
Enabled = true, -- Enable/Disable Raiding Default: true
|
||||
CanAdminsRaid = true, -- Can Admins Raid Houses Default: true
|
||||
ItemRequired = { -- Item Required to Raid -- Remove To Disable
|
||||
RemoveItem = true, -- Remove Item from Inventory Default: true
|
||||
name = "bread", -- Item Name Default: "bread"
|
||||
label = "Bread", -- Item label Default: "Bread"
|
||||
ItemCount = 1, -- Item Count Default: 1
|
||||
},
|
||||
Animation = {
|
||||
type = "Scenario",
|
||||
Scenario = "WORLD_HUMAN_HAMMERING",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Config.Garage = {
|
||||
Enabled = true, -- Enable/Disable Garage Default: true
|
||||
OwnedVehiclesOnly = true, -- Only allow owned vehicles to be stored Default: true
|
||||
}
|
||||
|
||||
Config.Logs ={
|
||||
Webhook = "",
|
||||
LogLevel = 1
|
||||
|
||||
----------- Log Levels ------------
|
||||
-- 0 = No Logs
|
||||
-- 1 = Logs Major Actions
|
||||
-- 2 = Logs Major + Minor Actions
|
||||
-- 3 = Logs All Actions
|
||||
-------------------------------------
|
||||
}
|
||||
|
||||
Config.Furniture = {
|
||||
Enabled = true,
|
||||
RotationSpeed = 0.4, -- Object Rotation Speed
|
||||
MovementSpeed = 0.01, -- Object Movement Speed
|
||||
MovementZspeed = 0.05, -- Object Z Movement Speed
|
||||
WipeFurnitureOnSell = true, -- Wipe Furniture On Sell Default: true
|
||||
Controls = {
|
||||
PlusX = 174, -- lEFT Arrow
|
||||
MinusX = 175, -- RIGHT Arrow
|
||||
RotateRight = 19, -- Alt,
|
||||
RotateLeft = 21, -- Shift,
|
||||
Up = 96, -- UP Arrow
|
||||
Down = 97, -- DOWN Arrow
|
||||
Confirm = 201, -- ENTER
|
||||
Exit = 194, -- BACKSPACE
|
||||
PlusY = 172, -- SHIFT
|
||||
MinusY = 173, -- SHIFT
|
||||
}
|
||||
}
|
||||
|
||||
Config.CCTV = {
|
||||
Enabled = true,
|
||||
PictureWebook = "", -- Set a discord webhook here to enable taking pictures of the CCTV (link is copied to user`s clipboard)
|
||||
HeightAboveDoor = 2.5, -- Height above the door to place the cctv camera
|
||||
FOV = 80.0, -- Camera Field of View
|
||||
MaxLeftRotation = 80,
|
||||
MaxZoom = 30,
|
||||
MinZoom = 100,
|
||||
MaxRightRotation = -50,
|
||||
MaxUpRotation = 10,
|
||||
MaxDownRotation = -45,
|
||||
RotateSpeed = 0.3, -- Camera Rotation Speed
|
||||
Controls = {
|
||||
Left = 34, -- lEFT Arrow
|
||||
Right = 35, -- RIGHT Arrow
|
||||
Screenshot = 201, -- ENTER
|
||||
NightVision = 38, -- E
|
||||
ZoomIn = 96, -- UP Arrow
|
||||
ZoomOut = 97, -- DOWN Arrow
|
||||
Up = 32, -- UP Arrow
|
||||
Down = 33, -- DOWN Arrow
|
||||
Exit = 194, -- BACKSPACE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-------- Groups allowed to use Admin Functions -------------------
|
||||
Config.AllowedGroups = {
|
||||
-- Note: Superadmin is not a group In ESX
|
||||
"admin"
|
||||
}
|
||||
|
||||
------------------Interacting With Wardrobe Markers ------------------------------
|
||||
Config.WardrobeInteraction = function(PropertyId, Interaction)
|
||||
ESX.TriggerServerCallback('esx_property:getPlayerDressing', function(dressing)
|
||||
local elements = {{unselectable = true, icon = "fas fa-tshirt", title = "Wardrobe"}}
|
||||
|
||||
for i=1, #dressing, 1 do
|
||||
elements[#elements + 1] = {
|
||||
title = dressing[i],
|
||||
value = i
|
||||
}
|
||||
end
|
||||
|
||||
ESX.OpenContext("left", elements, function(menu, element)
|
||||
TriggerEvent('skinchanger:getSkin', function(skin)
|
||||
ESX.TriggerServerCallback('esx_property:getPlayerOutfit', function(clothes)
|
||||
TriggerEvent('skinchanger:loadClothes', skin, clothes)
|
||||
TriggerEvent('esx_skin:setLastSkin', skin)
|
||||
|
||||
TriggerEvent('skinchanger:getSkin', function(skin)
|
||||
TriggerServerEvent('esx_skin:save', skin)
|
||||
end)
|
||||
end, element.value)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
--------------------- Real Estate Settings ----------
|
||||
Config.PlayerManagement = {
|
||||
Enabled = false, -- Enable/Disable Player Management Default: true
|
||||
job = "realestateagent", -- Job Required to Manage Players Default: "realestateagent"
|
||||
joblabel = "Estate Agent", -- Job Label Default: "Estate Agent"
|
||||
society = "society_realestateagent", -- Society Required to Manage Players Default: "society_realestateagent"
|
||||
SalePercentage = 0.25, -- Sale Percentage Default: 0.25 -- Note: This is a percentage of the price of the house
|
||||
jobRanks = {
|
||||
{
|
||||
grade = 0,
|
||||
name = "trainee",
|
||||
label = "Trainee",
|
||||
salary = 15,
|
||||
},
|
||||
{
|
||||
grade = 1,
|
||||
name = "agent",
|
||||
label = "Experienced Agent",
|
||||
salary = 30,
|
||||
},
|
||||
{
|
||||
grade = 2,
|
||||
name = "boss",
|
||||
label = "Chief Agent",
|
||||
salary = 45,
|
||||
},
|
||||
},
|
||||
Permissions = { -- Minimum Grade Required for Action
|
||||
CreateProperty = 0, -- Create Property
|
||||
BillPlayers = 1, -- Send Players A Bill
|
||||
DeleteProperty = 2, -- Delete Property
|
||||
ViewProperties = 0, -- View All Properties
|
||||
SellProperty = 0, -- Sell Property to players
|
||||
ToggleCCTV = 1, -- Change CCTV settings
|
||||
ToggleLock = 0, -- Change Lock Settings
|
||||
ToggleGarage = 1, -- Change Garage Settings
|
||||
SetPropertyName =1, -- Change Property Name
|
||||
RemovePropertyName = 1, -- Remove Property Name
|
||||
SetPropertyPrice = 0, -- Change Property Price
|
||||
ChangeInterior = 1, -- Change Interior
|
||||
ResetFurniture = 0, -- Reset Furniture
|
||||
EvictOwner = 0, -- Evict Owners
|
||||
ChangeEntrance = 0, -- Change Entrance
|
||||
EditInteriorPositions = 1, -- Edit Interior Positions
|
||||
ManagePropertiesFromQuickActions = 1, -- Manage Properties From Quick Actions (F6)
|
||||
},
|
||||
Locations = {
|
||||
Entrance = vector3( -199.151, -575.000, 39.489 ), -- Entrance Location Default: vector3( -199.151, -575.000, 39.489 )
|
||||
Exit = vector3( -141.226, -614.166, 167.820 ), -- Exit Location (Interior Location) Default: vector3( -141.226, -614.166, 167.820 )
|
||||
Properties = vector3(-138.9228, -634.1255, 167.8504), -- Property Management Menu Default: vector3(-138.9228, -634.1255, 167.8504)
|
||||
BossMenu = vector3(-126.0031, -641.1303, 167.8504), -- Boss Menu Default: vector3(-126.0031, -641.1303, 167.8504)
|
||||
}
|
||||
}
|
||||
|
||||
----------------------Long Lists----------------------------------------
|
||||
Config.FurnitureStores = {
|
||||
{
|
||||
title = "Ikea",
|
||||
Catagories = {"Decorations", "Tables", "Sofas", "Bedroom"}
|
||||
},
|
||||
{
|
||||
title = "Electronics Store",
|
||||
Catagories = {"Electronics","Kitchen"}
|
||||
},
|
||||
}
|
||||
|
||||
Config.Interiors = {
|
||||
IPL = {
|
||||
{
|
||||
label = "Modern Apartment",
|
||||
value = "apa_v_mp_h_01_a",
|
||||
positions = {
|
||||
Wardrobe = vec3(-797.72, 328.03, 220.42),
|
||||
Storage = vec3(-795.67, 326.67, 217.037), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-786.8663, 315.7642, 217.6385)
|
||||
},
|
||||
{
|
||||
label = "Mody Apartment",
|
||||
value = "apa_v_mp_h_02_a",
|
||||
positions = {
|
||||
Wardrobe = vec3(-797.591187, 327.995605, 220.424194),
|
||||
Storage = vec3(-795.441772, 326.307678, 217.037354), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-787.0749, 315.8198, 217.6386)
|
||||
},
|
||||
{
|
||||
label = "Vibrant Apartment",
|
||||
value = "apa_v_mp_h_03_a",
|
||||
positions = {
|
||||
Wardrobe = vec3(-798.131897, 328.417572, 220.424194),
|
||||
Storage = vec3(-796.786804, 327.164825, 217.037354),-- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-786.6245, 315.6175, 217.6385)
|
||||
},
|
||||
{
|
||||
label = "Regal Apartment",
|
||||
value = " apa_v_mp_h_07_c",
|
||||
positions = {
|
||||
Wardrobe = vector3(-797.6594, 328.4619, 190.5122),
|
||||
Storage = vector3(-796.0188, 326.7346, 187.3131), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-787.0574, 315.6567, 187.9135)
|
||||
},
|
||||
{
|
||||
label = "Tinsel Towers",
|
||||
value = "tinsel_towers",
|
||||
positions = {
|
||||
Wardrobe = vector3(-594.5938, 55.6803, 96.9996),
|
||||
Storage = vector3(-622.8556, 54.7504, 97.5995), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-603.7109, 59.0251, 98.2002)
|
||||
},
|
||||
{
|
||||
label = "Dell Perro Heights",
|
||||
value = "dell_perro_heights",
|
||||
positions = {
|
||||
Wardrobe = vector3(-1467.2574, -536.9599, 50.7325),
|
||||
Storage = vector3(-1457.0121, -531.0082, 56.9373), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-1449.7212, -526.1263, 56.9290)
|
||||
},
|
||||
{
|
||||
label = "Mid-Tier Apartment",
|
||||
value = "mid-end",
|
||||
positions = {
|
||||
Wardrobe = vector3(350.7425, -994.2987, -99.1472),
|
||||
Storage = vector3(343.8686, -1001.1404, -99.1962), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(346.5085, -1012.7023, -99.1962)
|
||||
},
|
||||
{
|
||||
label = "Low-End Apartment",
|
||||
value = "low-end",
|
||||
positions = {
|
||||
Wardrobe = vector3(259.9943, -1003.4595, -99.0086),
|
||||
Storage = vector3(265.9162, -999.3954, -99.0086), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(266.0285, -1007.4129, -101.0086)
|
||||
},
|
||||
{
|
||||
label = "High-End House 1",
|
||||
value = "wild_oats",
|
||||
positions = {
|
||||
Wardrobe = vector3(-167.4227, 487.7173, 133.0),
|
||||
Storage = vector3(-174.4463, 492.5583, 130.0436), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(-174.3548, 497.7895, 137.6538)
|
||||
},
|
||||
{
|
||||
label = "Clubhouse",
|
||||
value = "bkr_biker_interior_placement_interior_0_biker_dlc_int_01_milo",
|
||||
positions = {
|
||||
Wardrobe = vector3(1116.9374, -3162.8467, -36.8705),
|
||||
Storage = vector3(1112.0820, -3151.4019, -37.5186), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "ipl",
|
||||
pos = vector3(1121.1871, -3152.6177, -37.0628)
|
||||
},
|
||||
},
|
||||
Shells = {
|
||||
{
|
||||
label = "Michael House",
|
||||
value = "shell_michael",
|
||||
positions = {
|
||||
Wardrobe = vector3(-12.71,8.36,-5.8), -- Wardrobe Location
|
||||
Storage = vector3(-177.77,-2.05,-1.44), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(9.290245, -5.563965, 5.053642)
|
||||
},
|
||||
{
|
||||
label = "Standard Motel",
|
||||
value = "standardmotel_shell",
|
||||
positions = {
|
||||
Wardrobe = vector3(-1.435, -4.74, -1.0),
|
||||
Storage = vector3(2.45, -4.37, -1.0), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(0.054924, 2.459473, 1.546776)
|
||||
},
|
||||
{
|
||||
label = "Mid-Tier apartment",
|
||||
value = "furnitured_midapart",
|
||||
positions = {
|
||||
Wardrobe = vector3(-4.5, -18.99, -1.2),
|
||||
Storage = vector3(-5.1, -13.68, -1.2), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(-1.434044, 9.802368, 1.511887)
|
||||
},
|
||||
{
|
||||
label = "Trever`s Trailer",
|
||||
value = "shell_trevor",
|
||||
positions = {
|
||||
Wardrobe = vector3(-0.58, -4.85, -1.0),
|
||||
Storage = vector3(3.02, -1.467, -1.0), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(-0.156189, 3.585266, 1.398056)
|
||||
},
|
||||
{
|
||||
label = "Trailer",
|
||||
value = "shell_trailer",
|
||||
positions = {
|
||||
Wardrobe = vector3(3.8, -2.92, -1.0),
|
||||
Storage = vector3(-5.69, -0.57, -1.12), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(1.282555, 1.713379, 1.469521)
|
||||
},
|
||||
{
|
||||
label = "Low-End Apartment",
|
||||
value = "shell_v16low",
|
||||
positions = {
|
||||
Wardrobe = vector3(7.31, -6.71, -3.0),
|
||||
Storage = vector3(0.61, -8.30, -3.0), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(-4.798767, 6.197479, 2.644226)
|
||||
},
|
||||
{
|
||||
label = "Store",
|
||||
value = "shell_store1",
|
||||
positions = {
|
||||
Storage = vector3(0.03, -8.4, -1.1), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(2.666809, 4.603638, 1.609573)
|
||||
},
|
||||
{
|
||||
label = "Ranch",
|
||||
value = "shell_ranch",
|
||||
positions = {
|
||||
Wardrobe = vector3(-2.78, -10.76, -1.0),
|
||||
Storage = vector3(3.1, 8.04, -1.0), -- Only Works with Ox Inventory
|
||||
},
|
||||
type = "shell",
|
||||
pos = vector3(0.873413, -5.749237, 2.416748)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Config.FurnitureCatagories =
|
||||
{Decorations = {{name = "apa_mp_h_acc_bottle_01", title = "Bottle", price = 700},
|
||||
{name = "apa_mp_h_acc_candles_01", title = "Candles", price = 700},
|
||||
{name = "p_int_jewel_mirror", title = "Mirror", price = 700},
|
||||
{name = "apa_mp_h_acc_dec_plate_01", title = "Decorative Plate", price = 700},
|
||||
{name = "apa_mp_h_acc_vase_01", title = "Vase", price = 700},
|
||||
{name = "v_res_desktidy", title = "Desk Supplies", price = 700},
|
||||
{name = "ex_prop_ashtray_luxe_02", title = "Ashtray", price = 700},
|
||||
{name = "v_res_mp_ashtrayb", title = "Ashtray 2", price = 300},
|
||||
{name = "prop_bong_01", title = "Bong", price = 700},
|
||||
{name = "prop_mr_rasberryclean", title = "Mr Rasberry Clean", price = 700},
|
||||
{name = "prop_acc_guitar_01", title = "Guitar", price = 1000},
|
||||
{name = "p_planning_board_04", title = "Planning Board", price = 500},
|
||||
{name = "prop_hotel_clock_01", title = "Hotel Clock", price = 500},
|
||||
{name = "p_cs_pamphlet_01_s", title = "Pamphlet", price = 700},
|
||||
{name = "prop_big_clock_01", title = "Big Clock", price = 500},
|
||||
{name = "prop_egg_clock_01", title = "Egg Clock", price = 500},
|
||||
{name = "prop_ld_greenscreen_01", title = "Green Screen", price = 100},
|
||||
{name = "prop_dart_bd_cab_01", title = "Dart", price = 500},
|
||||
{name = "prop_dart_bd_01", title = "Dart 2", price = 500},
|
||||
{name = "prop_exercisebike", title = "Exercise Bike", price = 500},
|
||||
{name = "p_laz_j02_s", title = "Laz", price = 500},
|
||||
{name = "v_res_cherubvase", title = "White Vase", price = 500},
|
||||
{name = "v_res_d_paddedwall", title = "Padded Wall", price = 500},
|
||||
{name = "prop_dummy_01", title = "Dummy", price = 100},
|
||||
{name = "prop_el_guitar_01", title = "E Guitar 1", price = 100},
|
||||
{name = "prop_el_guitar_02", title = "E Guitar 2", price = 100},
|
||||
{name = "prop_el_guitar_03", title = "E Guitar 2", price = 100},
|
||||
{name = "prop_ld_greenscreen_01", title = "Green Screen", price = 100},
|
||||
{name = "v_res_mbowlornate", title = "Ornate Bowl", price = 300},
|
||||
{name = "v_res_mbronzvase", title = "Bronze Vase", price = 300},
|
||||
{name = "prop_ceramic_jug_01", title = "Ceramic Jug", price = 100},
|
||||
{name = "v_res_m_candle", title = "Candle Large 1", price = 300},
|
||||
{name = "v_res_m_candlelrg", title = "Candle Large 2", price = 300},
|
||||
{name = "apa_mp_h_acc_candles_06", title = "Candles 1", price = 50},
|
||||
{name = "apa_mp_h_acc_candles_05", title = "Candles 2", price = 50},
|
||||
{name = "apa_mp_h_acc_candles_04", title = "Candles 3", price = 50},
|
||||
{name = "apa_mp_h_acc_rugwools_01", title = "Rug 1", price = 300},
|
||||
{name = "apa_mp_h_acc_rugwoolm_01", title = "Rug 2", price = 300},
|
||||
{name = "apa_mp_h_acc_rugwooll_04", title = "Rug 3", price = 300},
|
||||
{name = "apa_mp_h_acc_rugwooll_03", title = "Rug 4", price = 300},
|
||||
{name = "apa_mp_h_acc_rugwoolm_04", title = "Rug 5", price = 300},
|
||||
{name = "apa_mp_h_acc_rugwools_03", title = "Rug 6", price = 300},
|
||||
{name = "v_res_fh_pouf", title = "Pouf", price = 300},
|
||||
{name = "v_res_fh_sculptmod", title = "Sculpture", price = 300},
|
||||
{name = "prop_ceramic_jug_01", title = "Ceramic Jug", price = 100},
|
||||
{name = "prop_v_5_bclock", title = "Vintage Clock", price = 300},
|
||||
{name = "prop_v_15_cars_clock", title = "American Flag Clock", price = 300},
|
||||
{name = "prop_sm_19_clock", title = "Modern Clock", price = 300},
|
||||
{name = "prop_sports_clock_01", title = "Sports Clock", price = 300},
|
||||
{name = "prop_mem_candle_01", title = "Candle 1", price = 300},
|
||||
{name = "prop_game_clock_01", title = "Crown Clock", price = 300},
|
||||
{name = "prop_game_clock_02", title = "Kronos Clock", price = 300},
|
||||
{name = "prop_id2_20_clock", title = "Modern Clock 2", price = 300},
|
||||
{name = "ex_office_citymodel_01", title = "CIty name", price = 300},
|
||||
{name = "apa_mp_h_acc_dec_head_01", title = "Mask", price = 300},
|
||||
{name = "ex_mp_h_acc_vase_06", title = "Vase 1", price = 300},
|
||||
{name = "ex_mp_h_acc_vase_02", title = "Red Vase", price = 300},
|
||||
{name = "hei_prop_hei_bust_01", title = "Bust", price = 300},
|
||||
{name = "prop_arcade_01", title = "Arcade Machine", price = 300},
|
||||
{price = 6500, name = 'prop_beer_neon_01', title = 'Neon Sign 1'},
|
||||
{price = 6500, name = 'prop_beer_neon_02', title = 'Neon Sign 2'},
|
||||
{price = 6500, name = 'prop_beer_neon_03', title = 'Neon Sign 3'},
|
||||
{price = 6500, name = 'prop_beer_neon_04', title = 'Neon Sign 3'},
|
||||
{price = 6500, name = 'prop_patriotneon', title = 'Neon Sign Patriot'},
|
||||
{price = 6500, name = 'prop_barrachneon', title = 'Neon Sign Pussy Beer'}},
|
||||
Electronics = {{price = 0, title = 'Lamp', name = 'prop_cd_lamp'},
|
||||
{price = 1800, title = 'Shredder', name = 'v_ret_gc_shred'},
|
||||
{price = 800, title = 'Antique telephone', name = 'apa_mp_h_acc_phone_01'},
|
||||
{price = 14700, title = 'TV wall white-gray with electronics', name = 'apa_mp_h_str_avunitl_04'},
|
||||
{price = 6700, title = 'TV wooden wall with television', name = 'apa_mp_h_str_avunitl_01_b'},
|
||||
{price = 14300, title = 'Television with yellow speakers', name = 'apa_mp_h_str_avunitm_01'},
|
||||
{price = 12000, title = 'TV with white speakers', name = 'apa_mp_h_str_avunitm_03'},
|
||||
{price = 12900, title = 'Television with accessories', name = 'apa_mp_h_str_avunits_01'},
|
||||
{price = 6900, title = 'TV on a metal table', name = 'apa_mp_h_str_avunits_01'},
|
||||
{price = 5500, title = 'Notebook', name = 'bkr_prop_clubhouse_laptop_01a'},
|
||||
{price = 4400, title = 'Notebook', name = 'bkr_prop_clubhouse_laptop_01b'},
|
||||
{price = 12400, title = 'Money counter', name = 'bkr_prop_money_counter'},
|
||||
{price = 700, title = 'Large upright fan', name = 'bkr_prop_weed_fan_floor_01a'},
|
||||
{price = 2400, title = 'Tvsmash', name = 'des_tvsmash_start'},
|
||||
{price = 2700, title = 'Wall TV', name = 'ex_prop_ex_tv_flat_01'},
|
||||
{price = 3500, title = 'Desktop monitor with keyboard', name = 'ex_prop_monitor_01_ex'},
|
||||
{price = 4700, title = 'Desktop monitor with keyboard', name = 'ex_prop_trailer_monitor_01'},
|
||||
{price = 200, title = 'TV driver', name = 'ex_prop_tv_settop_remote'},
|
||||
{price = 2200, title = 'TV box', name = 'ex_prop_tv_settop_box'},
|
||||
{price = 1000, title = 'Table fan', name = 'gr_prop_bunker_deskfan_01a'},
|
||||
{price = 8400, title = 'Television with speakers and all equipment', name = 'hei_heist_str_avunitl_03'},
|
||||
{price = 1700, title = 'telephone landline', name = 'hei_prop_hei_bank_phone_01'},
|
||||
{price = 3800, title = 'Alarm', name = 'hei_prop_hei_bio_panel'},
|
||||
{price = 2100, title = 'Keyboard', name = 'hei_prop_hei_cs_keyboard'},
|
||||
{price = 8900, title = 'Project board', name = 'hei_prop_hei_muster_01'},
|
||||
{price = 1800, title = 'WIFI', name = 'hei_prop_server_piece_01'},
|
||||
{price = 3300, title = 'White notebook', name = 'p_laptop_02_s'},
|
||||
{price = 10500, title = 'Safe', name = 'p_v_43_safe_s'},
|
||||
{price = 7900, title = 'Table Hockey', name = 'prop_airhockey_01'},
|
||||
{price = 2400, title = 'Portable Radio', name = 'prop_boombox_01'},
|
||||
{price = 2500, title = 'DVD player', name = 'prop_cctv_cont_03'},
|
||||
{price = 3300, title = 'CD player', name = 'prop_cctv_cont_04'},
|
||||
{price = 900, title = 'PC Mouse', name = 'prop_cs_mouse_01'},
|
||||
{price = 900, title = 'Wall clock', name = 'prop_game_clock_01'},
|
||||
{price = 600, title = 'Wall clock black', name = 'prop_game_clock_02'},
|
||||
{price = 3400, title = 'HiFi system', name = 'prop_hifi_01'},
|
||||
{price = 1500, title = 'square clock', name = 'prop_hotel_clock_01'},
|
||||
{price = 1500, title = 'Clock', name = 'prop_id2_20_clock'},
|
||||
{price = 3400, title = 'Nikon Handheld Camera', name = 'prop_ing_camera_01'},
|
||||
{price = 1700, title = 'White keyboard', name = 'prop_keyboard_01a'},
|
||||
{price = 1600, title = 'Router', name = 'prop_ld_armour'},
|
||||
{price = 1700, title = 'Old monitor', name = 'prop_ld_monitor_01'},
|
||||
{price = 2300, title = 'Small old monitor', name = 'prop_monitor_01b'},
|
||||
{price = 400, title = 'RETRO monitor', name = 'prop_monitor_03b'},
|
||||
{price = 5900, title = 'Monitor', name = 'prop_monitor_w_large'},
|
||||
{price = 4800, title = 'Repráček', name = 'prop_mp3_dock'},
|
||||
{price = 4000, title = 'White PC', name = 'prop_pc_01a'},
|
||||
{price = 4800, title = 'Black PC', name = 'prop_pc_02a'},
|
||||
{price = 2500, title = 'Mobile', name = 'prop_phone_ing'},
|
||||
{price = 2100, title = 'Mobile', name = 'prop_phone_ing_02'},
|
||||
{price = 2000, title = 'Mobile', name = 'prop_phone_ing_02_lod'},
|
||||
{price = 2300, title = 'Mobile', name = 'prop_phone_ing_03'},
|
||||
{price = 1000, title = 'RETRO radio', name = 'prop_radio_01'},
|
||||
{price = 1100, title = 'Small speaker', name = 'prop_speaker_05'},
|
||||
{price = 1000, title = 'Speaker', name = 'prop_speaker_06'},
|
||||
{price = 1900, title = 'Speaker', name = 'prop_speaker_08'},
|
||||
{price = 2000, title = 'Old TV', name = 'prop_trev_tv_01'},
|
||||
{price = 500, title = 'Old TV', name = 'prop_tv_03'},
|
||||
{price = 300, title = 'Old TV', name = 'prop_tv_01'},
|
||||
{price = 400, title = 'RETRO TV', name = 'prop_tv_04'},
|
||||
{price = 1700, title = 'Old TV', name = 'prop_tv_06'},
|
||||
{price = 6500, title = 'Plasma big screen', name = 'prop_tv_flat_01'},
|
||||
{price = 12500, title = 'Plasma thin TV', name = 'prop_tv_flat_01_screen'},
|
||||
{price = 1600, title = 'Plasma small television', name = 'prop_tv_flat_02'},
|
||||
{price = 2100, title = 'Plasma small television', name = 'prop_tv_flat_02b'},
|
||||
{price = 900, title = 'Small TV with stand', name = 'prop_tv_flat_03'},
|
||||
{price = 300, title = 'Small TV on the wall', name = 'prop_tv_flat_03b'},
|
||||
{price = 9200, title = 'Television Michael 50cm', name = 'prop_tv_flat_michael'},
|
||||
{price = 1000, title = 'Little US Clock', name = 'prop_v_15_cars_clock'},
|
||||
{price = 4000, title = 'Professional camera', name = 'prop_v_cam_01'},
|
||||
{price = 4700, title = 'VET player RETRO', name = 'prop_vcr_01'},
|
||||
{price = 9900, title = 'Mixing desk', name = 'v_club_vu_deckcase'},
|
||||
{price = 1500, title = 'RETRO Laptop', name = 'v_ind_ss_laptop'},
|
||||
{price = 2500, title = 'CD seda', name = 'v_res_cdstorage'},
|
||||
{price = 3300, title = 'Ipod', name = 'v_res_ipoddock'},
|
||||
{price = 2800, title = 'Silver Monitor', name = 'v_res_monitorwidelarge'},
|
||||
{price = 2400, title = 'Mouse and as a gift pad', name = 'v_res_mousemat'},
|
||||
{price = 100, title = 'PC Headphones', name = 'v_res_pcheadset'},
|
||||
{price = 1200, title = 'PC speaker', name = 'v_res_pcspeaker'},
|
||||
{price = 5000, title = 'VHS white RETRO player', name = 'v_res_vhsplayer'},
|
||||
{price = 2200, title = 'Vacuum Cleaner', name = 'v_res_vacuum'},
|
||||
{price = 5400, title = 'Shredder', name = 'v_ret_gc_shred'},
|
||||
{price = 100, title = 'Stapler', name = 'v_ret_gc_staple'},
|
||||
{price = 1900, title = 'Hardisk', name = 'xm_prop_x17_harddisk_01a'},
|
||||
{price = 5300, title = 'Computer', name = 'xm_prop_x17_res_pctower'},
|
||||
{price = 12900, title = 'Plasma TV', name = 'xm_prop_x17_tv_flat_01'},
|
||||
{price = 6600, title = 'Plasma TV', name = 'xm_prop_x17_tv_flat_02'},
|
||||
{price = 14000, title = 'Jukebox', name = 'bkr_prop_clubhouse_jukebox_01b'},
|
||||
{price = 1700, title = 'USB', name = 'hei_prop_hst_usb_drive'},
|
||||
{price = 700, title = 'Flashlight', name = 'p_cs_police_torch_s'},
|
||||
{price = 1000, title = 'Mikofon', name = 'p_ing_microphonel_01'},
|
||||
{price = 1600, title = 'Radio', name = 'prop_tapeplayer_01'},
|
||||
{price = 4500, title = 'Multifunction Laser Printer', name = 'prop_printer_01'},
|
||||
{price = 11200, title = 'Multifunction Laser Printer', name = 'prop_printer_02'},
|
||||
{price = 20300, title = 'Jukebox 2', name = 'prop_50s_jukebox'},
|
||||
{price = 21200, title = 'Arcade games', name = 'prop_arcade_01'},
|
||||
{price = 19400, title = 'Safe', name = 'prop_ld_int_safe_01'},
|
||||
{price = 3800, title = 'Astronomical Clock', name = 'prop_v_5_bclock'},
|
||||
{price = 22200, title = 'Table with three monitors', name = 'xm_prop_base_staff_desk_01'},
|
||||
{price = 17900, title = 'Table with three monitors', name = 'xm_prop_base_staff_desk_02'},
|
||||
{price = 1500, title = 'Napkin machine', name = 'prop_handdry_01'},
|
||||
{price = 2700, title = 'Washing Machine', name = 'prop_washer_02'},
|
||||
{price = 600, title = 'Washing machine with its years', name = 'prop_washer_03'},
|
||||
{price = 700, title = 'RETRO washing machine', name = 'v_ret_fh_dryer'}},
|
||||
Tables = {{price = 5600, title = 'Glass table', name = 'apa_mp_h_din_table_04'},
|
||||
{price = 5000, title = 'Glass table', name = 'apa_mp_h_din_table_11'},
|
||||
{price = 5300, title = 'Glass table', name = 'apa_mp_h_tab_sidelrg_07'},
|
||||
{price = 1200, title = 'Black Round Table', name = 'apa_mp_h_tab_sidelrg_04'},
|
||||
{price = 1600, title = 'Glass table', name = 'apa_mp_h_tab_sidelrg_01'},
|
||||
{price = 5700, title = 'Decorative glass table', name = 'apa_mp_h_tab_sidelrg_02'},
|
||||
{price = 2600, title = 'Black coffee table', name = 'apa_mp_h_yacht_coffee_table_01'},
|
||||
{price = 4200, title = 'Square table', name = 'apa_mp_h_yacht_side_table_01'},
|
||||
{price = 3400, title = 'Small table', name = 'gr_dlc_gr_yacht_props_table_01'},
|
||||
{price = 4700, title = 'Long table', name = 'gr_dlc_gr_yacht_props_table_02'},
|
||||
{price = 1000, title = 'Particleboard table', name = 'prop_rub_table_01'},
|
||||
{price = 700, title = 'Particleboard dining table', name = 'prop_rub_table_02'},
|
||||
{price = 700, title = 'TV table', name = 'prop_tv_cabinet_03'},
|
||||
{price = 300, title = 'TV table', name = 'prop_tv_cabinet_04'},
|
||||
{price = 800, title = 'TV table', name = 'prop_tv_cabinet_05'},
|
||||
{price = 5300, title = 'Black modern table', name = 'v_ilev_liconftable_sml'},
|
||||
{price = 4100, title = 'Bar', name = 'xm_prop_lab_desk_01'}},
|
||||
Sofas = {{price = 11500, title = 'Couch with pillows', name = 'prop_couch_01'},
|
||||
{price = 6500, title = 'Padded bench', name = 'prop_wait_bench_01'},
|
||||
{price = 4400, title = 'White leather sofa', name = 'xm_lab_sofa_01'}},
|
||||
Kitchen = {{price = 800, title = 'Kitchen scale', name = 'bkr_prop_coke_scale_01'},
|
||||
{price = 1000, title = 'Home coffee maker', name = 'prop_coffee_mac_02'},
|
||||
{price = 5200, title = 'Automatic juice mixer', name = 'prop_juice_dispenser'},
|
||||
{price = 200, title = 'White wall phone', name = 'prop_office_phone_tnt'},
|
||||
{price = 2300, title = 'Fruit Blender', name = 'p_kitch_juicer_s'},
|
||||
{price = 1500, title = 'Kettle', name = 'prop_kettle_01'},
|
||||
{price = 2600, title = 'Crushing machine', name = 'prop_slush_dispenser'},
|
||||
{price = 700, title = 'Coffee pot', name = 'xm_prop_x17_coffee_jug'},
|
||||
{price = 3700, title = 'Mini bar fridge', name = 'prop_bar_fridge_03'},
|
||||
{price = 800, title = 'Plastic red cup', name = 'apa_prop_cs_plastic_cup_01'},
|
||||
{price = 1000, title = 'Trash', name = 'prop_bin_10a'},
|
||||
{price = 400, title = 'Universal Cleaner', name = 'prop_blox_spray'},
|
||||
{price = 200, title = 'Green bucket', name = 'prop_buck_spade_05'},
|
||||
{price = 400, title = 'Blue bucket', name = 'prop_buck_spade_06'},
|
||||
{price = 200, title = 'Red bucket', name = 'prop_buck_spade_07'},
|
||||
{price = 700, title = 'Cups', name = 'prop_food_cups2'},
|
||||
{price = 400, title = 'White Cup', name = 'prop_mug_02'},
|
||||
{price = 800, title = 'Bowl with donut lid', name = 'v_res_cakedome'},
|
||||
{price = 1000, title = 'Loose tea container', name = 'v_res_fa_pottea'},
|
||||
{price = 300, title = 'Deep Plate', name = 'v_res_mbowl'},
|
||||
{price = 500, title = 'Paper napkins', name = 'v_ret_ta_paproll'},
|
||||
{price = 400, title = 'Glasses', name = 'p_w_grass_gls_s'},
|
||||
{price = 300, title = 'Glasses', name = 'prop_cocktail'},
|
||||
{price = 600, title = 'Knife', name = 'prop_cs_bowie_knife'}},
|
||||
Bedroom = {{price = 3300, title = 'Single bed', name = 'v_res_msonbed'},
|
||||
{price = 100, title = 'Double bed', name = 'p_lestersbed_s'},
|
||||
{price = 600, title = 'Double bed', name = 'p_v_res_tt_bed_s'},
|
||||
{price = 400, title = 'Double modern bed', name = 'apa_mp_h_bed_double_08'},
|
||||
{price = 1100, title = 'Double modern bed', name = 'apa_mp_h_bed_wide_05'},
|
||||
{price = 2200, title = 'Double modern bed', name = 'apa_mp_h_yacht_bed_02'},
|
||||
{price = 700, title = 'Single sofa bed', name = 'ex_prop_exec_bed_01'},
|
||||
{price = 3100, title = 'Double modern bed', name = 'hei_heist_bed_double_08'},
|
||||
{price = 4400, title = 'Chest of drawers', name = 'apa_mp_h_bed_chestdrawer_02'},
|
||||
{price = 400, title = 'RETRO wardrobe', name = 'apa_mp_h_str_shelffloorm_02'},
|
||||
{price = 100, title = 'RETRO chest of drawers low', name = 'apa_mp_h_str_sideboardl_11'},
|
||||
{price = 2500, title = 'Gray-white low cabinet', name = 'apa_mp_h_str_sideboardl_13'},
|
||||
{price = 700, title = 'Wooden chest of drawers', name = 'apa_mp_h_str_sideboardl_14'},
|
||||
{price = 500, title = 'Wood brindle feather duster', name = 'apa_mp_h_str_sideboardm_02'},
|
||||
{price = 900, title = 'Iron open cabinet', name = 'p_cs_locker_01'},
|
||||
{price = 300, title = 'Iron used closed cabinet', name = 'p_cs_locker_01_s'}}}
|
||||
|
||||
|
||||
|
||||
-------------------DONT TOUCH -------------------------
|
||||
Config.OxInventory = ESX.GetConfig().OxInventory --
|
||||
--
|
||||
function GetInteriorValues(Interior) --
|
||||
for _,type in pairs(Config.Interiors) do --
|
||||
for _, interior in pairs(type) do --
|
||||
if interior.value == Interior then --
|
||||
return interior --
|
||||
end --
|
||||
end --
|
||||
end --
|
||||
end --
|
||||
--------------------------------------------------------
|
||||
|
||||
|
||||
--[[
|
||||
ESX Property - Properties Made Right!
|
||||
Copyright (C) 2022 ESX-Framework
|
||||
|
||||
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/>.
|
||||
]]
|
||||
@@ -0,0 +1,51 @@
|
||||
--[[
|
||||
ESX Property - Properties Made Right!
|
||||
Copyright (C) 2022 ESX-Framework
|
||||
|
||||
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/>.
|
||||
]]
|
||||
fx_version 'adamant'
|
||||
|
||||
game 'gta5'
|
||||
lua54 'yes'
|
||||
|
||||
author 'ESX-Framework'
|
||||
description 'Official ESX-Legacy Property System'
|
||||
|
||||
version '1.8.0'
|
||||
|
||||
shared_script '@es_extended/imports.lua'
|
||||
file "client/html/copy.html"
|
||||
ui_page "client/html/copy.html"
|
||||
|
||||
server_scripts {
|
||||
'@oxmysql/lib/MySQL.lua',
|
||||
'@es_extended/locale.lua',
|
||||
'locales/*.lua',
|
||||
'config.lua',
|
||||
'server/*.lua'
|
||||
}
|
||||
|
||||
client_scripts {
|
||||
'@es_extended/locale.lua',
|
||||
'locales/*.lua',
|
||||
'config.lua',
|
||||
'client/cctv.lua',
|
||||
'client/main.lua',
|
||||
'client/furniture.lua'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
'es_extended'
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user