added new scripts and eup
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. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU 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.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU 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 <https://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:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
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
|
||||
<https://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
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
@@ -0,0 +1,21 @@
|
||||
### 📷 [LX Security] 📷
|
||||
|
||||
[](https://discord.gg/hPcvqtr)
|
||||
<hr>
|
||||
|
||||
**LICENSE:** [Please read the license before using this.]
|
||||
|
||||
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.htm"><img alt="GNU General Public License 3.0" style="border-width:0" src="https://www.gnu.org/graphics/gplv3-127x51.png" /></a><br />
|
||||
|
||||
This work is licensed under a <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html">GNU General Public License 3.0</a>.
|
||||
<hr>
|
||||
|
||||
**Features:**
|
||||
- Camera menu with categories, to view all of the cameras at a specific location.
|
||||
- Aces Support.
|
||||
- Export so you can get the closest camera to you, which can be implemented into other systems, such as dispatch alerts.
|
||||
- Several camera features such as rotating, zooming, and location cycling.
|
||||
- Config options to disable the minimap & your server's HUD when using a camera.
|
||||
|
||||
**Dependencies:**
|
||||
xMenu by Xander1998 - https://github.com/xander1998/xmenu
|
||||
@@ -0,0 +1,159 @@
|
||||
local CameraShakes = {
|
||||
Hand = "HAND_SHAKE",
|
||||
SmallExplosion = "SMALL_EXPLOSION_SHAKE",
|
||||
MediumExplosion = "MEDIUM_EXPLOSION_SHAKE",
|
||||
LargeExplosion = "LARGE_EXPLOSION_SHAKE",
|
||||
Jolt = "JOLT_SHAKE",
|
||||
Vibrate = "VIBRATE_SHAKE",
|
||||
RoadVibration = "ROAD_VIBRATION_SHAKE",
|
||||
Drunk = "DRUNK_SHAKE",
|
||||
SkyDiving = "SKY_DIVING_SHAKE",
|
||||
FamilyDrugTrip = "FAMILYS_DRUG_TRIP_SHAKE",
|
||||
DeathFail = "DEATH_FAIL_IN_EFFECT_SHAKE"
|
||||
}
|
||||
|
||||
Camera = {}
|
||||
Camera.__index = Camera
|
||||
|
||||
function Camera.New()
|
||||
local newCamera = {}
|
||||
setmetatable(newCamera, Camera)
|
||||
|
||||
newCamera.Handle = CreateCam("DEFAULT_SCRIPTED_CAMERA", true)
|
||||
|
||||
return newCamera
|
||||
end
|
||||
|
||||
function Camera:IsActive()
|
||||
return IsCamActive(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:Render(render, ease, time)
|
||||
RenderScriptCams(render, ease, time, 1, 1)
|
||||
end
|
||||
|
||||
function Camera:SetActive(bool)
|
||||
SetCamActive(self.Handle, bool)
|
||||
end
|
||||
|
||||
function Camera:GetPosition()
|
||||
return GetCamCoord(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:SetPosition(pos)
|
||||
SetCamCoord(self.Handle, pos.x, pos.y, pos.z)
|
||||
end
|
||||
|
||||
function Camera:GetRotation()
|
||||
return GetCamRot(self.Handle, 2)
|
||||
end
|
||||
|
||||
function Camera:SetRotation(rot)
|
||||
SetCamRot(self.Handle, rot.x, rot.y, rot.z, 2)
|
||||
end
|
||||
|
||||
function Camera:GetFOV()
|
||||
return GetCamFov(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:SetFOV(fov)
|
||||
SetCamFov(self.Handle, fov)
|
||||
end
|
||||
|
||||
function Camera:GetNearClip()
|
||||
return GetCamNearClip(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:SetNearClip(clip)
|
||||
SetCamNearClip(self.Handle, clip)
|
||||
end
|
||||
|
||||
function Camera:GetFarClip()
|
||||
return GetCamFarClip(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:SetFarClip(clip)
|
||||
SetCamFarClip(self.Handle, clip)
|
||||
end
|
||||
|
||||
function Camera:SetNearDOF(dof)
|
||||
SetCamNearDof(self.Handle, dof)
|
||||
end
|
||||
|
||||
function Camera:GetFarDOF()
|
||||
return GetCamFarDof(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:SetFarDOF(dof)
|
||||
SetCamFarDof(self.Handle, dof)
|
||||
end
|
||||
|
||||
function Camera:SetDOFStrength(strength)
|
||||
SetCamDofStrength(self.Handle, strength)
|
||||
end
|
||||
|
||||
function Camera:SetMotionBlur(strength)
|
||||
SetCamMotionBlurStrength(self.Handle, strength)
|
||||
end
|
||||
|
||||
function Camera:Shake(shakeType, amplitude)
|
||||
local shake = CameraShakes[shakeType]
|
||||
if shake then
|
||||
ShakeCam(self.Handle, shake, amplitude)
|
||||
end
|
||||
end
|
||||
|
||||
function Camera:StopShake()
|
||||
StopCamShaking(self.Handle, true)
|
||||
end
|
||||
|
||||
function Camera:IsShaking()
|
||||
return IsCamShaking(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:SetShakeAmplitude(amplitude)
|
||||
SetCamShakeAmplitude(self.Handle, amplitude)
|
||||
end
|
||||
|
||||
function Camera:PointAtEntity(entity, offset)
|
||||
PointCamAtEntity(self.Handle, entity, offset.x, offset.y, offset.z, true)
|
||||
end
|
||||
|
||||
function Camera:PointAtBone(ped, bone, offset)
|
||||
PointCamAtPedBone(self.Handle, ped, GetPedBoneIndex(ped, bone), offset.x, offset.y, offset.z, true)
|
||||
end
|
||||
|
||||
function Camera:StopPoint()
|
||||
StopCamPointing(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:InterpTo(to, duration, easePos, easeRot)
|
||||
SetCamActiveWithInterp(to, self.Handle, duration, easePos, easeRot)
|
||||
end
|
||||
|
||||
function Camera:IsInterpolating()
|
||||
return IsCamInterpolating(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:AttachToEntity(entity, offset)
|
||||
AttachCamToEntity(self.Handle, entity, offset.x, offset.y, offset.z, true)
|
||||
end
|
||||
|
||||
function Camera:AttachToBone(ped, bone, offset)
|
||||
AttachCamToPedBone(self.Handle, ped, GetPedBoneIndex(ped, bone), offset.x, offset.y, offset.z, true)
|
||||
end
|
||||
|
||||
function Camera:Detach()
|
||||
DetachCam(self.Handle)
|
||||
end
|
||||
|
||||
function Camera:Delete()
|
||||
DestroyCam(self.Handle, false)
|
||||
RenderScriptCams(false, true, 500, true, true)
|
||||
VehicleCamera = nil
|
||||
CreatedCamera = false
|
||||
end
|
||||
|
||||
function Camera:Exists()
|
||||
DoesCamExist(self.Handle)
|
||||
end
|
||||
@@ -0,0 +1,47 @@
|
||||
xMenu = {}
|
||||
xMenu.__index = xMenu
|
||||
|
||||
function xMenu.New(name, color)
|
||||
local newMenu = {}
|
||||
setmetatable(newMenu, xMenu)
|
||||
|
||||
newMenu.Name = name
|
||||
newMenu.Resource = GetCurrentResourceName()
|
||||
newMenu.Handle = exports["xmenu"]:AddMenu(name, newMenu.Resource)
|
||||
newMenu.Color = color
|
||||
|
||||
return newMenu
|
||||
end
|
||||
|
||||
function xMenu:IsAnyMenuOpen()
|
||||
return exports["xmenu"]:IsAnyMenuOpen()
|
||||
end
|
||||
|
||||
function xMenu:OpenMenu()
|
||||
exports["xmenu"]:OpenMenu(self.Handle, self.Color)
|
||||
end
|
||||
|
||||
function xMenu:CloseMenu()
|
||||
exports["xmenu"]:CloseMenu()
|
||||
end
|
||||
|
||||
function xMenu:BindSubMenu(name)
|
||||
local newHandle = exports["xmenu"]:AddSubMenu(name, self.Handle, self.Resource)
|
||||
return xSubMenu.New(name, newHandle)
|
||||
end
|
||||
|
||||
function xMenu:BindButton(name, callback)
|
||||
exports["xmenu"]:AddButton(name, self.Handle, callback, self.Resource)
|
||||
end
|
||||
|
||||
function xMenu:BindCheckbox(name, callback)
|
||||
exports["xmenu"]:AddCheckbox(name, self.Handle, callback, self.Resource)
|
||||
end
|
||||
|
||||
function xMenu:BindList(name, list, callback)
|
||||
exports["xmenu"]:AddList(name, self.Handle, list, callback, self.Resource)
|
||||
end
|
||||
|
||||
function xMenu:ClearMenu()
|
||||
exports["xmenu"]:ClearMenu(self.Handle)
|
||||
end
|
||||
@@ -0,0 +1,30 @@
|
||||
xSubMenu = {}
|
||||
xSubMenu.__index = xMenu
|
||||
|
||||
function xSubMenu.New(name, handle)
|
||||
local newMenu = {}
|
||||
setmetatable(newMenu, xMenu)
|
||||
|
||||
newMenu.Name = name
|
||||
newMenu.Handle = handle
|
||||
newMenu.Resource = GetCurrentResourceName()
|
||||
|
||||
return newMenu
|
||||
end
|
||||
|
||||
function xSubMenu:BindSubMenu(name)
|
||||
local newHandle = exports["xmenu"]:AddSubMenu(name, self.Handle, self.Resource)
|
||||
return xSubMenu.New(name, newHandle)
|
||||
end
|
||||
|
||||
function xMenu:BindButton(name, callback)
|
||||
exports["xmenu"]:AddButton(name, self.Handle, callback, self.Resource)
|
||||
end
|
||||
|
||||
function xMenu:BindCheckbox(name, callback)
|
||||
exports["xmenu"]:AddCheckbox(name, self.Handle, callback, self.Resource)
|
||||
end
|
||||
|
||||
function xMenu:BindList(name, list, callback)
|
||||
exports["xmenu"]:AddList(name, self.Handle, list, callback, self.Resource)
|
||||
end
|
||||
@@ -0,0 +1,173 @@
|
||||
Utils = {}
|
||||
|
||||
function Utils.GenerateUUID()
|
||||
local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
|
||||
return string.gsub(template, '[xy]', function (c)
|
||||
local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
|
||||
return string.format('%x', v)
|
||||
end)
|
||||
end
|
||||
|
||||
function Utils.RequestCamera(name, camera)
|
||||
if CCTV_Config.HideRadar then
|
||||
DisplayRadar(false)
|
||||
end
|
||||
|
||||
if CCTV_Config.HideHUD then
|
||||
Utils.ToggleHUD(true)
|
||||
end
|
||||
|
||||
camNumber = tonumber(camera)
|
||||
if inCam then
|
||||
inCam = false
|
||||
PlaySoundFrontend(-1, "HACKING_SUCCESS", false)
|
||||
Wait(250)
|
||||
ClearPedTasks(PlayerPedId())
|
||||
else
|
||||
if camNumber > 0 and camNumber < #CCTV_Config.Cameras + 1 then
|
||||
exports["xmenu"]:CloseMenu()
|
||||
PlaySoundFrontend(-1, "HACKING_SUCCESS", false)
|
||||
Utils.UseCamera(name, camNumber)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Utils.ChangeCamera(name, camera)
|
||||
changedCamera = true
|
||||
RenderScriptCams(false, false, 0, 1, 0)
|
||||
DestroyCam(cctvCam, false)
|
||||
camNumber = tonumber(camera)
|
||||
Utils.UseCamera(name, camera)
|
||||
end
|
||||
|
||||
function Utils.UseCamera(locationName, cameraUsed)
|
||||
camFov = 110.0
|
||||
local location = nil
|
||||
for k, v in pairs(CCTV_Config.Cameras) do
|
||||
if locationName == v.name and cameraUsed == v.camera then
|
||||
location = v.location
|
||||
currentCamIndex = k
|
||||
end
|
||||
end
|
||||
|
||||
if not inCam then
|
||||
cameraScaleform = RequestScaleformMovie("TRAFFIC_CAM") -- Traffic Cam UI Header
|
||||
while not HasScaleformMovieLoaded(cameraScaleform) do
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
PushScaleformMovieFunction(cameraScaleform, "PLAY_CAM_MOVIE")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
scaleformState = "LOADED_SCALEFORM"
|
||||
end
|
||||
|
||||
cctvCam = CreateCam("DEFAULT_SCRIPTED_CAMERA", true)
|
||||
SetCamCoord(cctvCam, location.x, location.y, location.z + 1.2)
|
||||
SetCamRot(cctvCam, -15.0,0.0, location.w)
|
||||
SetCamFov(cctvCam, camFov)
|
||||
RenderScriptCams(true, false, 0, 1, 0)
|
||||
SetFocusArea(location.x, location.y, location.z, 0.0, 0.0, 0.0)
|
||||
inCam = true
|
||||
if not changedCamera then
|
||||
Wait(3000) -- Wait until scaleform has loaded fully and you can use the camera
|
||||
scaleformState = "CAMERA_READY"
|
||||
end
|
||||
end
|
||||
|
||||
function Utils.CloseCamera()
|
||||
DestroyCam(cctvCam, false)
|
||||
RenderScriptCams(false, false, 0, 1, 0)
|
||||
ClearFocus()
|
||||
ClearTimecycleModifier()
|
||||
SetScaleformMovieAsNoLongerNeeded(cameraScaleform)
|
||||
SetScaleformMovieAsNoLongerNeeded(controlsScaleform)
|
||||
SetNightvision(false)
|
||||
SetSeethrough(false)
|
||||
cctvCam = 0
|
||||
cameraScaleform = nil
|
||||
controlsScaleform = nil
|
||||
currentCamIndex = 0
|
||||
inCam = false
|
||||
scaleformState = "UNLOADED"
|
||||
changedCamera = false
|
||||
end
|
||||
|
||||
function Utils.GetCamAmountByName(buildingName)
|
||||
local cameraCount = 0
|
||||
for k, v in pairs(CCTV_Config.Cameras) do
|
||||
if v.name == buildingName then
|
||||
cameraCount = cameraCount + 1
|
||||
end
|
||||
end
|
||||
return cameraCount
|
||||
end
|
||||
|
||||
function Utils.CreateInstructions(passedScaleform, buttonsMessages)
|
||||
local tempScaleform = RequestScaleformMovie(passedScaleform)
|
||||
while not HasScaleformMovieLoaded(tempScaleform) do
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
PushScaleformMovieFunction(tempScaleform, "CLEAR_ALL")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(tempScaleform, "SET_CLEAR_SPACE")
|
||||
PushScaleformMovieFunctionParameterInt(200)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
local buttonCount = 0
|
||||
for k, v in pairs(buttonsMessages) do
|
||||
PushScaleformMovieFunction(tempScaleform, "SET_DATA_SLOT")
|
||||
PushScaleformMovieFunctionParameterInt(buttonCount)
|
||||
Button(GetControlInstructionalButton(2, v.button, true))
|
||||
ButtonMessage(v.name)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
buttonCount = buttonCount + 1
|
||||
end
|
||||
|
||||
PushScaleformMovieFunction(tempScaleform, "DRAW_INSTRUCTIONAL_BUTTONS")
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
PushScaleformMovieFunction(tempScaleform, "SET_BACKGROUND_COLOUR")
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(0)
|
||||
PushScaleformMovieFunctionParameterInt(70)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
|
||||
return tempScaleform
|
||||
end
|
||||
|
||||
function ButtonMessage(text)
|
||||
BeginTextCommandScaleformString("STRING")
|
||||
AddTextComponentScaleform(text)
|
||||
EndTextCommandScaleformString()
|
||||
end
|
||||
|
||||
function Button(ControlButton)
|
||||
N_0xe83a3e3557a56640(ControlButton)
|
||||
end
|
||||
|
||||
Utils.ToggleHUD = function(toggledHud)
|
||||
if toggledHud then
|
||||
-- toggle it here
|
||||
else
|
||||
-- turn it off here
|
||||
end
|
||||
end
|
||||
|
||||
Utils.HasPermission = function()
|
||||
if CCTV_Config.UseAces then
|
||||
return hasPermission
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
Utils.Notification = function(msg, flash, saveToBrief, hudColorIndex)
|
||||
local notify = GetCurrentResourceName()..':notification'
|
||||
AddTextEntry(notify, msg)
|
||||
BeginTextCommandThefeedPost(notify)
|
||||
if hudColorIndex then ThefeedNextPostBackgroundColor(hudColorIndex) end
|
||||
EndTextCommandThefeedPostTicker(flash or false, saveToBrief or true)
|
||||
|
||||
msg, hudColorIndex, flash, saveToBrief, notify = nil, nil, nil, nil, nil
|
||||
end
|
||||
@@ -0,0 +1,35 @@
|
||||
-- Variables
|
||||
local firstSpawn = false
|
||||
hasPermission = false
|
||||
|
||||
-- Events
|
||||
AddEventHandler("onClientResourceStart", function(resourceName) -- When the resource is restarted, run this to get player permissions.
|
||||
if GetCurrentResourceName() == resourceName then
|
||||
if CCTV_Config.UseAces then
|
||||
TriggerServerEvent("LX_Security_Server:GetPermissions")
|
||||
end
|
||||
|
||||
Utils.Notification("[~y~LX Security Loaded~w~]\n\nCreated By ~g~Luceefer#9955~w~!")
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler("playerSpawned", function() -- When you first spawn in, run this to get player permissions.
|
||||
if not firstSpawn then
|
||||
if CCTV_Config.UseAces then
|
||||
TriggerServerEvent("LX_Security_Server:GetPermissions")
|
||||
end
|
||||
|
||||
firstSpawn = true
|
||||
Utils.Notification("[~y~LX Security Loaded~w~]\n\nCreated By ~g~Luceefer#9955~w~!")
|
||||
end
|
||||
end)
|
||||
|
||||
-- Threads
|
||||
CreateThread(function()
|
||||
if CCTV_Config.UseAces then
|
||||
RegisterNetEvent("LX_Security_Client:SetPermission")
|
||||
AddEventHandler("LX_Security_Client:SetPermission", function(hasPerms) -- Set your permission on the client.
|
||||
hasPermission = hasPerms
|
||||
end)
|
||||
end
|
||||
end)
|
||||
@@ -0,0 +1,245 @@
|
||||
local selectedLocation = nil
|
||||
local selectedCamera = nil
|
||||
AddedLocations = {}
|
||||
scaleformState = "UNLOADED"
|
||||
changedCamera = false
|
||||
|
||||
-- Commands
|
||||
RegisterCommand("cctv", function(source, args, raw)
|
||||
local ped = PlayerPedId()
|
||||
if Utils.HasPermission() then
|
||||
AddedLocations = {}
|
||||
local CameraMenu = xMenu.New("San Andreas CCTV Systems")
|
||||
local GenStoreMenu = CameraMenu:BindSubMenu("General Stores")
|
||||
local HwyMenu = CameraMenu:BindSubMenu("Traffic Cameras")
|
||||
local EntertainmentMenu = CameraMenu:BindSubMenu("Entertainment")
|
||||
local BankMenu = CameraMenu:BindSubMenu("Banks")
|
||||
local HospitalMenu = CameraMenu:BindSubMenu("Hospitals")
|
||||
local PoliceStationsMenu = CameraMenu:BindSubMenu("Police Stations")
|
||||
|
||||
for k, v in pairs(CCTV_Config.Cameras) do
|
||||
if v.type == "General Stores" then
|
||||
if AddedLocations[v.name] == nil then
|
||||
AddedLocations[v.name] = GenStoreMenu:BindSubMenu(v.name)
|
||||
end
|
||||
|
||||
if AddedLocations[v.name] then
|
||||
AddedLocations[v.name]:BindButton(v.name .. " #" .. v.camera, function()
|
||||
selectedLocation = v.name
|
||||
selectedCamera = v.camera
|
||||
currentCamIndex = k
|
||||
Utils.RequestCamera(v.name, v.camera)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if v.type == "Traffic Cameras" then
|
||||
if AddedLocations[v.name] == nil then
|
||||
AddedLocations[v.name] = HwyMenu:BindSubMenu(v.name)
|
||||
end
|
||||
|
||||
if AddedLocations[v.name] then
|
||||
AddedLocations[v.name]:BindButton(v.name .. " #" .. v.camera, function()
|
||||
selectedLocation = v.name
|
||||
selectedCamera = v.camera
|
||||
currentCamIndex = k
|
||||
Utils.RequestCamera(v.name, v.camera)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if v.type == "Entertainment" then
|
||||
if AddedLocations[v.name] == nil then
|
||||
AddedLocations[v.name] = EntertainmentMenu:BindSubMenu(v.name)
|
||||
end
|
||||
|
||||
if AddedLocations[v.name] then
|
||||
AddedLocations[v.name]:BindButton(v.name .. " #" .. v.camera, function()
|
||||
selectedLocation = v.name
|
||||
selectedCamera = v.camera
|
||||
currentCamIndex = k
|
||||
Utils.RequestCamera(v.name, v.camera)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if v.type == "Banks" then
|
||||
if AddedLocations[v.name] == nil then
|
||||
AddedLocations[v.name] = BankMenu:BindSubMenu(v.name)
|
||||
end
|
||||
|
||||
if AddedLocations[v.name] then
|
||||
AddedLocations[v.name]:BindButton(v.name .. " #" .. v.camera, function()
|
||||
selectedLocation = v.name
|
||||
selectedCamera = v.camera
|
||||
currentCamIndex = k
|
||||
Utils.RequestCamera(v.name, v.camera)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if v.type == "Hospitals" then
|
||||
if AddedLocations[v.name] == nil then
|
||||
AddedLocations[v.name] = HospitalMenu:BindSubMenu(v.name)
|
||||
end
|
||||
|
||||
if AddedLocations[v.name] then
|
||||
AddedLocations[v.name]:BindButton(v.name .. " #" .. v.camera, function()
|
||||
selectedLocation = v.name
|
||||
selectedCamera = v.camera
|
||||
currentCamIndex = k
|
||||
Utils.RequestCamera(v.name, v.camera)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
if v.type == "Police Stations" then
|
||||
if AddedLocations[v.name] == nil then
|
||||
AddedLocations[v.name] = PoliceStationsMenu:BindSubMenu(v.name)
|
||||
end
|
||||
|
||||
if AddedLocations[v.name] then
|
||||
AddedLocations[v.name]:BindButton(v.name .. " #" .. v.camera, function()
|
||||
selectedLocation = v.name
|
||||
selectedCamera = v.camera
|
||||
currentCamIndex = k
|
||||
Utils.RequestCamera(v.name, v.camera)
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
CameraMenu:OpenMenu()
|
||||
else
|
||||
if CCTV_Config.ShowNoPerms then
|
||||
Utils.Notification("[~y~LX Security~w~]\n\n~r~You don't have permission to do this")
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
currentCamIndex = 0
|
||||
switchingCam = false
|
||||
inCam = false
|
||||
cctvCam = 0
|
||||
cameraScaleform = nil
|
||||
controlsScaleform = nil
|
||||
camFov = 110.0
|
||||
local drawnControls = false
|
||||
|
||||
Citizen.CreateThread(function ()
|
||||
while true do
|
||||
Wait(0)
|
||||
|
||||
if inCam then
|
||||
|
||||
if IsDisabledControlJustPressed(0, 194) then -- Backspace
|
||||
Utils.CloseCamera()
|
||||
AddedLocations = {}
|
||||
if CCTV_Config.HideRadar then
|
||||
DisplayRadar(true)
|
||||
end
|
||||
|
||||
if CCTV_Config.HideHUD then
|
||||
Utils.ToggleHUD(true)
|
||||
end
|
||||
end
|
||||
|
||||
if currentCamIndex > 0 then
|
||||
if CCTV_Config.Cameras[currentCamIndex].canRotate then
|
||||
local rotation = GetCamRot(cctvCam, 2)
|
||||
|
||||
if IsDisabledControlPressed(1, 108) then -- Num 4 (Rotate Left)
|
||||
SetCamRot(cctvCam, rotation.x, 0.0, rotation.z + 0.3, 2)
|
||||
--end
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(1, 107) then -- Num 6 (Rotate Right)
|
||||
SetCamRot(cctvCam, rotation.x, 0.0, rotation.z - 0.3, 2)
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(1, 111) then -- Num 8 (Up)
|
||||
if rotation.x <= 0.0 then
|
||||
SetCamRot(cctvCam, rotation.x + 0.3, 0.0, rotation.z, 2)
|
||||
end
|
||||
end
|
||||
|
||||
if IsDisabledControlPressed(1, 110) then -- Num 5 (Down)
|
||||
if rotation.x <= 50.0 and rotation.x >= -88.0 then
|
||||
SetCamRot(cctvCam, rotation.x - 0.3, 0.0, rotation.z, 2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if IsDisabledControlJustPressed(0, 175) then -- Next Camera
|
||||
switchingCam = true
|
||||
local AMOUNT_OF_CAMERAS = Utils.GetCamAmountByName(AddedLocations[selectedLocation].Name)
|
||||
if selectedCamera + 1 > AMOUNT_OF_CAMERAS then
|
||||
selectedCamera = 1
|
||||
else
|
||||
selectedCamera = selectedCamera + 1
|
||||
end
|
||||
|
||||
Utils.ChangeCamera(selectedLocation, selectedCamera)
|
||||
end
|
||||
|
||||
if IsDisabledControlJustPressed(0, 174) then -- Previous Camera
|
||||
switchingCam = true
|
||||
local AMOUNT_OF_CAMERAS = Utils.GetCamAmountByName(AddedLocations[selectedLocation].Name)
|
||||
if selectedCamera - 1 <= 0 then
|
||||
selectedCamera = AMOUNT_OF_CAMERAS
|
||||
else
|
||||
selectedCamera = selectedCamera - 1
|
||||
end
|
||||
|
||||
Utils.ChangeCamera(selectedLocation, selectedCamera)
|
||||
end
|
||||
|
||||
if IsDisabledControlJustPressed(0, 241) then -- Zoom In
|
||||
if camFov > -1.0 then
|
||||
camFov = camFov - 3.0
|
||||
SetCamFov(cctvCam, camFov)
|
||||
end
|
||||
end
|
||||
|
||||
if IsDisabledControlJustPressed(0, 242) then -- Zoom Out
|
||||
if camFov < 110.0 then
|
||||
camFov = camFov + 3.0
|
||||
SetCamFov(cctvCam, camFov)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Handle Camera Scaleform and Timecycle
|
||||
if inCam then
|
||||
local location = CCTV_Config.Cameras[currentCamIndex].location
|
||||
SetTimecycleModifier(CCTV_Config.TimecycleTypes[CCTV_Config.Cameras[currentCamIndex].cameraType])
|
||||
SetTimecycleModifierStrength(1.0)
|
||||
PushScaleformMovieFunction(cameraScaleform, "SET_ALT_FOV_HEADING")
|
||||
-- PushScaleformMovieFunctionParameterFloat(GetEntityCoords(location.w).z)
|
||||
PushScaleformMovieFunctionParameterFloat(location.w)
|
||||
PushScaleformMovieFunctionParameterFloat(1.0)
|
||||
PushScaleformMovieFunctionParameterFloat(GetCamRot(cctvCam, 2).z)
|
||||
PopScaleformMovieFunctionVoid()
|
||||
DrawScaleformMovieFullscreen(cameraScaleform, 255, 255, 255, 255)
|
||||
DisableAllControlActions(0)
|
||||
end
|
||||
|
||||
-- Handle Controls Scaleform
|
||||
if inCam and scaleformState == "CAMERA_READY" then
|
||||
local buttonsMessage = {
|
||||
{name = "Exit", button = 194},
|
||||
{name = "Previous Camera", button = 174},
|
||||
{name = "Next Camera", button = 175},
|
||||
{name = "Zoom Out", button = 242},
|
||||
{name = "Zoom In", button = 241},
|
||||
{name = "Down", button = 112},
|
||||
{name = "Up", button = 111},
|
||||
{name = "Right", button = 109},
|
||||
{name = "Left", button = 108}
|
||||
}
|
||||
controlsScaleform = Utils.CreateInstructions("instructional_buttons", buttonsMessage)
|
||||
DrawScaleformMovieFullscreen(controlsScaleform, 255, 255, 255, 255, 0)
|
||||
end
|
||||
end
|
||||
end)
|
||||
@@ -0,0 +1,24 @@
|
||||
-- Get Closest Camera
|
||||
function GetClosestCam(ped)
|
||||
local closest, closestDist
|
||||
if ped == nil then
|
||||
ped = PlayerPedId()
|
||||
end
|
||||
|
||||
local pedCoords = GetEntityCoords(ped, false)
|
||||
|
||||
for k, v in pairs(CCTV_Config.Cameras) do
|
||||
local camCoords = v.location
|
||||
local dist = GetDistanceBetweenCoords(pedCoords, camCoords, false) -- False means not to use the Z coord
|
||||
if not closestDist or dist < closestDist then
|
||||
closest = v.name
|
||||
closestDist = dist
|
||||
end
|
||||
end
|
||||
|
||||
if closest then
|
||||
return closest
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,21 @@
|
||||
-- Manifest data
|
||||
fx_version "adamant"
|
||||
game "gta5"
|
||||
|
||||
-- Resource Information
|
||||
description "A security system to help you monitor all criminal activity in your server. // Modified by PhantomProductions"
|
||||
version "v1.0.0"
|
||||
url "https://github.com/aka-lucifer/lx_security"
|
||||
|
||||
-- Resource Data
|
||||
shared_script"shared/shared.lua"
|
||||
|
||||
client_scripts {
|
||||
"client/classes/*.lua",
|
||||
"client/managers/*.lua",
|
||||
"client/*.lua",
|
||||
}
|
||||
|
||||
server_script "server/main.lua"
|
||||
|
||||
export "GetClosestCam"
|
||||
@@ -0,0 +1,6 @@
|
||||
-- Events
|
||||
RegisterNetEvent("LX_Security_Server:GetPermissions")
|
||||
AddEventHandler("LX_Security_Server:GetPermissions", function()
|
||||
local src = source
|
||||
TriggerClientEvent("LX_Security_Client:SetPermission", src, IsPlayerAceAllowed(src, "lx-security"))
|
||||
end)
|
||||
@@ -0,0 +1,358 @@
|
||||
CCTV_Config = {}
|
||||
|
||||
CCTV_Config.HideRadar = true -- Controls if the minimap will be disabled when in a camera.
|
||||
CCTV_Config.HideHUD = true -- Controls if the HUD will be disabled when in a camera. (Reference Utils.ToggleHUD() in Utils.lua)
|
||||
|
||||
CCTV_Config.UseAces = false -- Controls if you're using default permissions or not
|
||||
|
||||
CCTV_Config.ShowNoPerms = true -- Controls whether or not to display the no permissions error
|
||||
|
||||
CCTV_Config.Cameras = { -- All of the logged cameras
|
||||
{location = vector4(34.12, -1348.48, 30.5, 59.20), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Innocence Boulevard)", camera = 1},
|
||||
{location = vector4(24.22, -1342.64, 30.5, 235.62), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Innocence Boulevard)", camera = 2},
|
||||
{location = vector4(30.99, -1341.13, 30.52, 49.42), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Innocence Boulevard)", camera = 3},
|
||||
{location = vector4(381.34, 323.01, 104.69, 34.69), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Clinton Avenue)", camera = 1},
|
||||
{location = vector4(373.53, 331.02, 104.69, 209.73), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Clinton Avenue)", camera = 2},
|
||||
{location = vector4(380.57, 330.62, 104.69, 32.19), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Clinton Avenue)", camera = 3},
|
||||
{location = vector4(2558.81, 390.11, 109.85, 143.36), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Palomino Freeway)", camera = 1},
|
||||
{location = vector4(2552.54, 380.92, 109.85, 313.33), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Palomino Freeway)", camera = 2},
|
||||
{location = vector4(2551.39, 387.73, 109.85, 135.86), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Palomino Freeway)", camera = 3},
|
||||
{location = vector4(-3036.09, 585.05, 9.6, 319.68), canRotate = true, cameraType = "low", type = "General Stores", name = "General Store (Inseno Road)", camera = 1},
|
||||
{location = vector4(-3040.77, 594.27, 9.08, 158.74), canRotate = true, cameraType = "medium", type = "General Stores", name = "General Store (Inseno Road)", camera = 2},
|
||||
{location = vector4(-3043.44, 582.91, 9.08, 336.27), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Inseno Road)", camera = 3},
|
||||
{location = vector4(-3046.84, 588.96, 9.08, 158.71), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Inseno Road)", camera = 4},
|
||||
{location = vector4(-3240.23, 1009.21, 13.90, 129.43), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Barbereno Road)", camera = 1},
|
||||
{location = vector4(-3246.92, 1000.3, 13.90, 311.88), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Barbereno Road)", camera = 2},
|
||||
{location = vector4(-3247.78, 1007.18, 14.01, 136.92), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Barbereno Road)", camera = 3},
|
||||
{location = vector4(548.98, 2674.68, 43.16, 35.94), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Harmony)", camera = 1},
|
||||
{location = vector4(537.4, 2671.29, 43.79, 128.4), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Harmony)", camera = 2},
|
||||
{location = vector4(539.14, 2671.23, 43.29, 233.44), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Harmony)", camera = 3},
|
||||
{location = vector4(549.85, 2666.71, 43.29, 50.89), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Harmony)", camera = 4},
|
||||
{location = vector4(543.36, 2664.36, 43.29, 233.4), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Harmony)", camera = 5},
|
||||
{location = vector4(1968.82, 3743.63, 33.49, 77.66), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Alhambra Drive)", camera = 1},
|
||||
{location = vector4(1657.69, 3744.0, 33.5, 257.56), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Alhambra Drive)", camera = 2},
|
||||
{location = vector4(1962.79, 3748.66, 33.49, 77.66), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Alhambra Drive)", camera = 3},
|
||||
{location = vector4(2683.92, 3287.4, 56.32, 107.43), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Senora Freeway)", camera = 1},
|
||||
{location = vector4(2673.82, 3281.56, 56.32, 292.39), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Senora Freeway)", camera = 2},
|
||||
{location = vector4(2675.99, 3288.17, 56.32, 109.95), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Senora Freeway)", camera = 3},
|
||||
{location = vector4(1740.25, 6406.94, 36.15, 201.8), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (East | Great Ocean Highway)", camera = 1},
|
||||
{location = vector4(1735.7, 6410.0, 36.15, 21.8), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (East | Great Ocean Highway)", camera = 2},
|
||||
{location = vector4(1729.81, 6419.38, 36.08, 199.44), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (East | Great Ocean Highway)", camera = 3},
|
||||
{location = vector4(1736.51, 6417.86, 36.08, 21.8), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (East | Great Ocean Highway)", camera = 4},
|
||||
{location = vector4(1133.25, -978.84, 47.48, 221.79), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Vespucci Boulevard)", camera = 1},
|
||||
{location = vector4(-1224.77, -910.71, 13.43, 335.67), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (San Andreas Avenue)", camera = 1},
|
||||
{location = vector4(-1483.36, -380.25, 41.31, 74.71), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Prosperity Street)", camera = 1},
|
||||
{location = vector4(-2966.23, 387.35, 16.27, 26.65), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (West | Great Ocean Highway)", camera = 1},
|
||||
{location = vector4(1169.49, 2711.16, 39.32, 118.61), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Route 68)", camera = 1},
|
||||
{location = vector4(-56.89, -1752.07, 30.54, 275.94), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Davis Avenue)", camera = 1},
|
||||
{location = vector4(-43.42, -1755.28, 30.54, 98.44), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Davis Avenue)", camera = 2},
|
||||
{location = vector4(-40.0, -1751.34, 30.09, 120.42), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Davis Avenue)", camera = 3},
|
||||
{location = vector4(-43.97, -1748.2, 30.12, 188.44), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Davis Avenue)", camera = 4},
|
||||
{location = vector4(1153.6, -326.81, 70.33, 325.41), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (West Mirror Drive)", camera = 1},
|
||||
{location = vector4(1164.76, -318.51, 70.25, 147.90), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (West Mirror Drive)", camera = 2},
|
||||
{location = vector4(1164.05, -313.02, 69.96, 170.47), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (West Mirror Drive)", camera = 3},
|
||||
{location = vector4(1159.16, -314.42, 69.81, 237.90), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (West Mirror Drive)", camera = 4},
|
||||
{location = vector4(-717.72, -915.68, 20.31, 318.77), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Ginger Street)", camera = 1},
|
||||
{location = vector4(-705.42, -909.55, 20.24, 136.27), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Ginger Street)", camera = 2},
|
||||
{location = vector4(-705.05, -903.92, 19.98, 161.27), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Ginger Street)", camera = 3},
|
||||
{location = vector4(-710.21, -904.43, 19.82, 228.77), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Ginger Street)", camera = 4},
|
||||
{location = vector4(-1827.22, 784.84, 139.4, 2.34), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (North Rockford Drive)", camera = 1},
|
||||
{location = vector4(-1822.38, 797.85, 139.17, 172.34), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (North Rockford Drive)", camera = 2},
|
||||
{location = vector4(-1825.91, 802.22, 138.91, 204.84), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (North Rockford Drive)", camera = 3},
|
||||
{location = vector4(-1829.37, 898.26, 138.8, 267.34), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (North Rockford Drive)", camera = 4},
|
||||
{location = vector4(1703.03, 4933.52, 43.18, 188.32), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Grapeseed)", camera = 1},
|
||||
{location = vector4(1701.05, 4919.84, 43.18, 10.82), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Grapeseed)", camera = 2},
|
||||
{location = vector4(1705.21, 4916.74, 42.73, 35.83), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Grapeseed)", camera = 3},
|
||||
{location = vector4(1708.04, 4920.94, 42.67, 103.32), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Grapeseed)", camera = 4},
|
||||
{location = vector4(-1090.0, -2588.47, 14.98, 104.98), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (LSIA)", camera = 1},
|
||||
{location = vector4(-1099.73, -2593.77, 15.08, 289.90), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (LSIA)", camera = 2},
|
||||
{location = vector4(-1097.69, -2587.18, 15.08, 107.48), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (LSIA)", camera = 3},
|
||||
{location = vector4(264.58, -987.13, 30.49, 296.89), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Strawberry Avenue)", camera = 1},
|
||||
{location = vector4(273.45, -979.77, 30.48, 119.43), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Strawberry Avenue)", camera = 2},
|
||||
{location = vector4(272.63, -986.63, 30.48, 297.0), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Strawberry Avenue)", camera = 3},
|
||||
{location = vector4(166.27, 6634.11, 32.86, 0.07), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Paleto Bay)", camera = 1},
|
||||
{location = vector4(163.78, 6644.98, 32.86, 185.2), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Paleto Bay)", camera = 2},
|
||||
{location = vector4(169.56, 6641.29, 32.81, 7.58), canRotate = true, cameraType = "highquality", type = "General Stores", name = "General Store (Paleto Bay)", camera = 3},
|
||||
|
||||
-- Highway Traffic Cameras
|
||||
|
||||
{location = vector4(-1141.84, -656.03, 15.46, 291.61), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Del Perro Fwy", camera = 1},
|
||||
|
||||
{location = vector4(-988.14, -571.27, 25.02, 358.79), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Little Seoul Del Perro Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(-523.43, -514.01, 29.7, 267.46), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Little Seoul Del Perro Fwy/La Puerta Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(-227.05, -513.61, 30.35, 238.64), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Las Lagunas Blv La Puerta Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(270.64, -510.93, 38.39, 236.37), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Vinewood Del Perro Fwy/Elgin Ave", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(476.81, -484.67, 40.15, 53.99), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West Vinewood Los Santos Fwy/Del Perro Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(579.07, -543.8, 41.66, 223.35), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East La Mesa Los Perro Fwy/Del Perro Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(1020, -932.81, 34.37, 168.39), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "South Murrieta Heights Del Perro Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(1064.98, -1448.59, 32.68, 315.01), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East La Mesa Eltsian Fields Fyw/Capital Blvd", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(1229.26, -2020.53, 48.63, 186.99), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "South El Burro Heights Elysian Fields Fwy", camera = 1},
|
||||
|
||||
{location = vector4(963.99, -2596.72, 50.74, 90.22), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West Cypress Flats Elysian Fields Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(236.31, -2678.4, 22.69, 65.79), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West Elysian Fields Fwy", camera = 1},
|
||||
|
||||
|
||||
{location = vector4(-536.69, -2239.02, 64.04, 48.86), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West La Puerta Fwy", camera = 1},
|
||||
|
||||
{location = vector4(-725.75, -2149.05, 17.89, 119.66), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West Davis Ave/Dutch London", camera = 1},
|
||||
|
||||
{location = vector4(-699.21, -2005.97, 30.76, 352.9), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Davis Ave", camera = 1},
|
||||
|
||||
{location = vector4(-668.8, -1918.78, 31.38, 43.62), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Dutch London St", camera = 1},
|
||||
|
||||
{location = vector4(-324.41, -2102.61, 27.79, 244.81), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Dutch London St/Davs Ave", camera = 1},
|
||||
|
||||
{location = vector4(-492.12, -1886.52, 22.16, 276.21), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East La Puerta/Davis Ave", camera = 1},
|
||||
|
||||
{location = vector4(-753.85, -1796.07, 33.05, 359.85), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Dutch London St/Davis Ave", camera = 1},
|
||||
|
||||
{location = vector4(-650.28, -1724.46, 41.64, 271.86), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East La Puerta Fwy/Mutiny Rd", camera = 1},
|
||||
|
||||
{location = vector4(-429.01, -1565.29, 43.34, 333.89), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North La Puerta/La Puerta Fwy", camera = 1},
|
||||
|
||||
{location = vector4(-403.82, -1373.75, 41.81, 248.17), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North La Puerta Fwy/Olympic Fwy", camera = 1},
|
||||
|
||||
{location = vector4(-404.26, -979.05, 41.64, 348.38), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North La Puerta Fwy/Olympic Fwy", camera = 2},
|
||||
|
||||
{location = vector4(-404.3, -698.54, 41.77, 340.45), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North La Puerta Fwy/Olympic Fwy", camera = 3},
|
||||
|
||||
{location = vector4(-152.9, -1220.86, 51.95, 294.69), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Olympic Fwy", camera = 1},
|
||||
|
||||
{location = vector4(596.12, -1203.31, 45.46, 258.47), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Olympic Fwy", camera = 2},
|
||||
|
||||
{location = vector4(1385.05, -1088.29, 57.75, 289.68), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Palomino Fwy", camera = 1},
|
||||
|
||||
{location = vector4(2127.29, -578.88, 99.76, 302.17), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Palomino Fwy", camera = 2},
|
||||
|
||||
{location = vector4(2444.51, -162.73, 92.7, 318.37), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Palomino Fwy", camera = 3},
|
||||
|
||||
{location = vector4(2592.35, 681.02, 97.84, 9.88), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Palomino Fwy", camera = 4},
|
||||
|
||||
{location = vector4(2354.46, 1170.33, 67.19, 307.91), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "East Palomino Fwy", camera = 5},
|
||||
|
||||
{location = vector4(2526.67, 642.45, 110.76, 175.82), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West Palomino Fwy", camera = 6},
|
||||
|
||||
{location = vector4(2133.19, 1341.78, 79.89, 18.76), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "West Palomino Fwy", camera = 7},
|
||||
|
||||
{location = vector4(526.95, -357.51, 48.97, 344.28), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 1},
|
||||
|
||||
{location = vector4(587.81, -326.89, 41.16, 313.77), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 2},
|
||||
|
||||
{location = vector4(834.75, 90.13, 73.15, 310.47), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 3},
|
||||
|
||||
{location = vector4(1287.24, 579.15, 84.91, 296.25), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 4},
|
||||
|
||||
{location = vector4(1606.99, 1070.94, 85.23, 329.8), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 5},
|
||||
|
||||
{location = vector4(1732.16, 1518.58, 89.14, 323.9), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 6},
|
||||
|
||||
{location = vector4(1902.79, 2371.38, 59.99, 335.66), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Los Santos Freeway", camera = 7},
|
||||
|
||||
{location = vector4(2003.39, 1590.59, 79.07, 9.69), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 1},
|
||||
|
||||
{location = vector4(2014.28, 2579.03, 59.3, 297.02), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 2},
|
||||
|
||||
{location = vector4(2248.09, 2779.26, 48.44, 293.72), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 3},
|
||||
|
||||
{location = vector4(2373.62, 2946.01, 53.6, 340.89), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 4},
|
||||
|
||||
{location = vector4(2772.44, 3350.43, 60.46, 322.44), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 5},
|
||||
|
||||
{location = vector4(2795.45, 4390.78, 53.87, 59.56), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 6},
|
||||
|
||||
{location = vector4(2789.62, 4420.52, 53.43, 346.86), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 7},
|
||||
|
||||
{location = vector4(2627.92, 5099.9, 49.46, 339.29), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 8},
|
||||
|
||||
{location = vector4(2621.93, 5123.63, 49.34, 342.12), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 9},
|
||||
|
||||
{location = vector4(2219.07, 6022.92, 56.43, 45.06), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 10},
|
||||
|
||||
{location = vector4(2118.21, 6026.24, 59.69, 47.04), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 11},
|
||||
|
||||
|
||||
{location = vector4(1783.16, 6355.11, 41.62, 59.11), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Senora Fwy", camera = 12},
|
||||
|
||||
{location = vector4(1031.51, 6504.69, 25.91, 58.03), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 1},
|
||||
|
||||
{location = vector4(183.46, 6546.85, 36.59, 116.53), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 2},
|
||||
|
||||
{location = vector4(-635.6, 5606.54, 43.49, 135.6), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 3},
|
||||
|
||||
{location = vector4(-1230.06, 5271.97, 55.2, 223.17), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 4},
|
||||
|
||||
{location = vector4(-1538.61, 4980.64, 66.88, 147.93), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 5},
|
||||
|
||||
{location = vector4(-1913.39, 4623.48, 63.04, 145.38), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 6},
|
||||
|
||||
{location = vector4(-2300.23, 4214.92, 45.76, 317.91), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 7},
|
||||
|
||||
{location = vector4(-2506.03, 3541.91, 19.46, 342.76), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 8},
|
||||
|
||||
{location = vector4(-2622.92, 2975.36, 22.91, 19.98), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 9},
|
||||
|
||||
{location = vector4(-2691.93, 2302.06, 24.53, 232.53), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 10},
|
||||
|
||||
{location = vector4(-3090.39, 1201.89, 26.05, 180.48), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 11},
|
||||
|
||||
{location = vector4(-3027.27, 311.33, 19.5, 340.22), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 12},
|
||||
|
||||
{location = vector4(-2225.42, -358.66, 18.12, 275.76), canRotate = true, cameraType = "highquality", type = "Traffic Cameras", name = "North Great Ocean Hwy", camera = 13},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{location = vector4(112.17, -1312.33, 35.07, 236.35), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 1},
|
||||
{location = vector4(144.05, -1295.15, 32.27, 181.35), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 2},
|
||||
{location = vector4(145.08, -1292.26, 31.87, 328.85), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 3},
|
||||
{location = vector4(132.28, -1293.21, 29.87, 148.85), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 4},
|
||||
{location = vector4(120.34, -1289.46, 30.37, 216.92), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 5},
|
||||
{location = vector4(117.89, -1282.66, 30.37, 154.42), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 6},
|
||||
{location = vector4(110.67, -1281.92, 30.12, 219.42), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 7},
|
||||
{location = vector4(133.57, -1275.7, 35.75, 231.92), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 8},
|
||||
{location = vector4(132.44, -1274.22, 33.52, 21.92), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 9},
|
||||
{location = vector4(131.58, -1275.42, 34.34, 111.92), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 10},
|
||||
{location = vector4(100.56, -1280.87, 34.49, 289.42), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 11},
|
||||
{location = vector4(98.58, -1281.03, 33.54, 79.42), canRotate = true, cameraType = "highquality", type = "Entertainment", name = "Vanilla Unicorn", camera = 12},
|
||||
|
||||
{location = vector4(149.47, -1035.65, 31.08, 308.42), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 1},
|
||||
{location = vector4(152.69, -1041.89, 29.79, 55.92), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 2},
|
||||
{location = vector4(146.48, -1038.21, 29.79, 248.42), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 3},
|
||||
{location = vector4(143.44, -1039.94, 30.04, 315.89), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 4},
|
||||
{location = vector4(142.93, -1041.93, 30.11, 220.91), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 5},
|
||||
{location = vector4(145.15, -1043.27, 29.92, 220.92), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 6},
|
||||
{location = vector4(150.61, -1046.72, 29.91, 58.42), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 7},
|
||||
{location = vector4(149.90, -1051.08, 30.08, 18.42), canRotate = true, cameraType = "highquality", type = "Banks", name = "Legion Square", camera = 8},
|
||||
|
||||
{location = vector4(301.31, -581.95, 44.31, 193.39), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 1},
|
||||
{location = vector4(311.83, -597.61, 44.46, 21.78), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 2},
|
||||
{location = vector4(327.98, -591.3, 44.43, 119.31), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 3},
|
||||
{location = vector4(323.69, -602.56, 44.33, 44.28), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 4},
|
||||
{location = vector4(305.69, -569.71, 44.41, 213.83), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 5},
|
||||
{location = vector4(315.33, -579.04, 44.41, 136.33), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 6},
|
||||
{location = vector4(334.53, -570.0, 44.46, 141.33), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 7},
|
||||
{location = vector4(336.82, -586.6, 44.48, 211.33), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 8},
|
||||
{location = vector4(347.93, -602.31, 44.33, 1.33), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Pillbox Medical Center", camera = 9},
|
||||
{location = vector4(1836.64, 3671.79, 35.30, 241.95), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Sandy Shores Medical Center", camera = 1},
|
||||
{location = vector4(1818.46, 3680.81, 35.17, 61.15), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Sandy Shores Medical Center", camera = 2},
|
||||
{location = vector4(1830.45, 3693.33, 35.38, 62.7), canRotate = true, cameraType = "highquality", type = "Hospitals", name = "Sandy Shores Medical Center", camera = 3},
|
||||
|
||||
{location = vector4(433.3, -978.43, 32.65, 126.55), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 1},
|
||||
{location = vector4(423.99, -996.86, 32.96, 119.5), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 2},
|
||||
{location = vector4(438.44, -999.89, 31.51, 212.86), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 3},
|
||||
{location = vector4(438.91, -978.64, 31.64, 217.54), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 4},
|
||||
{location = vector4(441.1, -987.55, 31.97, 52.74), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 5},
|
||||
{location = vector4(444.4, -975.07, 32.22, 137.54), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 6},
|
||||
{location = vector4(449.24, -988.52, 31.79, 52.54), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 7},
|
||||
{location = vector4(449.3, -981.81, 31.77, 140.04), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 8},
|
||||
{location = vector4(460.48, -986.91, 31.45, 77.53), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 9},
|
||||
{location = vector4(450.83, -986.85, 31.35, 292.54), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 10},
|
||||
{location = vector4(458.93, -986.23, 27.42, 72.54), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 11},
|
||||
{location = vector4(465.14, -985.6, 26.77, 170.04), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 12},
|
||||
{location = vector4(463.39, -990.86, 26.7, 340.03), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 13},
|
||||
{location = vector4(459.23, -987.62, 26.66, 233.64), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 14},
|
||||
{location = vector4(465.33, -995.80, 25.31, 131.13), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 15},
|
||||
{location = vector4(469.49, -995.14, 25.76, 238.64), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 16},
|
||||
{location = vector4(478.41, -996.16, 24.99, 148.63), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 17},
|
||||
{location = vector4(487.01, -995.25, 24.56, 51.14), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 18},
|
||||
{location = vector4(462.42, -1007.64, 25.46, 341.14), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 19},
|
||||
{location = vector4(469.5, -1009.24, 26.86, 171.14), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 20},
|
||||
{location = vector4(489.89, -1003.8, 28.71, 302.0), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 21},
|
||||
{location = vector4(481.86, -977.89, 29.01, 28.63), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Mission Row", camera = 22},
|
||||
|
||||
{location = vector4(1856.12, 3683.28, 35.32, 175.73), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 1},
|
||||
{location = vector4(1865.0, 3688.08, 35.08, 247.7), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 2},
|
||||
{location = vector4(1851.76, 3682.04, 35.38, 325.73), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 3},
|
||||
{location = vector4(1847.48, 3689.51, 35.33, 258.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 4},
|
||||
{location = vector4(1853.08, 3692.62, 35.33, 188.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 5},
|
||||
{location = vector4(1855.6, 3690.09, 35.55, 348.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 6},
|
||||
{location = vector4(1844.85, 3694.13, 35.40, 250.73), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 7},
|
||||
{location = vector4(1849.12, 3683.57, 30.82, 155.73), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 8},
|
||||
{location = vector4(1850.36, 3684.23, 30.82, 273.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 9},
|
||||
{location = vector4(1853.0, 3687.34, 30.82, 63.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 10},
|
||||
{location = vector4(1854.4, 3687.96, 30.75, 343.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 11},
|
||||
{location = vector4(1859.26, 3686.51, 30.8, 68.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 12},
|
||||
{location = vector4(1860.23, 3688.5, 30.82, 298.23), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 13},
|
||||
{location = vector4(1858.38, 3691.48, 30.82, 300.73), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 14},
|
||||
{location = vector4(1855.94, 3694.82, 30.82, 305.73), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 15},
|
||||
{location = vector4(1853.61, 3700.67, 35.38, 350.2), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 16},
|
||||
{location = vector4(1853.61, 3700.67, 35.38, 350.2), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Sandy Shores", camera = 17},
|
||||
|
||||
{location = vector4(-434.9, 6011.41, 33.42, 341.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 1},
|
||||
{location = vector4(-447.43, 6023.68, 33.42, 348.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 2},
|
||||
{location = vector4(-458.63, 6015.94, 33.24, 11.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 3},
|
||||
{location = vector4(-441.21, 5994.84, 33.24, 106.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 4},
|
||||
{location = vector4(-442.96, 5983.43, 33.24, 111.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 5},
|
||||
{location = vector4(-430.89, 5989.2, 33.24, 261.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 6},
|
||||
{location = vector4(-441.45, 6013.17, 32.77, 76.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 7},
|
||||
{location = vector4(-447.4, 6007.07, 32.77, 1.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 8},
|
||||
{location = vector4(-451.49, 6011.69, 32.84, 293.12), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 9},
|
||||
{location = vector4(-439.7, 6013.18, 32.84, 166.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 10},
|
||||
{location = vector4(-433.59, 6001.16, 32.84, 358.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 11},
|
||||
{location = vector4(-440.92, 5999.96, 32.64, 271.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 12},
|
||||
{location = vector4(-447.12, 6005.48, 33.73, 256.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 13},
|
||||
{location = vector4(-440.15, 6002.3, 33.73, 43.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 14},
|
||||
{location = vector4(-440.73, 5998.79, 37.25, 1.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 15},
|
||||
{location = vector4(-435.49, 6004.22, 37.26, 86.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 16},
|
||||
{location = vector4(-444.82, 6006.2, 37.26, 256.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 17},
|
||||
{location = vector4(-449.02, 6012.96, 37.26, 178.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 18},
|
||||
{location = vector4(-441.52, 5999.8, 29.02, 311.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 19},
|
||||
{location = vector4(-431.88, 6007.97, 29.02, 111.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 20},
|
||||
{location = vector4(-439.14, 5999.31, 29.02, 278.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 21},
|
||||
{location = vector4(-432.19, 5999.29, 29.02, 93.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 22},
|
||||
{location = vector4(-443.38, 6007.69, 29.02, 253.92), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 23},
|
||||
{location = vector4(-446.74, 6009.03, 29.02, 276.42), canRotate = true, cameraType = "highquality", type = "Police Stations", name = "Paleto Bay", camera = 24}
|
||||
}
|
||||
|
||||
CCTV_Config.TimecycleTypes = {
|
||||
["blackwhite"] = "CAMERA_BW",
|
||||
["clear"] = "eyeINtheSKY",
|
||||
["highquality"] = "heliGunCam"
|
||||
}
|
||||
Reference in New Issue
Block a user