From cb1588faf390daf0f783382048222973eeb043b7 Mon Sep 17 00:00:00 2001 From: bitpredator <67551273+bitpredator@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:32:16 +0200 Subject: [PATCH 1/5] feat: new bpt_drugs code --- .../resources/[bpt_addons]/bpt_drugs/LICENSE | 673 ++++++++++++++++++ .../[bpt_addons]/bpt_drugs/README.md | 19 + .../[bpt_addons]/bpt_drugs/bpt_drugs.sql | 4 + .../[bpt_addons]/bpt_drugs/client/main.lua | 136 ++++ .../[bpt_addons]/bpt_drugs/client/weed.lua | 154 ++++ .../[bpt_addons]/bpt_drugs/config.lua | 28 + .../[bpt_addons]/bpt_drugs/fxmanifest.lua | 28 + .../[bpt_addons]/bpt_drugs/locales/en.lua | 24 + .../[bpt_addons]/bpt_drugs/locales/it.lua | 26 + .../[bpt_addons]/bpt_drugs/server/main.lua | 136 ++++ 10 files changed, 1228 insertions(+) create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/LICENSE create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/README.md create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/bpt_drugs.sql create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/config.lua create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/locales/en.lua create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/locales/it.lua create mode 100644 server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/LICENSE b/server-data/resources/[bpt_addons]/bpt_drugs/LICENSE new file mode 100644 index 000000000..55471cf81 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/LICENSE @@ -0,0 +1,673 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + bpt_drugs Copyright (C) 2024 bitpredator + + 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 . + +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: + + bpt_drugs Copyright (C) 2024 bitpredator + 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 +. + + 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 +. \ No newline at end of file diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/README.md b/server-data/resources/[bpt_addons]/bpt_drugs/README.md new file mode 100644 index 000000000..cb7a42c8f --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/README.md @@ -0,0 +1,19 @@ +

bpt_drugs

+

Discord + +Copyright (C) 2024 bitpredator + +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. + +ATTENTION: +You are not authorized to change the name of the resource and the resources within it. + +If you want to contribute you can open a pull request. + +You are not authorized to sell this software (this is free project). + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/bpt_drugs.sql b/server-data/resources/[bpt_addons]/bpt_drugs/bpt_drugs.sql new file mode 100644 index 000000000..9e0de2ead --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/bpt_drugs.sql @@ -0,0 +1,4 @@ +INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES + ('cannabis', 'Cannabis', 3, 0, 1), + ('marijuana', 'Marijuana', 2, 0, 1) +; diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua b/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua new file mode 100644 index 000000000..c807b54f4 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua @@ -0,0 +1,136 @@ +local menuOpen = false +local inZoneDrugShop = false +local inRangeMarkerDrugShop = false +local cfgMarker = Config.Marker + +--slow loop +CreateThread(function() + while true do + local playerPed = PlayerPedId() + local coords = GetEntityCoords(playerPed) + local distDrugShop = #(coords - Config.CircleZones.DrugDealer.coords) + + inRangeMarkerDrugShop = false + if distDrugShop <= Config.Marker.Distance then + inRangeMarkerDrugShop = true + end + + if distDrugShop < 1 then + inZoneDrugShop = true + else + inZoneDrugShop = false + if menuOpen then + menuOpen = false + end + end + + Wait(500) + end +end) + +--drawk marker +CreateThread(function() + while true do + local Sleep = 1500 + if inRangeMarkerDrugShop then + Sleep = 0 + local coordsMarker = Config.CircleZones.DrugDealer.coords + local color = cfgMarker.Color + DrawMarker(cfgMarker.Type, coordsMarker.x, coordsMarker.y, coordsMarker.z - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, cfgMarker.Size, color.r, color.g, color.b, color.a, false, true, 2, false, nil, nil, false) + end + Wait(Sleep) + end +end) + +--main loop +CreateThread(function() + while true do + local Sleep = 1500 + if inZoneDrugShop and not menuOpen then + Sleep = 0 + ESX.ShowHelpNotification(TranslateCap("dealer_prompt"), true) + if IsControlJustPressed(0, 38) then + OpenDrugShop() + end + end + Wait(Sleep) + end +end) + +function OpenDrugShop() + local elements = { + { unselectable = true, icon = "fas fa-cannabis", title = TranslateCap("dealer_title") }, + } + menuOpen = true + + for k, v in pairs(ESX.GetPlayerData().inventory) do + local price = Config.DrugDealerItems[v.name] + + if price and v.count > 0 then + elements[#elements + 1] = { + icon = "fas fa-shopping-basket", + title = ('%s - %s'):format(v.label, TranslateCap("dealer_item", ESX.Math.GroupDigits(price))), + name = v.name, + price = price, + } + end + end + + ESX.OpenContext("right", elements, function(menu, element) + local elements2 = { + { unselectable = true, icon = "fas fa-shopping-basket", title = element.title }, + { icon = "fas fa-shopping-basket", title = "Amount", input = true, inputType = "number", inputPlaceholder = "Amount you want to sell", inputValue = 0, inputMin = Config.SellMenu.Min, inputMax = Config.SellMenu.Max }, + { icon = "fas fa-check-double", title = "Confirm", val = "confirm" }, + } + + ESX.OpenContext("right", elements2, function(menu2, element2) + ESX.CloseContext() + local count = tonumber(menu2.eles[2].inputValue) + + if count < 1 then + return + end + + TriggerServerEvent("bpt_drugs:sellDrug", tostring(element.name), count) + end, function(menu) + menuOpen = false + end) + end, function(menu) + menuOpen = false + end) +end + +AddEventHandler("onResourceStop", function(resource) + if resource == GetCurrentResourceName() then + if menuOpen then + ESX.CloseContext() + end + end +end) + +function CreateBlipCircle(coords, text, radius, color, sprite) + local blip = AddBlipForRadius(coords, radius) + + SetBlipHighDetail(blip, true) + SetBlipColour(blip, 1) + SetBlipAlpha(blip, 128) + + -- create a blip in the middle + blip = AddBlipForCoord(coords) + + SetBlipHighDetail(blip, true) + SetBlipSprite(blip, sprite) + SetBlipScale(blip, 1.0) + SetBlipColour(blip, color) + SetBlipAsShortRange(blip, true) + + BeginTextCommandSetBlipName("STRING") + AddTextComponentSubstringPlayerName(text) + EndTextCommandSetBlipName(blip) +end + +CreateThread(function() + for k, zone in pairs(Config.CircleZones) do + CreateBlipCircle(zone.coords, zone.name, zone.radius, zone.color, zone.sprite) + end +end) diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua b/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua new file mode 100644 index 000000000..d8d23e55a --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua @@ -0,0 +1,154 @@ +local spawnedWeeds = 0 +local weedPlants = {} +local isPickingUp = false + +CreateThread(function() + while true do + Wait(700) + local coords = GetEntityCoords(PlayerPedId()) + + if #(coords - Config.CircleZones.WeedField.coords) < 50 then + SpawnWeedPlants() + end + end +end) + +function ProcessWeed(xCannabis) + ESX.ShowNotification(TranslateCap("weed_processingstarted")) + TriggerServerEvent("bpt_drugs:processCannabis") + if xCannabis <= 3 then + xCannabis = 0 + end +end + +CreateThread(function() + while true do + local Sleep = 1500 + + local playerPed = PlayerPedId() + local coords = GetEntityCoords(playerPed) + local nearbyObject, nearbyID + + for i = 1, #weedPlants, 1 do + if #(coords - GetEntityCoords(weedPlants[i])) < 1.5 then + nearbyObject, nearbyID = weedPlants[i], i + end + end + + if nearbyObject and IsPedOnFoot(playerPed) then + Sleep = 0 + if not isPickingUp then + ESX.ShowHelpNotification(TranslateCap("weed_pickupprompt")) + end + + if IsControlJustReleased(0, 38) and not isPickingUp then + isPickingUp = true + + ESX.TriggerServerCallback("bpt_drugs:canPickUp", function(canPickUp) + if canPickUp then + TaskStartScenarioInPlace(playerPed, "world_human_gardener_plant", 0, false) + + Wait(2000) + ClearPedTasks(playerPed) + Wait(1500) + + ESX.Game.DeleteObject(nearbyObject) + + table.remove(weedPlants, nearbyID) + spawnedWeeds = spawnedWeeds - 1 + + TriggerServerEvent("bpt_drugs:pickedUpCannabis") + else + ESX.ShowNotification(TranslateCap("weed_inventoryfull")) + end + + isPickingUp = false + end, "cannabis") + end + end + Wait(Sleep) + end +end) + +AddEventHandler("onResourceStop", function(resource) + if resource == GetCurrentResourceName() then + for k, v in pairs(weedPlants) do + ESX.Game.DeleteObject(v) + end + end +end) + +function SpawnWeedPlants() + while spawnedWeeds < 25 do + Wait(0) + local weedCoords = GenerateWeedCoords() + + ESX.Game.SpawnLocalObject("prop_weed_02", weedCoords, function(obj) + PlaceObjectOnGroundProperly(obj) + FreezeEntityPosition(obj, true) + + table.insert(weedPlants, obj) + spawnedWeeds = spawnedWeeds + 1 + end) + end +end + +function ValidateWeedCoord(plantCoord) + if spawnedWeeds > 0 then + local validate = true + + for k, v in pairs(weedPlants) do + if #(plantCoord - GetEntityCoords(v)) < 5 then + validate = false + end + end + + if #(plantCoord - Config.CircleZones.WeedField.coords) > 50 then + validate = false + end + + return validate + else + return true + end +end + +function GenerateWeedCoords() + while true do + Wait(0) + + local weedCoordX, weedCoordY + + math.randomseed(GetGameTimer()) + local modX = math.random(-90, 90) + + Wait(100) + + math.randomseed(GetGameTimer()) + local modY = math.random(-90, 90) + + weedCoordX = Config.CircleZones.WeedField.coords.x + modX + weedCoordY = Config.CircleZones.WeedField.coords.y + modY + + local coordZ = GetCoordZ(weedCoordX, weedCoordY) + local coord = vector3(weedCoordX, weedCoordY, coordZ) + + if ValidateWeedCoord(coord) then + return coord + end + end +end + +function GetCoordZ(x, y) + local groundCheckHeights = { 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0 } + + for i, height in ipairs(groundCheckHeights) do + local foundGround, z = GetGroundZFor_3dCoord(x, y, height) + + if foundGround then + return z + end + end + + return 43.0 +end diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/config.lua b/server-data/resources/[bpt_addons]/bpt_drugs/config.lua new file mode 100644 index 000000000..15454bdac --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/config.lua @@ -0,0 +1,28 @@ +Config = {} + +Config.Locale = GetConvar('esx:locale', 'it') + +Config.DrugDealerItems = { + marijuana = 91 +} + +Config.GiveBlack = true -- give black money? if disabled it'll give regular cash. + +Config.CircleZones = { + WeedField = {coords = vector3(2220.72, 5582.52, 53.81), name = TranslateCap('blip_weedfield'), color = 25, radius = 100.0}, + DrugDealer = {coords = vector3(-1172.02, -1571.98, 4.66), name = TranslateCap('blip_drugdealer'), color = 6, sprite = 378}, +} + +Config.Marker = { + Distance = 100.0, + Color = {r=60,g=230,b=60,a=255}, + Size = vector3(1.5,1.5,1.0), + Type = 1, +} + +-- min amount of Config.DrugDealerItems to sell +-- max amount of Config.DrugDealerItems to sell +Config.SellMenu = { + Min = 1, + Max = 50 +} diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua b/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua new file mode 100644 index 000000000..31fc3c460 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua @@ -0,0 +1,28 @@ +fx_version 'adamant' + +game 'gta5' +lua54 'yes' +description 'Allows players to harvest and sell marijuana' +version '1.0.2' + +shared_script '@es_extended/imports.lua' + +server_scripts { + '@oxmysql/lib/MySQL.lua', + '@es_extended/locale.lua', + 'locales/*.lua', + 'config.lua', + 'server/main.lua' +} + +client_scripts { + '@es_extended/locale.lua', + 'locales/*.lua', + 'config.lua', + 'client/main.lua', + 'client/weed.lua' +} + +dependencies { + 'es_extended' +} diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/locales/en.lua b/server-data/resources/[bpt_addons]/bpt_drugs/locales/en.lua new file mode 100644 index 000000000..52ab2f3cb --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/locales/en.lua @@ -0,0 +1,24 @@ +Locales["en"] = { + -- weed + ["weed_pickupprompt"] = "press [E] to harvest the Cannabis plant.", + ["weed_quitprocess"] = "press [E] to stop Process Cannabis.", + ["weed_inventoryfull"] = "you do not have any more inventory space for Cannabis.", + ["weed_processprompt"] = "press [E] to start Process Cannabis.", + ["weed_processed"] = "you've processed 3x Cannabis to 1x Marijuana", + + -- drug dealer + ["dealer_prompt"] = "press [E] to talk with the ~r~Drug Dealer.", + ["dealer_title"] = "drug Dealer", + ["dealer_item"] = "$%s", + ["dealer_notenough"] = "you don't have enough of that to sell!", + ["dealer_sold"] = "you've sold %sx %s for $%s", + + -- license + ["license_no"] = "no", + ["license_bought"] = "you bought the %s for ~r~$%s", + ["license_bought_fail"] = "you cannot afford an %s!", + + -- blips + ["blip_weedfield"] = "weed Field", + ["blip_drugdealer"] = "drug Dealer", +} diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/locales/it.lua b/server-data/resources/[bpt_addons]/bpt_drugs/locales/it.lua new file mode 100644 index 000000000..258e0cf91 --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/locales/it.lua @@ -0,0 +1,26 @@ +Locales["it"] = { + -- weed + ["weed_pickupprompt"] = "premi [E] per raccogliere la pianta di Cannabis.", + ["weed_quitprocess"] = "premi [E] per interrompere il Processo di Cannabis.", + ["weed_inventoryfull"] = "non hai più spazio nell'inventario per la Cannabis.", + ["weed_processprompt"] = "premi [E] per avviare il processo di Cannabis.", + ["weed_processed"] = "hai trasformato 3x di Cannabis in 1x Marijuana", + + -- drug dealer + ["dealer_prompt"] = "premi [E] per parlare con lo ~r~Spacciatore.", + ["dealer_title"] = "spacciatore", + ["dealer_item"] = "$%s", + ["dealer_notenough"] = "non hai abbastanza merce da vendere!", + ["dealer_sold"] = "hai venduto %sx %s per $%s", + + -- license + ["license_title"] = "devi possedere una licenza per elaborare questo prodotto, può essere acquistata qui.", + ["license_no"] = "no", + ["license_bought"] = "hai comprato %s per ~r~$%s", + ["license_bought_fail"] = "non puoi permetterti un %s!", + ["license_weed"] = "licenza Commerciale Cannabinoidi", + + -- blips + ["blip_weedfield"] = "campo erba", + ["blip_drugdealer"] = "spacciatore", +} diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua b/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua new file mode 100644 index 000000000..c074f2d9b --- /dev/null +++ b/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua @@ -0,0 +1,136 @@ +local playersProcessingCannabis = {} +local outofbound = true +local alive = true + +local function ValidatePickupCannabis(src) + local ECoords = Config.CircleZones.WeedField.coords + local PCoords = GetEntityCoords(GetPlayerPed(src)) + local Dist = #(PCoords - ECoords) + if Dist <= 90 then + return true + end +end + +local function ValidateProcessCannabis(src) + local ECoords = Config.CircleZones.WeedProcessing.coords + local PCoords = GetEntityCoords(GetPlayerPed(src)) + local Dist = #(PCoords - ECoords) + if Dist <= 5 then + return true + end +end + +local function FoundExploiter(src, reason) + -- ADD YOUR BAN EVENT HERE UNTIL THEN IT WILL ONLY KICK THE PLAYER -- + DropPlayer(src, reason) +end + +RegisterServerEvent("bpt_drugs:sellDrug") +AddEventHandler("bpt_drugs:sellDrug", function(itemName, amount) + local xPlayer = ESX.GetPlayerFromId(source) + local price = Config.DrugDealerItems[itemName] + local xItem = xPlayer.getInventoryItem(itemName) + + -- If this fails its 99% a mod-menu, the variables client sided are setup to provide the exact right arguments + if type(amount) ~= "number" or type(itemName) ~= "string" then + print(("bpt_drugs: %s attempted to sell with invalid input type!"):format(xPlayer.identifier)) + FoundExploiter(xPlayer.source, "SellDrugs Event Trigger") + return + end + if not price then + print(("bpt_drugs: %s attempted to sell an invalid drug!"):format(xPlayer.identifier)) + return + end + if amount < 0 then + print(("bpt_drugs: %s attempted to sell an minus amount!"):format(xPlayer.identifier)) + return + end + if xItem == nil or xItem.count < amount then + xPlayer.showNotification(TranslateCap("dealer_notenough")) + return + end + + price = ESX.Math.Round(price * amount) + + if Config.GiveBlack then + xPlayer.addAccountMoney("black_money", price, "Drugs Sold") + else + xPlayer.addMoney(price, "Drugs Sold") + end + + xPlayer.removeInventoryItem(xItem.name, amount) + xPlayer.showNotification(TranslateCap("dealer_sold", amount, xItem.label, ESX.Math.GroupDigits(price))) +end) + +RegisterServerEvent("bpt_drugs:pickedUpCannabis") +AddEventHandler("bpt_drugs:pickedUpCannabis", function() + local src = source + local xPlayer = ESX.GetPlayerFromId(src) + local cime = math.random(5, 10) + if ValidatePickupCannabis(src) then + if xPlayer.canCarryItem("cannabis", cime) then + xPlayer.addInventoryItem("cannabis", cime) + else + xPlayer.showNotification(TranslateCap("weed_inventoryfull")) + end + else + FoundExploiter(src, "Event Trigger") + end +end) + +ESX.RegisterServerCallback("bpt_drugs:canPickUp", function(source, cb, item) + local xPlayer = ESX.GetPlayerFromId(source) + cb(xPlayer.canCarryItem(item, 1)) +end) + +RegisterServerEvent("bpt_drugs:outofbound") +AddEventHandler("bpt_drugs:outofbound", function() + outofbound = true +end) + +ESX.RegisterServerCallback("bpt_drugs:cannabis_count", function(source, cb) + local xPlayer = ESX.GetPlayerFromId(source) + local xCannabis = xPlayer.getInventoryItem("cannabis").count + cb(xCannabis) +end) + +RegisterServerEvent("bpt_drugs:processCannabis") +AddEventHandler("bpt_drugs:processCannabis", function() + if not playersProcessingCannabis[source] then + local source = source + if ValidateProcessCannabis(source) then + local xPlayer = ESX.GetPlayerFromId(source) + local xCannabis = xPlayer.getInventoryItem("cannabis") + if xCannabis.count >= 3 then + else + xPlayer.showNotification(TranslateCap("weed_processingenough")) + TriggerEvent("bpt_drugs:cancelProcessing") + end + else + FoundExploiter(source, "Event Trigger") + end + else + print(("bpt_drugs: %s attempted to exploit weed processing!"):format(GetPlayerIdentifiers(source)[1])) + end +end) + +function CancelProcessing(playerId) + if playersProcessingCannabis[playerId] then + ESX.ClearTimeout(playersProcessingCannabis[playerId]) + playersProcessingCannabis[playerId] = nil + end +end + +RegisterServerEvent("bpt_drugs:cancelProcessing") +AddEventHandler("bpt_drugs:cancelProcessing", function() + CancelProcessing(source) +end) + +AddEventHandler("esx:playerDropped", function(playerId, reason) + CancelProcessing(playerId) +end) + +RegisterServerEvent("esx:onPlayerDeath") +AddEventHandler("esx:onPlayerDeath", function(data) + CancelProcessing(source) +end) From ae0582e37a70d97ebac98948f6999c2dc7fd68af Mon Sep 17 00:00:00 2001 From: bitpredator <67551273+bitpredator@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:33:10 +0200 Subject: [PATCH 2/5] chore: ignores loading of imgui.ini file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 31f7ba2dc..8a0e46ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ server-data/cache/files/BasicItem server-data/cache/chat server-data/cache/yarn-cache server-data/db/default +server-data/imgui.ini # Resources server-data/resources/\[gameplay] From 52a855cc8be4674a689e53befdbff23b3e903e22 Mon Sep 17 00:00:00 2001 From: bitpredator <67551273+bitpredator@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:34:49 +0200 Subject: [PATCH 3/5] delete: removed obsolete esx_uteknark1 --- .../[esx_addons]/esx_uteknark1/LICENSE | 674 ------------------ .../[esx_addons]/esx_uteknark1/README.md | 8 - .../esx_uteknark1/cl_uteknark.lua | 503 ------------- .../[esx_addons]/esx_uteknark1/config.lua | 55 -- .../esx_uteknark1/esx_uteknark.sql | 10 - .../[esx_addons]/esx_uteknark1/fxmanifest.lua | 28 - .../esx_uteknark1/lib/cropstate.lua | 233 ------ .../[esx_addons]/esx_uteknark1/lib/debug.lua | 103 --- .../[esx_addons]/esx_uteknark1/lib/growth.lua | 93 --- .../[esx_addons]/esx_uteknark1/lib/octree.lua | 390 ---------- .../[esx_addons]/esx_uteknark1/locales/cz.lua | 27 - .../[esx_addons]/esx_uteknark1/locales/it.lua | 27 - .../[esx_addons]/esx_uteknark1/locales/sv.lua | 27 - .../esx_uteknark1/sv_uteknark.lua | 420 ----------- 14 files changed, 2598 deletions(-) delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/LICENSE delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/README.md delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/cl_uteknark.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/config.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/esx_uteknark.sql delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/fxmanifest.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/lib/cropstate.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/lib/debug.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/lib/growth.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/lib/octree.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/locales/cz.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/locales/it.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/locales/sv.lua delete mode 100644 server-data/resources/[esx_addons]/esx_uteknark1/sv_uteknark.lua diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/LICENSE b/server-data/resources/[esx_addons]/esx_uteknark1/LICENSE deleted file mode 100644 index a10cf2b1b..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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. - - - Copyright (C) 2023-2024 bitpredator - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - esx_uteknark Copyright (C) 2023-2024 bitpredator - 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 -. - - 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 -. diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/README.md b/server-data/resources/[esx_addons]/esx_uteknark1/README.md deleted file mode 100644 index 2f88a9bfa..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Legal -Copyright (C) 2019-2024 - -This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version. - -This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details. - -You should have received a copy Of the GNU General Public License along with this program. If Not, see http://www.gnu.org/licenses/. diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/cl_uteknark.lua b/server-data/resources/[esx_addons]/esx_uteknark1/cl_uteknark.lua deleted file mode 100644 index 55148bebf..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/cl_uteknark.lua +++ /dev/null @@ -1,503 +0,0 @@ -local table = table -local plantingTargetOffset = vector3(0, 2, -3) -local plantingSpaceAbove = vector3(0, 0, Config.Distance.Above) -local rayFlagsLocation = 17 -local rayFlagsObstruction = 273 -local activePlants = {} - -local registerStrings = { - "status_active", - "status_passive", -} - -for _, entry in ipairs(registerStrings) do - AddTextEntry("uteknark_" .. entry, _U(entry)) -end - -function interactHelp(stage, action) - BeginTextCommandDisplayHelp("uteknark_status_active") - AddTextComponentInteger(stage) - AddTextComponentInteger(#Growth) - AddTextComponentSubstringPlayerName(action) - EndTextCommandDisplayHelp(0, false, false, 1) -end -function passiveHelp(stage, status) - BeginTextCommandDisplayHelp("uteknark_status_passive") - AddTextComponentInteger(stage) - AddTextComponentInteger(#Growth) - AddTextComponentSubstringPlayerName(status) - EndTextCommandDisplayHelp(0, false, false, 1) -end - -function makeToast(subject, message) - local dict = "bkr_prop_weed" - local icon = "prop_cannabis_leaf_dprop_cannabis_leaf_a" - if not HasStreamedTextureDictLoaded(dict) then - RequestStreamedTextureDict(dict) - while not HasStreamedTextureDictLoaded(dict) do - Wait(0) - end - end - - -- BeginTextCommandThefeedPost("STRING") - SetNotificationTextEntry("STRING") - AddTextComponentSubstringPlayerName(message) - --EndTextCommandThefeedPostMessagetext( - SetNotificationMessage( - dict, -- texture dict - icon, -- texture name - true, -- fade - 0, -- icon type - "Pestovani", -- Sender - subject - ) - --EndTextCommandThefeedPostTicker( - DrawNotification( - false, -- important - false -- has tokens - ) - SetStreamedTextureDictAsNoLongerNeeded(icon) -end - -function serverlog(...) - TriggerServerEvent("esx_uteknark1:log", ...) -end - -RegisterNetEvent("esx_uteknark1:make_toast") -AddEventHandler("esx_uteknark1:make_toast", function(subject, message) - makeToast(subject, message) -end) - -function flatEnough(surfaceNormal) - local x = math.abs(surfaceNormal.x) - local y = math.abs(surfaceNormal.y) - local z = math.abs(surfaceNormal.z) - return (x <= Config.MaxGroundAngle and y <= Config.MaxGroundAngle and z >= 1.0 - Config.MaxGroundAngle) -end - -function getPlantingLocation(visible) - -- TODO: Refactor this *monster*, plx! - local ped = PlayerPedId() - - if IsPedInAnyVehicle(ped) then - return false, "planting_in_vehicle" -- The rest can all nil out - end - - local playerCoord = GetEntityCoords(ped) - local target = GetOffsetFromEntityInWorldCoords(ped, plantingTargetOffset) - local testRay = StartShapeTestRay(playerCoord, target, rayFlagsLocation, ped, 7) -- This 7 is entirely cargo cult. No idea what it does. - local _, hit, hitLocation, surfaceNormal, material, _ = GetShapeTestResultEx(testRay) - - if hit == 1 then - debug("Material:", material) - debug("Hit location:", hitLocation) - debug("Surface normal:", surfaceNormal) - - if Config.Soil[material] then - debug("Soil quality:", Config.Soil[material]) - if flatEnough(surfaceNormal) then - local plantDistance = #(playerCoord - hitLocation) - debug(plantDistance) - if plantDistance <= Config.Distance.Interact then - local hits = cropstate.octree:searchSphere(hitLocation, Config.Distance.Space) - if #hits > 0 then - debug("Found another plant too close") - if visible then - for _, hit in ipairs(hits) do - DrawLine(hitLocation, hit.bounds.location, 255, 0, 255, 100) - end - DebugSphere(hitLocation, 0.1, 255, 0, 255, 100) - DrawLine(playerCoord, hitLocation, 255, 0, 255, 100) - end - return false, "planting_too_close", hitLocation, surfaceNormal, material - else - if visible then - DebugSphere(hitLocation, 0.1, 0, 255, 0, 100) - DrawLine(playerCoord, hitLocation, 0, 255, 0, 100) - end - local aboveTarget = hitLocation + plantingSpaceAbove - local aboveRay = StartShapeTestRay(hitLocation, aboveTarget, rayFlagsObstruction, ped, 7) - local _, hitAbove, hitAbovePoint = GetShapeTestResult(aboveRay) - if hitAbove == 1 then - if visible then - debug("Obstructed above") - DrawLine(hitLocation, hitAbovePoint, 255, 0, 0, 100) - DebugSphere(hitAbovePoint, 0.1, 255, 0, 0, 100) - end - return false, "planting_obstructed", hitLocation, surfaceNormal, material - else - if visible then - DrawLine(hitLocation, aboveTarget, 0, 255, 0, 100) - DebugSphere(hitAbovePoint, 0.1, 255, 0, 0, 100) - debug("~g~planting OK") - end - return true, "planting_ok", hitLocation, surfaceNormal, material - end - end - else - if visible then - DebugSphere(hitLocation, 0.1, 0, 128, 0, 100) - DrawLine(playerCoord, hitLocation, 0, 128, 0, 100) - debug("Target too far away") - end - return false, "planting_too_far", hitLocation, surfaceNormal, material - end - else - if visible then - DebugSphere(hitLocation, 0.1, 0, 0, 255, 100) - DrawLine(playerCoord, hitLocation, 0, 0, 255, 100) - debug("Location too steep") - end - return false, "planting_too_steep", hitLocation, surfaceNormal, material - end - else - if visible then - debug("Not plantable soil") - DebugSphere(hitLocation, 0.1, 255, 255, 0, 100) - DrawLine(playerCoord, hitLocation, 255, 255, 0, 100) - end - return false, "planting_not_suitable_soil", hitLocation, surfaceNormal, material - end - else - if visible then - debug("Ground not found") - DrawLine(playerCoord, target, 255, 0, 0, 255) - end - return false, "planting_too_steep", hitLocation, surfaceNormal, material - end -end - -function GetHeadingFromPoints(a, b) - if not a or not b then - return 0.0 - end - if a.x == b.x and a.y == b.y then - return 0.0 - end - if #(a - b) < 1 then - return 0.0 - end - - local theta = math.atan(b.x - a.x, a.y - b.y) - if theta < 0.0 then - theta = theta + (math.pi * 2) - end - return math.deg(theta) + 180 % 360 -end - -local inScenario = false -local WEAPON_UNARMED = `WEAPON_UNARMED` -local lastAction = 0 -function RunScenario(name, facing) - local playerPed = PlayerPedId() - ClearPedTasks(playerPed) - SetCurrentPedWeapon(playerPed, WEAPON_UNARMED) - if facing then - local heading = GetHeadingFromPoints(GetEntityCoords(playerPed), facing) - SetEntityHeading(playerPed, heading) - Wait(0) -- So it syncs before we start the scenario! - end - TaskStartScenarioInPlace(playerPed, name, 0, true) - inScenario = true -end - -RegisterNetEvent("esx_uteknark1:do") -AddEventHandler("esx_uteknark1:do", function(scenarioName, location) - if Config.Scenario[scenarioName] then - print("Got order for scenario " .. scenarioName) - CreateThread(function() - local begin = GetGameTimer() - RunScenario(Config.Scenario[scenarioName], location) - while GetGameTimer() <= begin + Config.ScenarioTime do - Wait(0) - end - if inScenario then - ClearPedTasks(PlayerPedId()) - end - inScenario = false - print("Scenario " .. scenarioName .. " ends") - end) - else - print("Got ordered to do invalid scenario " .. scenarioName) - end -end) - -RegisterNetEvent("esx_uteknark1:attempt_plant") -AddEventHandler("esx_uteknark1:attempt_plant", function() - local plantable, message, location, _, soil = getPlantingLocation() - if plantable then - TriggerServerEvent("esx_uteknark1:success_plant", location, soil) - lastAction = GetGameTimer() - else - makeToast(_U("planting_text"), _U(message)) - end -end) - -function DrawIndicator(location, color) - local range = 1.0 - DrawMarker( - 6, -- type (6 is a vertical and 3D ring) - location, - 0.0, - 0.0, - 0.0, -- direction (?) - -90.0, - 0.0, - 0.0, -- rotation (90 degrees because the right is really vertical) - range, - range, - range, -- scale - color[1], - color[2], - color[3], - color[4], - false, -- bob - false, -- face camera - 2, -- dunno, lol, 100% cargo cult - false, -- rotates - 0, - 0, -- texture - false -- Projects/draws on entities - ) -end - -CreateThread(function() - local drawDistance = Config.Distance.Draw - drawDistance = drawDistance * 1.01 -- So they don't fight about it, culling is at a slightly longer range - while true do - local now = GetGameTimer() - local playerPed = PlayerPedId() - - if inScenario then - debug("In scenario", inScenario) - end - - if #activePlants > 0 then - debug(#activePlants, "active plants") - local myLocation = GetEntityCoords(playerPed) - local closestDistance - local closestPlant - local closestIndex - for i, plant in ipairs(activePlants) do - local distance = #(plant.at - myLocation) - if not DoesEntityExist(plant.object) then - table.remove(activePlants, i) - elseif distance > drawDistance then - DeleteObject(plant.object) - plant.node.data.object = nil - table.remove(activePlants, i) - elseif not closestDistance or distance < closestDistance then - closestDistance = distance - closestPlant = plant - closestIndex = i - end - end - if closestDistance and not IsPedInAnyVehicle(playerPed) then - debug("Closest plant at", closestDistance, "meters") - if closestDistance <= Config.Distance.Interact then - local stage = Growth[closestPlant.stage] - debug("Closest plant has ID", closestPlant.id) - debug("Closest pant is stage", closestPlant.stage) - DrawIndicator(closestPlant.at + stage.marker.offset, stage.marker.color) - debug("Within intraction distance!") - DisableControlAction(0, 44, true) -- Disable INPUT_COVER, as it's used to destroy plants - if now >= lastAction + Config.ActionTime then - if IsDisabledControlJustPressed(0, 44) then - lastAction = now - table.remove(activePlants, closestIndex) - DeleteObject(closestPlant.object) - TriggerServerEvent("esx_uteknark1:remove", closestPlant.id, myLocation) - else - if stage.interact then - interactHelp(closestPlant.stage, _U(stage.label)) - if IsControlJustPressed(0, 38) then - lastAction = now - TriggerServerEvent("esx_uteknark1:frob", closestPlant.id, myLocation) - end - else - passiveHelp(closestPlant.stage, _U(stage.label)) - end - end - end - end - end - Wait(0) - else - Wait(500) - end - end -end) - -CreateThread(function() - local drawDistance = Config.Distance.Draw - while true do - local here = GetEntityCoords(PlayerPedId()) - cropstate.octree:searchSphereAsync(here, drawDistance, function(entry) - if not entry.data.object and not entry.data.deleted then - local stage = entry.data.stage or 1 - local model = Growth[stage].model - if not model or not IsModelValid(model) then - Citizen.Trace(tostring(model) .. " is not a valid model!\n") - model = `prop_mp_cone_01` - end - if not HasModelLoaded(model) then - RequestModel(model) - local begin = GetGameTimer() - while not HasModelLoaded(model) and GetGameTimer() < begin + 2500 do - Wait(0) - end - end - if not HasModelLoaded(model) then - Citizen.Trace("Failed to load model for growth stage " .. stage .. ", but will retry shortly!\n") - Wait(2500) - else - local offset = Growth[stage].offset or vector3(0, 0, 0) - local weed = CreateObject(model, entry.bounds.location + offset, false, false, false) - local heading = math.random(0, 359) * 1.0 - SetEntityHeading(weed, heading) - FreezeEntityPosition(weed, true) - SetEntityCollision(weed, false, true) - if Config.SetLOD then - SetEntityLodDist(weed, math.floor(drawDistance)) - end - table.insert(activePlants, { node = entry, object = weed, at = entry.bounds.location, stage = stage, id = entry.data.id }) - entry.data.object = weed - SetModelAsNoLongerNeeded(model) - end - end - end, true) - Wait(1500) - end -end) - -function deleteActivePlants() - for _, plant in ipairs(activePlants) do - if DoesEntityExist(plant.object) then - DeleteObject(plant.object) - end - end - activePlants = {} -end - -AddEventHandler("onResourceStop", function(resourceName) - if resourceName == GetCurrentResourceName() then - deleteActivePlants() - if inScenario then - ClearPedTasksImmediately(PlayerPedId()) - end - end -end) - -RegisterNetEvent("esx_uteknark1:toggle_debug") -AddEventHandler("esx_uteknark1:toggle_debug", function() - if not debug.active then - serverlog("enabled debugging") - debug.active = true - else - serverlog("disabled debugging") - debug.active = false - end -end) - -RegisterNetEvent("esx_uteknark1:pyromaniac") -AddEventHandler("esx_uteknark1:pyromaniac", function(location) - if Config.Burn.Enabled then - local myLocation = GetEntityCoords(PlayerPedId()) - if not location then - location = myLocation + vector3(0, 0, -1) -- Because the ped location is one meter off the ground. - end - if #(location - myLocation) <= Config.Distance.Draw then - CreateThread(function() - local begin = GetGameTimer() - if not HasNamedPtfxAssetLoaded(Config.Burn.Effect) then - RequestNamedPtfxAsset(Config.Burn.Collection) - while not HasNamedPtfxAssetLoaded(Config.Burn.Collection) and GetGameTimer() <= begin + Config.Burn.Duration do - Wait(0) - end - if not HasNamedPtfxAssetLoaded(Config.Burn.Collection) then - print("UteKnark failed to load particle effects asset " .. Config.Burn.Collection) - end - end - UseParticleFxAsset(Config.Burn.Collection) - local handle = StartParticleFxLoopedAtCoord(Config.Burn.Effect, location + Config.Burn.Offset, Config.Burn.Rotation, Config.Burn.Scale * 1.0, false, false, false) - while GetGameTimer() <= begin + Config.Burn.Duration do - Wait(0) - end - StopParticleFxLooped(handle, 0) - RemoveNamedPtfxAsset(Config.Burn.Collection) - end) - end - end -end) - -CreateThread(function() - local ready = false - while true do - if ready then - if debug.active then - local message = getPlantingLocation(true) - if message then - debug("Planting message:", _U(message)) - end - debug:flush() - end - Wait(0) - else - if NetworkIsSessionStarted() then - ready = true - cropstate:bulkData() - else - Wait(100) - end - end - end -end) - -RegisterNetEvent("esx_uteknark1:groundmat") -AddEventHandler("esx_uteknark1:groundmat", function() - local material = getPlantingLocation(true) - TriggerEvent("chat:addMessage", { args = { "Ground material", material } }) - serverlog("Ground material:", material) - - if Config.Soil[material] then - local quality = Config.Soil[material] - TriggerEvent("chat:addMessage", { args = { "Soil quality", quality } }) - serverlog("Soil quality:", quality) - else - TriggerEvent("chat:addMessage", { args = { "Material not whitelisted" } }) - serverlog("Material not whitelisted") - end -end) - -RegisterNetEvent("esx_uteknark1:test_forest") -AddEventHandler("esx_uteknark1:test_forest", function(count, randomStage) - local origin = GetEntityCoords(PlayerPedId()) - - TriggerEvent("chat:addMessage", { args = { "UteKnark", "Target forest size: " .. count } }) - local column = math.ceil(math.sqrt(count)) - TriggerEvent("chat:addMessage", { args = { "UteKnark", "Column size: " .. column } }) - - local offset = (column * Config.Distance.Space) / 2 - offset = vector3(-offset, -offset, 5) - local cursor = origin + offset - local planted = 0 - local forest = {} - while planted < count do - local found, Z = GetGroundZFor_3dCoord(cursor.x, cursor.y, cursor.z, false) - if found then - local stage = (planted % #Growth) + 1 - if randomStage then - stage = math.random(#Growth) - end - table.insert(forest, { location = vector3(cursor.x, cursor.y, Z), stage = stage }) - end - cursor = cursor + vector3(0, Config.Distance.Space, 0) - planted = planted + 1 - if planted % column == 0 then - Wait(0) - cursor = cursor + vector3(Config.Distance.Space, -(Config.Distance.Space * column), 0) - end - end - TriggerEvent("chat:addMessage", { args = { "UteKnark", "Actual viable locations: " .. #forest } }) - TriggerServerEvent("esx_uteknark1:test_forest", forest) -end) diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/config.lua b/server-data/resources/[esx_addons]/esx_uteknark1/config.lua deleted file mode 100644 index 19166abf0..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/config.lua +++ /dev/null @@ -1,55 +0,0 @@ -Config = { - Locale = "it", - Distance = { -- All distances in meters - Draw = 150.0, -- How close to a plant do you need to be to see it? - Interact = 1.5, -- How close do you need to be to interact? - Space = 1.2, -- How far apart do the plants need to be planted? - Above = 5.0, -- How much clear space above the planting space do you need to plant? - }, - SetLOD = false, -- Should plant object LOD be messed with? (Might cause plant invisibility on very low settings!) - ActionTime = 10000, -- How many milliseconds does an action take (planting, destroying, harvesting, tending) - ScenarioTime = 3000, -- How long should the scenario/animations run? - MaxGroundAngle = 0.6, -- How tilted can the ground be and still hold plants? - Items = { -- What items are used? - Seed = "coke_seed", -- Used to plant the weed - Tend = nil, -- Optional item to progress growth cycle - Product = "coke", -- What item is given when you harvest? - }, - Scenario = { - Plant = "WORLD_HUMAN_GARDENER_PLANT", - Frob = "PROP_HUMAN_BUM_BIN", - Destroy = "WORLD_HUMAN_STAND_FIRE", - }, - Burn = { -- Burn effect when destroying a plant - Enabled = true, -- Is the burn effect even enabled? - Collection = "scr_mp_house", -- "Particle effect asset" in RAGE - Effect = "scr_mp_int_fireplace_sml", -- Which specific effect in that asset? - Scale = 1.5, -- Some are big, some are small, so adjusting to your needs makes sense - Rotation = vector3(0, 0, 0), -- Because some effects point in unexpected directions - Offset = vector3(0, 0, 0.2), -- The distance from the plant root location - Duration = 20000, -- How long should it burn, in milliseconds? - }, - Yield = { 5, 10 }, -- How many Items.Product does each plant yield? {5,10} means "from 5 to 10, inclusive" - YieldSeed = { 0, 1 }, -- Same as Yield, except for the amount of seeds you get back - TimeMultiplier = 1.0, -- Multiplier for the growth/tend times - Soil = { - -- What soil types can you grow on, and what are their multiplers/divisors? Higher is better. - -- 0.5 means growing takes twice the time and you have half as much time to tend or harvest - [2409420175] = 1.0, - -- [951832588] = 0.5, - [3008270349] = 0.8, - [3833216577] = 1.0, - [223086562] = 1.1, - [1333033863] = 0.9, - [4170197704] = 1.0, - [3594309083] = 0.8, - [2461440131] = 0.8, - [1109728704] = 1.5, - [2352068586] = 1.1, - [1144315879] = 0.9, - [581794674] = 1.1, - [2128369009] = 0.8, - [-461750719] = 1.0, - [-1286696947] = 1.0, - }, -} diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/esx_uteknark.sql b/server-data/resources/[esx_addons]/esx_uteknark1/esx_uteknark.sql deleted file mode 100644 index c5e591012..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/esx_uteknark.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE `uteknark1` ( - `id` INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, - `stage` INT(3) UNSIGNED NOT NULL DEFAULT 1, - `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `x` FLOAT(10) NOT NULL, - `y` FLOAT(10) NOT NULL, - `z` FLOAT(10) NOT NULL, - `soil` BIGINT(20) NOT NULL, - INDEX (`stage`, `time`) -); diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/fxmanifest.lua b/server-data/resources/[esx_addons]/esx_uteknark1/fxmanifest.lua deleted file mode 100644 index fafcdbaaf..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/fxmanifest.lua +++ /dev/null @@ -1,28 +0,0 @@ -fx_version("adamant") -game("gta5") -lua54("yes") -version("1.0.1") -description("ESX UteKnark by DemmyDemon - bitpredator rebuild") - -shared_scripts({ - "@es_extended/locale.lua", - "locales/*.lua", - "config.lua", - "lib/*.lua", - "@es_extended/imports.lua", -}) - -client_scripts({ - "lib/debug.lua", - "cl_uteknark.lua", -}) - -server_scripts({ - "@mysql-async/lib/MySQL.lua", - "sv_uteknark.lua", -}) - -dependencies({ - "es_extended", - "mysql-async", -}) diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/lib/cropstate.lua b/server-data/resources/[esx_addons]/esx_uteknark1/lib/cropstate.lua deleted file mode 100644 index 4005ff1e2..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/lib/cropstate.lua +++ /dev/null @@ -1,233 +0,0 @@ -local onServer = IsDuplicityVersion() -local cropstateMethods = { - plant = function(instance, location, soil, stage) - if onServer then - stage = stage or 1 - MySQL.Async.insert("INSERT INTO `uteknark1` (`x`, `y`, `z`, `soil`, `stage`) VALUES (@x, @y, @z, @soil, @stage);", { - ["@x"] = location.x, - ["@y"] = location.y, - ["@z"] = location.z, - ["@soil"] = soil, - ["@stage"] = stage, - }, function(id) - instance:import(id, location, stage, os.time(), soil) - TriggerClientEvent("esx_uteknark1:planted", -1, id, location, stage) - verbose("Plant", id, "was planted.") - end) - else - Citizen.Trace("Attempt to cropstate:plant on client. Not going to work.\n") - end - end, - load = function(instance, callback) - if onServer then - verbose("Loading...") - MySQL.Async.fetchAll("SELECT `id`, `stage`, UNIX_TIMESTAMP(`time`) AS `time`, `x`, `y`, `z`, `soil` FROM `uteknark1`;", {}, function(rows) - CreateThread(function() - for rownum, row in ipairs(rows) do - instance:import(row.id, vector3(row.x, row.y, row.z), row.stage, row.time, row.soil) - if rownum % 50 == 0 then - Wait(0) - end - end - if callback then - callback(#rows) - end - instance.loaded = true - verbose("Load complete") - end) - end) - else - Citizen.Trace("Attempt to cropstate:load on client. Not going to work\n") - end - end, - import = function(instance, id, location, stage, time, soil) - local success, object = instance.octree:insert(location, 0.01, { id = id, stage = stage, time = time, soil = soil }) - if not success then - Citizen.Trace(string.format("Uteknark failed to import plant with ID %i into octree\n", id)) - end - instance.index[id] = object - end, - update = function(instance, id, stage) - local plant = instance.index[id] - plant.data.stage = stage - if onServer then - plant.data.time = os.time() - MySQL.Async.execute("UPDATE `uteknark1` SET `stage` = @stage WHERE `id` = @id LIMIT 1;", { - ["@id"] = id, - ["@stage"] = stage, - }, function(_) - TriggerClientEvent("esx_uteknark1:update", -1, id, stage) - verbose("Set plant", id, "to stage", stage) - end) - elseif plant.data.object then - if DoesEntityExist(plant.data.object) then - DeleteObject(plant.data.object) - end - plant.data.object = nil - end - end, - remove = function(instance, id, withPyro) - local object = instance.index[id] - local location = object.bounds.location - object.data.deleted = true - if object.node then - -- NOTE: In rare cases the node is being re-assigned while a remove is happening. - -- This cases `node` to be nil here, crashing the script. - -- Technically this is a memory leak because the object will then exist in the reflowed node. - -- It's not a real problem, however, as it's exceedingly rare and not even a whole kilobyte. - -- The object will still get deleted, and is not propagated to clients, so it's just a data ghost. - object.node:remove(object.oindex) - end - instance.index[id] = nil - if onServer then - MySQL.Async.execute("DELETE FROM `uteknark1` WHERE `id` = @id LIMIT 1;", { ["@id"] = id }, function() - TriggerClientEvent("esx_uteknark1:removePlant", -1, id) - if withPyro then - TriggerClientEvent("esx_uteknark1:pyromaniac", -1, location) - end - verbose("Removed plant", id) - end) - else - if object.data.object then - if DoesEntityExist(object.data.object) then - DeleteObject(object.data.object) - end - object.data.object = nil - end - end - end, - bulkData = function(instance, target) - if onServer then - verbose("Preparing bulk plant data for player", target) - target = target or -1 - while not instance.loaded do - Wait(1000) - end - local forest = {} - for id, plant in pairs(instance.index) do - if type(id) == "number" then -- Because there is a key called `hashtable`! - table.insert(forest, { id = id, location = plant.bounds.location, stage = plant.data.stage }) - end - end - TriggerClientEvent("esx_uteknark1:bulk_data", target, forest) - else - TriggerServerEvent("esx_uteknark1:request_data") - end - end, -} - -local cropstateMeta = { - __newindex = function() - -- Do I even need this? - end, - __index = function(instance, key) - return instance._methods[key] - end, -} - -cropstate = { - index = { - hashtable = true, -- To *force* lua to make it a hashtable rather than an array. - }, - octree = pOctree(vector3(0, 1500, 0), vector3(12000, 13000, 2000)), - loaded = false, - _methods = cropstateMethods, -} - -setmetatable(cropstate, cropstateMeta) - -if onServer then - RegisterNetEvent("esx_uteknark1:request_data") - AddEventHandler("esx_uteknark1:request_data", function() - cropstate:bulkData(source) - end) - - RegisterNetEvent("esx_uteknark1:remove") - AddEventHandler("esx_uteknark1:remove", function(plantID, nearLocation) - local src = source - local plant = cropstate.index[plantID] - if plant then - local plantLocation = plant.bounds.location - local distance = #(nearLocation - plantLocation) - if distance <= Config.Distance.Interact then - cropstate:remove(plantID, true) - makeToast(src, _U("interact_text"), _U("interact_destroyed")) - doScenario(src, "Destroy", plantLocation) - else - Citizen.Trace(GetPlayerName(src) .. " (" .. src .. ") is too far away from " .. plantID .. " to remove it (" .. distance("m)\n")) - end - else - Citizen.Trace(GetPlayerName(src) .. " (" .. src .. ") tried to remove plant " .. plantID .. ": That plant does not exist!\n") - TriggerClientEvent("esx_uteknark1:remove", src, plantID) - end - end) - - RegisterNetEvent("esx_uteknark1:frob") - AddEventHandler("esx_uteknark1:frob", function(plantID, nearLocation) - local src = source - local plant = cropstate.index[plantID] - if plant then - local plantLocation = plant.bounds.location - local distance = #(nearLocation - plantLocation) - if distance <= Config.Distance.Interact then - local stageData = Growth[plant.data.stage] - if stageData.interact then - if stageData.yield then - local yield = math.random(Config.Yield[1], Config.Yield[2]) - local seeds = math.random(Config.YieldSeed[1], Config.YieldSeed[2]) - if GiveItem(src, Config.Items.Product, yield) then - cropstate:remove(plantID) - doScenario(src, "Frob", plantLocation) - if seeds > 0 and GiveItem(src, Config.Items.Seed, seeds) then - makeToast(src, _U("interact_text"), _U("interact_harvested", yield, seeds)) - else - makeToast(src, _U("interact_text"), _U("interact_harvested", yield, 0)) - end - else - makeToast(src, _U("interact_text"), _U("interact_full", yield)) - end - else - if #Growth > plant.data.stage then - if not Config.Items.Tend or TakeItem(src, Config.Items.Tend) then - makeToast(src, _U("interact_text"), _U("interact_tended")) - cropstate:update(plantID, plant.data.stage + 1) - doScenario(src, "Frob", plantLocation) - else - makeToast(src, _U("interact_text"), _U("interact_missing_item")) - end - end - end - else - Citizen.Trace(GetPlayerName(src) .. " (" .. src .. ") tried to frob plant " .. plantID .. ": That plant is in a non-frobbable stage!\n") - end - else - Citizen.Trace(GetPlayerName(src) .. " (" .. src .. ") is too far away from " .. plantID .. " to frob it (" .. distance("m)\n")) - end - else - Citizen.Trace(GetPlayerName(src) .. " (" .. src .. ") tried to frob plant " .. plantID .. ": That plant does not exist!\n") - end - end) -else - RegisterNetEvent("esx_uteknark1:bulk_data") - AddEventHandler("esx_uteknark1:bulk_data", function(forest) - for _, plant in ipairs(forest) do - cropstate:import(plant.id, plant.location, plant.stage) - end - cropstate.loaded = true - end) - - RegisterNetEvent("esx_uteknark1:planted") - AddEventHandler("esx_uteknark1:planted", function(id, location, stage) - cropstate:import(id, location, stage) - end) - - RegisterNetEvent("esx_uteknark1:update") - AddEventHandler("esx_uteknark1:update", function(plantID, stage) - cropstate:update(plantID, stage) - end) - - RegisterNetEvent("esx_uteknark1:removePlant") - AddEventHandler("esx_uteknark1:removePlant", function(plantID) - cropstate:remove(plantID) - end) -end diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/lib/debug.lua b/server-data/resources/[esx_addons]/esx_uteknark1/lib/debug.lua deleted file mode 100644 index 84a4d4904..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/lib/debug.lua +++ /dev/null @@ -1,103 +0,0 @@ -local ENABLED = false -local table = table - -local function drawDebugLine(instance, line) - BeginTextCommandDisplayText("STRING") - SetTextCentre(false) - SetTextJustification(1) - SetTextScale(instance.scale, instance.scale) - SetTextFont(instance.font) - SetTextOutline() - AddTextComponentSubstringPlayerName(line) - DrawText(instance.x, instance.y) - instance.y = instance.y + instance.lineHeight -end - -local debugMethods = { - add = function(instance, ...) - local numElements = select("#", ...) - local elements = { ... } - local line = "" - for i = 1, numElements do - local element = tostring(elements[i]) - if i ~= 1 then - line = line .. " " - end - line = line .. element - end - table.insert(instance.buffer, line) - while #instance.buffer > 25 do - table.remove(instance.buffer, 1) - end - end, - flush = function(instance) - if instance.active then - drawDebugLine(instance, instance.header) - for _, debugEntry in ipairs(instance.buffer) do - drawDebugLine(instance, debugEntry) - end - - instance.y = instance.reset - end - instance.buffer = {} - end, -} - -local debugMeta = { - __call = function(instance, ...) - instance:add(...) - end, - __newindex = function() - -- Just drop. Ignore. Go away. - end, - __index = function(instance, key) - return instance._methods[key] - end, -} - -debug = { - active = ENABLED, - header = "~y~[Debugging " .. GetCurrentResourceName() .. "]", - x = 0.02, - y = 0.33, - reset = 0.33, - lineHeight = 0.015, - font = 0, - scale = 0.25, - spacing = 0.2, - buffer = {}, - _methods = debugMethods, -} -setmetatable(debug, debugMeta) - -function DebugSphere(where, scale, r, g, b, a) - scale = scale or 1.0 - r = r or 255 - b = b or 255 - g = g or 255 - a = a or 128 - DrawMarker( - 28, -- type - where, -- location - 0.0, - 0.0, - 0.0, -- direction (?) - 0.0, - 0.0, - 0.0, -- rotation - scale, - scale, - scale, -- scale - r, - g, - b, - a, -- color - false, -- bob - false, -- face camera - 2, -- dunno, lol, 100% cargo cult - false, -- rotates - 0, - 0, -- texture - false -- Projects/draws on entities - ) -end diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/lib/growth.lua b/server-data/resources/[esx_addons]/esx_uteknark1/lib/growth.lua deleted file mode 100644 index b68d8623e..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/lib/growth.lua +++ /dev/null @@ -1,93 +0,0 @@ ---[[ PLANT GROWTH STAGES - -Each plant starts out at stage 1 and starting consumes -one Config.Items.Seed immediately, and the first timer starts running. -Interacting with the plant at this time destroys it. - -When the time is up, it progresses to the next stage, which is -a mode='tend' stage. Interaction at this stage consumes one -Config.Items.Tend, or is free if the Tend Object is not specified. -Interaction is possible at any time. Failure to interact before the -time runs out causes the plant to die. - -This continuses for all grow/tend cycles until a mode='yield' cycle -is arrived at. Interacting with the plant at this time will yield -between Config.Yield[1] and Config.Yield[2] of Config.Items.Product -and between Config.YieldSeed[1] and Config.YieldSeed[2] seeds. -By default this means between 5 and 10 weed_pooch, and between 0 -and 1 weed_seed - ---]] - -local Colors = { - Growing = { 0, 255, 128, 128 }, - Tend = { 255, 255, 128, 128 }, - Harvest = { 255, 128, 128, 128 }, -} - -Growth = { - { -- 1 - label = "growth_seedling", - model = `prop_plant_01a`, - offset = vector3(0, 0, -1), - time = 1, -- One minute - marker = { - offset = vector3(0, 0, 0.05), - color = Colors.Growing, - }, - }, - { -- 2 - label = "growth_tend", - model = `prop_plant_01a`, - offset = vector3(0, 0, -0.8), - interact = true, - time = 20, -- Twenty minutes - marker = { - offset = vector3(0, 0, 0.3), - color = Colors.Tend, - }, - }, - { -- 3 - label = "growth_growing", - model = `prop_plant_01a`, - offset = vector3(0, 0, -0.6), - time = 480, -- 480 minutes is 8 hours - marker = { - offset = vector3(0, 0, 0.55), - color = Colors.Growing, - }, - }, - { -- 4 - label = "growth_tend", - model = `prop_plant_01a`, - offset = vector3(0, 0, -0.4), - interact = true, - time = 960, -- 960 minutes is 16 hours - marker = { - offset = vector3(0, 0, 0.8), - color = Colors.Tend, - }, - }, - { -- 5 - label = "growth_growing", - model = `prop_plant_01a`, - offset = vector3(0, 0, -0.6), - time = 480, -- 480 minutes is 8 hours - marker = { - offset = vector3(0, 0, 1.05), - color = Colors.Growing, - }, - }, - { -- 6 - label = "growth_yield", - model = `prop_plant_01a`, - offset = vector3(0, 0, 0), - interact = true, - yield = true, - time = 960, -- 960 minutes is 16 hours - marker = { - offset = vector3(0, 0, 1.8), - color = Colors.Harvest, - }, - }, -} diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/lib/octree.lua b/server-data/resources/[esx_addons]/esx_uteknark1/lib/octree.lua deleted file mode 100644 index e9305bbf8..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/lib/octree.lua +++ /dev/null @@ -1,390 +0,0 @@ -local table = table -local vector3 = vector3 -local AXIS = { "x", "y", "z" } -local MAX_OBJECTS = 5 -local MAX_LEVELS = 50 - -local function intersects(box, item) - local intersect = { x = false, y = false, z = false } - ---[[ - for _, axis in ipairs(AXIS) do - if item.max[axis] > box.min[axis] and item.min[axis] < box.max[axis] then - intersect[axis] = true - end - end - return intersect.x and intersect.y and intersect.z, intersect -end - -function canFit(box, item) - local fit = { x = false, y = false, z = false } - for _, axis in ipairs(AXIS) do - if item.max[axis] <= box.max[axis] and item.min[axis] >= box.min[axis] then - fit[axis] = true - end - end - return fit.x and fit.y and fit.z, fit -end - -local function crossProduct(A, B) - return vector3( - A.y * B.z - A.z * B.y, -- X - A.z * B.x - A.x * B.z, -- Y - A.x * B.y - A.y * B.x -- Z - ) -end - -local function dotProduct(A, B) - return A.x * B.x + A.y * B.y + A.z * B.z -end - -local function modulus(A) - return math.sqrt(dotProduct(A, A)) -end - -local function lineDistance(A, B, C) - local AB = B - A - local AC = C - A - local modab = modulus(AB) - - local dotProductACAB = dotProduct(AC, AB) - if dotProductACAB <= 0.0 then - return modulus(AC) --,0.0 - end - - local BC = C - B - local dotProductBCAB = dotProduct(BC, AB) - if dotProductBCAB >= 0.0 then - return modulus(BC) --,1.0 - end - - local cpabac = crossProduct(AB, AC) - local modcpabac = modulus(cpabac) - return modcpabac / modab -end - -function pointInside(box, point) - local inside = { x = false, y = false, z = false } - for _, axis in ipairs(AXIS) do - if point[axis] >= box.min[axis] and point[axis] <= box.max[axis] then - inside[axis] = true - end - end - return inside.x and inside.y and inside.z, inside -end - -local boundsMeta = { - __newindex = function() - -- Drop. Ignore. Go away. - end, - __index = function(instance, key) - return instance._methods[key] - end, -} -local boundsMethods = { - volume = function(instance) - local width = instance.max.x - instance.min.x - local breadth = intance.max.y - instance.min.y - local height = instance.max.z - instance.min.z - return width * breadth * height - end, - canFit = function(instance, location, dimensions) - if getmetatable(location) == boundsMeta then - return canFit(instance, location) - else - local _ = pBoxBounds(location, dimensions) - return canFit(instance, location) - end - end, - intersects = function(instance, location, dimensions) - if getmetatable(location) == boundsMeta then - return intersects(instance, location) - else - local item = pBoxBounds(location, dimensions) - return intersects(instance, item) - end - end, - inside = function(instance, point) - if #(instance.location - point) <= instance.radius then - return pointInside(instance, point) - end - return false - end, - draw = function(instance, r, g, b, a) - r = r or 255 - g = g or 0 - b = b or 0 - a = a or 128 - -- Upper layer - DrawLine(instance.max.x, instance.max.y, instance.max.z, instance.min.x, instance.max.y, instance.max.z, r, g, b, a) - DrawLine(instance.min.x, instance.max.y, instance.max.z, instance.min.x, instance.min.y, instance.max.z, r, g, b, a) - DrawLine(instance.min.x, instance.min.y, instance.max.z, instance.max.x, instance.min.y, instance.max.z, r, g, b, a) - DrawLine(instance.max.x, instance.min.y, instance.max.z, instance.max.x, instance.max.y, instance.max.z, r, g, b, a) - - -- Lower layer - DrawLine(instance.max.x, instance.max.y, instance.min.z, instance.min.x, instance.max.y, instance.min.z, r, g, b, a) - DrawLine(instance.min.x, instance.max.y, instance.min.z, instance.min.x, instance.min.y, instance.min.z, r, g, b, a) - DrawLine(instance.min.x, instance.min.y, instance.min.z, instance.max.x, instance.min.y, instance.min.z, r, g, b, a) - DrawLine(instance.max.x, instance.min.y, instance.min.z, instance.max.x, instance.max.y, instance.min.z, r, g, b, a) - - -- Connectors - DrawLine(instance.max.x, instance.max.y, instance.max.z, instance.max.x, instance.max.y, instance.min.z, r, g, b, a) - DrawLine(instance.min.x, instance.max.y, instance.max.z, instance.min.x, instance.max.y, instance.min.z, r, g, b, a) - DrawLine(instance.min.x, instance.min.y, instance.max.z, instance.min.x, instance.min.y, instance.min.z, r, g, b, a) - DrawLine(instance.max.x, instance.min.y, instance.max.z, instance.max.x, instance.min.y, instance.min.z, r, g, b, a) - --DrawBox(instance.min,instance.max,r,g,b,math.floor(a/2)) - end, -} - -function pBoxBounds(location, dimensions) - if type(dimensions) == "number" then -- Assume it's a cube - dimensions = vector3(dimensions, dimensions, dimensions) - end - local half = dimensions / 2 - local bounds = { - location = location, - dimensions = dimensions, - max = vector3(location.x + half.x, location.y + half.y, location.z + half.z), - min = vector3(location.x - half.x, location.y - half.y, location.z - half.z), - _methods = boundsMethods, - } - bounds.radius = #(bounds.max - bounds.min) / 2 - return setmetatable(bounds, boundsMeta) -end - -local nodeMethods = { - canFit = function(instance, location, dimensions) - local box = instance.bounds - if getmetatable(location) == boundsMeta then - return canFit(box, location) - end - local item = pBoxBounds(location, dimensions) - return canFit(box, item) - end, - intersects = function(instance, location, dimensions) - local box = instance.bounds - if getmetatable(location) == boundsMeta then - return intersects(box, location) - end - local item = pBoxBounds(location, dimensions) - return intersects(box, item) - end, - selectNode = function(instance, item) - if instance._data.nodes then - for _, node in ipairs(instance._data.nodes) do - if node:canFit(item) then - return node - end - end - end - end, - split = function(instance) - if not instance._data.nodes then - --pPushText('Splitting '..instance.level..' ('..GetGameTimer()..')') - instance._data.nodes = {} - local dim = instance._data.bounds.dimensions - local pos = instance._data.bounds.location - local quarter = dim / 4 - local half = dim / 2 - local nextLevel = instance._data.level + 1 - table.insert(instance._data.nodes, pOctree(vector3(pos.x + quarter.x, pos.y + quarter.x, pos.z + quarter.z), half, nextLevel)) - table.insert(instance._data.nodes, pOctree(vector3(pos.x - quarter.x, pos.y + quarter.x, pos.z + quarter.z), half, nextLevel)) - table.insert(instance._data.nodes, pOctree(vector3(pos.x + quarter.x, pos.y - quarter.x, pos.z + quarter.z), half, nextLevel)) - table.insert(instance._data.nodes, pOctree(vector3(pos.x - quarter.x, pos.y - quarter.x, pos.z + quarter.z), half, nextLevel)) - - table.insert(instance._data.nodes, pOctree(vector3(pos.x + quarter.x, pos.y + quarter.x, pos.z - quarter.z), half, nextLevel)) - table.insert(instance._data.nodes, pOctree(vector3(pos.x - quarter.x, pos.y + quarter.x, pos.z - quarter.z), half, nextLevel)) - table.insert(instance._data.nodes, pOctree(vector3(pos.x + quarter.x, pos.y - quarter.x, pos.z - quarter.z), half, nextLevel)) - table.insert(instance._data.nodes, pOctree(vector3(pos.x - quarter.x, pos.y - quarter.x, pos.z - quarter.z), half, nextLevel)) - end - end, - insert = function(instance, location, dimensions, data) - data = data or {} - if type(location) ~= "vector3" then - error("First argument to :insert must be a vector3 for location, got " .. tyoe(location), 2) - end - if type(dimensions) == "number" then -- Presume cube - dimensions = vector3(dimensions, dimensions, dimensions) - elseif type(dimensions) ~= "vector3" then - error("Second argument to :insert must be either a number (if cube) or a vector3 for dimetions, got " .. type(dimensions), 2) - end - local object = { - data = data, - bounds = pBoxBounds(location, dimensions), - } - if instance:canFit(object.bounds) then - local node = instance:selectNode(object.bounds) - if node then - return node:insert(location, dimensions, data) - end - - object.node = instance - object.oindex = #instance._data.objects + 1 - table.insert(instance._data.objects, object) - completeSuccess = true - - if #instance._data.objects > MAX_OBJECTS and instance._data.level < MAX_LEVELS then - local limboObjects = instance._data.objects - instance._data.objects = {} - if not instance._data.nodes then - instance:split() - end - for _, lobject in ipairs(limboObjects) do - local newNode = instance:selectNode(lobject.bounds) - if newNode then - if not newNode:insert(lobject.bounds.location, lobject.bounds.dimensions, lobject.data) then - completeSuccess = false - end - else - lobject.oindex = #instance._data.objects + 1 - table.insert(instance._data.objects, lobject) - end - end - end - return completeSuccess, object - else - error("Object inserted by :insert does not fit in node at level " .. instance._data.level, 2) - end - end, - remove = function(instance, index) - if instance._data.objects[index] then - local removed = instance._data.objects[index] - removed.node = nil - removed.oindex = nil - table.remove(instance._data.objects, index) - for i, object in ipairs(instance._data.objects) do - object.oindex = i - end - return removed - end - end, - all = function(instance, funcref) - if type(funcref) == "function" then - for _, item in ipairs(instance._data.objects) do - funcref(item) - end - if instance._data.nodes then - for _, node in ipairs(instance._data.nodes) do - node:all(funcref) - end - end - end - end, - searchBox = function(instance, location, dimensions, hits) - hits = hits or {} - local searchBox - dimensions = dimensions or vector3(1, 1, 1) - if getmetatable(location) == boundsMeta then - searchBox = location - else - searchBox = pBoxBounds(location, dimensions) - end - if instance._data.bounds:intersects(searchBox) then - for _, object in ipairs(instance._data.objects) do - if object.bounds:intersects(searchBox) then - table.insert(hits, object) - end - end - if instance._data.nodes then - for _, node in ipairs(instance._data.nodes) do - node:searchBox(searchBox, dimensions, hits) - end - end - end - return hits - end, - searchSphereAsync = function(instance, location, radius, callback, slowMode) - CreateThread(function() - local distance = #(location - instance._data.bounds.location) - if distance <= radius + instance._data.bounds.radius then - for _, object in pairs(instance._data.objects) do - local objectDistance = #(location - object.bounds.location) - if objectDistance <= radius + object.bounds.radius then - callback(object) - end - end - if instance._data.nodes then - for _, node in ipairs(instance._data.nodes) do - if slowMode then - Wait(0) - end - node:searchSphereAsync(location, radius, callback, slowMode) - end - end - end - end) - end, - searchSphere = function(instance, location, radius, hits) - hits = hits or {} - local distance = #(location - instance._data.bounds.location) - if distance <= radius + instance._data.bounds.radius then - for _, object in pairs(instance._data.objects) do - local objectDistance = #(location - object.bounds.location) - if objectDistance <= radius + object.bounds.radius then - table.insert(hits, object) - end - end - if instance._data.nodes then - for _, node in ipairs(instance._data.nodes) do - node:searchSphere(location, radius, hits) - end - end - end - return hits - end, - searchRay = function(instance, from, to, thickness, hits) - thickness = thickness or 0 - hits = hits or {} - local distance = lineDistance(from, to, instance._data.bounds.location) - local intersectRange = thickness + instance._data.bounds.radius - if distance <= intersectRange then - for _, object in ipairs(instance._data.objects) do - local objDistance = lineDistance(from, to, object.bounds.location) - local objIntersectRange = thickness + object.bounds.radius - if objDistance <= objIntersectRange then - table.insert(hits, object) - end - end - if instance._data.nodes then - for _, node in ipairs(instance._data.nodes) do - node:searchRay(from, to, thickness, hits) - end - end - end - return hits - end, -} -local octreeNodeMeta = { - __index = function(instance, key) - if instance._methods[key] then - return instance._methods[key] - else - return instance._data[key] - end - end, - __newindex = function(instance, key, value) - if instance._data[key] then - instance._data[key] = value - end - end, -} -local function newNode(location, dimensions, level) - level = level or 0 - if type(dimensions) == "number" then -- Presume it's a cube - dimensions = vector3(dimensions, dimensions, dimensions) - end - local new = { - _data = { - location = location or vector3(0, 0, 0), - dimensions = dimensions or vector3(1, 1, 1), - objects = {}, - level = level, - }, - _methods = nodeMethods, - } - new._data.bounds = pBoxBounds(new._data.location, new._data.dimensions) - return setmetatable(new, octreeNodeMeta) -end - -function pOctree(location, dimensions, startLevel) - return newNode(location, dimensions, startLevel) -end diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/locales/cz.lua b/server-data/resources/[esx_addons]/esx_uteknark1/locales/cz.lua deleted file mode 100644 index e21ef7bad..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/locales/cz.lua +++ /dev/null @@ -1,27 +0,0 @@ -Locales["cz"] = { - planting_text = "Zasazuji", - planting_ok = "Uspesne zasazena", - planting_in_vehicle = "Nemuzes zasazovat roslitu v aute.", - planting_too_steep = "Příliš strmí terén", - planting_too_far = "Musite trochu dal od sebe sázet.", - planting_not_suitable_soil = "Na tomto terene vase rostlina nevyroste", - planting_too_close = "Rostlina potrebuje vice prostoru", - planting_obstructed = "Najdete misto, kde je vice slunce.", - planting_no_seed = "Nemate zadne sazenice", - planting_failed = "~r~Nejaky problem nastal pri sazeni", - planting_too_fast = "Zasazuje prilis rychle za sebou", - status_active = "Faze ~1~/~1~~n~~INPUT_PICKUP~ ~a~~n~~INPUT_COVER~ Znicení", - status_passive = "Faze ~1~/~1~~n~~a~~n~~INPUT_COVER~ Znicit", - growth_seedling = "Momentalne zasazena~n~Bude potrebovat sklidit brzo.", - growth_tend = "Zahnojit rostlinu", - growth_growing = "Rostlina si vede, a roste v poradku.", - growth_yield = "Sklidit", - command_invalid = "Invakudbá: %s", - command_empty = "Verze %s", - interact_text = "Interakce", - interact_tended = "Rostlina zahnojena", - interact_destroyed = "Rostlina znicena", - interact_harvested = "Roslitna sklidena: %i finalni produkt, %i seminka", - interact_full = "Nemuzes toho vic unest", - interact_missing_item = "Chybi ti něco vice.", -} diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/locales/it.lua b/server-data/resources/[esx_addons]/esx_uteknark1/locales/it.lua deleted file mode 100644 index a2a62d14f..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/locales/it.lua +++ /dev/null @@ -1,27 +0,0 @@ -Locales["it"] = { - planting_text = "piantare", - planting_ok = "semina riuscita!", - planting_in_vehicle = "Gettare i semi dalla finestra, o cosa?", - planting_too_steep = "Troppo ripido!", - planting_too_far = "Un po' più vicino, forse?", - planting_not_suitable_soil = "Crescerà troppo male qui.", - planting_too_close = "Troppo vicino a un'altra pianta!", - planting_obstructed = "Trova un posto con più luce", - planting_no_seed = "Non hai semi", - planting_failed = "~r~Figli..! È successo qualcosa di brutto durante la semina!", - planting_too_fast = "rilassati, aspetta!", - status_active = "in crescita ~1~/~1~~n~~INPUT_PICKUP~ ~a~~n~~INPUT_COVER~ Distruggere", - status_passive = "in crescita ~1~/~1~~n~~a~~n~~INPUT_COVER~ Distruggere", - growth_seedling = "Piantato di recente.~n~Necessita di cure rapide!", - growth_tend = "Prenditi cura della pianta", - growth_growing = "Crescere e sta bene.", - growth_yield = "Raccolto", - command_invalid = "comando non valido: %s", - command_empty = "Versione %s", - interact_text = "Interazione delle piante", - interact_tended = "Pianta curata", - interact_destroyed = "pianta distrutta", - interact_harvested = "Pianta raccolta: %i erba, %i semi", - interact_full = "Non hai spazio per %i altra erba!", - interact_missing_item = "Non hai ciò di cui hai bisogno per prenderti cura di questa pianta!", -} diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/locales/sv.lua b/server-data/resources/[esx_addons]/esx_uteknark1/locales/sv.lua deleted file mode 100644 index ff14cb3a1..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/locales/sv.lua +++ /dev/null @@ -1,27 +0,0 @@ -Locales["sv"] = { - planting_text = "Plantering", - planting_ok = "Lyckad plantering!", - planting_in_vehicle = "Slänga frön ur fönstret, eller vad?", - planting_too_steep = "För brant, kompis!", - planting_too_far = "Lite närmre, kanske?", - planting_not_suitable_soil = "Här kommer det växa för dåligt.", - planting_too_close = "För nära en annan växt!", - planting_obstructed = "Hitta någonstans med mera ljus", - planting_no_seed = "Du har inga frön", - planting_failed = "~r~Jävlar! Något skit hände under planteringen!", - planting_too_fast = "Chilla, brorsan! Vänta lite!", - status_active = "Steg ~1~/~1~~n~~INPUT_PICKUP~ ~a~~n~~INPUT_COVER~ Förstör", - status_passive = "Steg ~1~/~1~~n~~a~~n~~INPUT_COVER~ Förstör", - growth_seedling = "Nyligen planterat.~n~Behöver vårtd snart!", - growth_tend = "Vårda växten", - growth_growing = "Växer och mår bra.", - growth_yield = "Skörda", - command_invalid = "Ogiltigt direktiv: %s", - command_empty = "Versjon %s", - interact_text = "Växtinteraktion", - interact_tended = "Växt vårdad", - interact_destroyed = "Växt förstörd", - interact_harvested = "Växt skördad: %i gräs, %i frön", - interact_full = "Du har inte plats med %i mer gräs!", - interact_missing_item = "Du har inte det du behöver för att vårda denna växten!", -} diff --git a/server-data/resources/[esx_addons]/esx_uteknark1/sv_uteknark.lua b/server-data/resources/[esx_addons]/esx_uteknark1/sv_uteknark.lua deleted file mode 100644 index bb720a28b..000000000 --- a/server-data/resources/[esx_addons]/esx_uteknark1/sv_uteknark.lua +++ /dev/null @@ -1,420 +0,0 @@ -local oneSyncEnabled = GetConvar("onesync_enabled", false) -local VERBOSE = false -local lastPlant = {} -local tickTimes = {} -local tickPlantCount = 0 -local VERSION = "1.1.4" - -AddEventHandler("playerDropped", function() - lastPlant[source] = nil -end) - -function log(...) - local numElements = select("#", ...) - local elements = { ... } - local line = "" - local prefix = "[" .. os.date("%H:%M:%S") .. "] " - suffix = "\n" - local resourceName = "<" .. GetCurrentResourceName() .. ">" - - for i = 1, numElements do - local entry = elements[i] - line = line .. " " .. tostring(entry) - end - Citizen.Trace(prefix .. resourceName .. line .. suffix) -end - -function verbose(...) - if VERBOSE then - log(...) - end -end - -if not oneSyncEnabled then - log("OneSync not available: Will have to trust client for locations!") -end - -function HasItem(who, what, count) - count = count or 1 - if ESX == nil then - log("HasItem: No ESX Object!") - return false - end - local xPlayer = ESX.GetPlayerFromId(who) - if xPlayer == nil then - log("HasItem: Failed to resolve xPlayer from", who) - return false - end - local itemspec = xPlayer.getInventoryItem(what) - if itemspec then - if itemspec.count >= count then - return true - else - return false - end - else - log("HasItem: Failed to get item data for item", what) - return false - end -end - -function TakeItem(who, what, count) - count = count or 1 - if ESX == nil then - log("TakeItem: No ESX Object!") - return false - end - local xPlayer = ESX.GetPlayerFromId(who) - if xPlayer == nil then - log("TakeItem: Failed to resolve xPlayer from", who) - return false - end - local itemspec = xPlayer.getInventoryItem(what) - if itemspec then - if itemspec.count >= count then - xPlayer.removeInventoryItem(what, count) - return true - else - return false - end - else - log("TakeItem: Failed to get item data for item", what) - return false - end -end - -function GiveItem(who, what, count) - count = count or 1 - if ESX == nil then - log("GiveItem: No ESX Object!") - return false - end - local xPlayer = ESX.GetPlayerFromId(who) - if xPlayer == nil then - log("GiveItem: Failed to resolve xPlayer from", who) - return false - end - local itemspec = xPlayer.getInventoryItem(what) - if itemspec then - if not itemspec.limit or itemspec.limit == -1 or itemspec.count + count <= itemspec.limit then - xPlayer.addInventoryItem(what, count) - return true - else - return false - end - else - log("GiveItem: Failed to get item data for item", what) - return false - end -end - -function makeToast(target, subject, message) - TriggerClientEvent("esx_uteknark1:make_toast", target, subject, message) -end -function inChat(target, message) - if target == 0 then - log(message) - else - TriggerClientEvent("chat:addMessage", target, { args = { "UteKnark", message } }) - end -end - -function plantSeed(location, soil) - local hits = cropstate.octree:searchSphere(location, Config.Distance.Space) - if #hits > 0 then - return false - end - - verbose("Planting at", location, "in soil", soil) - cropstate:plant(location, soil) - return true -end - -function doScenario(who, what, where) - verbose("Telling", who, "to", what, "at", where) - TriggerClientEvent("esx_uteknark1:do", who, what, where) -end - -RegisterNetEvent("esx_uteknark1:success_plant") -AddEventHandler("esx_uteknark1:success_plant", function(location, soil) - local src = source - if oneSyncEnabled and false then -- "and false" because something is weird in my OneSync stuff - local ped = GetPlayerPed(src) - --log('ped:',ped) - local pedLocation = GetEntityCoords(ped) - --log('pedLocation:',pedLocation) - --log('location:', location) - local distance = #(pedLocation - location) - if distance > Config.Distance.Interact then - if distance > 10 then - log(GetPlayerName(src), "attempted planting at", distance .. "m - Cheating?") - end - makeToast(src, _U("planting_text"), _U("planting_too_far")) - return - end - end - if soil and Config.Soil[soil] then - local hits = cropstate.octree:searchSphere(location, Config.Distance.Space) - if #hits == 0 then - if TakeItem(src, Config.Items.Seed) then - if plantSeed(location, soil) then - makeToast(src, _U("planting_text"), _U("planting_ok")) - doScenario(src, "Plant", location) - else - GiveItem(src, Config.Items.Seed) - makeToast(src, _U("planting_text"), _U("planting_failed")) - end - else - makeToast(src, _U("planting_text"), _U("planting_no_seed")) - end - else - makeToast(src, _U("planting_text"), _U("planting_too_close")) - end - else - makeToast(src, _U("planting_text"), _U("planting_not_suitable_soil")) - end -end) - -RegisterNetEvent("esx_uteknark1:log") -AddEventHandler("esx_uteknark1:log", function(...) - local src = source - log(src, GetPlayerName(src), ...) -end) - -RegisterNetEvent("esx_uteknark1:test_forest") -AddEventHandler("esx_uteknark1:test_forest", function(forest) - local src = source - - if IsPlayerAceAllowed(src, "command.uteknark") then - local soil - for candidate, quality in pairs(Config.Soil) do - soil = candidate - if quality >= 1.0 then - break - end - end - - log(GetPlayerName(src), "(" .. src .. ") is magically planting a forest of", #forest, "plants") - for i, tree in ipairs(forest) do - cropstate:plant(tree.location, soil, tree.stage) - if i % 25 == 0 then - Wait(0) - end - end - else - log("OY!", GetPlayerName(src), "with ID", src, "tried to spawn a test forest, BUT IS NOT ALLOWED!") - end -end) - -function keyCount(tbl) - local count = 0 - if type(tbl) == "table" then - for _, value in pairs(tbl) do - count = count + 1 - end - end - return count -end - -CreateThread(function() - local ESXTries = 60 - local itemsLoaded = false - while not itemsLoaded and ESXTries > 0 do - ESX = exports["es_extended"]:getSharedObject() - if keyCount(ESX.Items) > 0 then - itemsLoaded = true - for forWhat, itemName in pairs(Config.Items) do - if ESX.Items[itemName] then - log(forWhat, "item in configuration (" .. itemName .. ") found in ESX: Good!") - else - log("WARNING:", forWhat, "item in cofiguration (" .. itemName .. ") does not exist!") - end - end - ESX.RegisterUsableItem(Config.Items.Seed, function(source) - local now = os.time() - local last = lastPlant[source] or 0 - if now > last + (Config.ActionTime / 1000) then - if HasItem(source, Config.Items.Seed) then - TriggerClientEvent("esx_uteknark1:attempt_plant", source) - lastPlant[source] = now - else - makeToast(source, _U("planting_text"), _U("planting_no_seed")) - end - else - makeToast(source, _U("planting_text"), _U("planting_too_fast")) - end - end) - end - Wait(1000) - ESXTries = ESXTries - 1 - end - if not ESX then - log("CRITICAL ERROR: Could not obtain ESX object!\n") - end -end) - -CreateThread(function() - local databaseReady = false - while not databaseReady do - Wait(500) - local state = GetResourceState("mysql-async") - if state == "started" then - Wait(500) - cropstate:load(function(plantCount) - if plantCount == 1 then - log("Uteknark loaded a single plant!") - else - log("Uteknark loaded", plantCount, "plants") - end - end) - databaseReady = true - end - end - - while true do - Wait(0) - local now = os.time() - local begin = GetGameTimer() - local plantsHandled = 0 - for id, plant in pairs(cropstate.index) do - if type(id) == "number" then -- Because of the whole "hashtable = true" thing - local stageData = Growth[plant.data.stage] - local growthTime = (stageData.time * 60 * Config.TimeMultiplier) - local soilQuality = Config.Soil[plant.data.soil] or 1.0 - - if stageData.interact then - local relevantTime = plant.data.time + ((growthTime / soilQuality) * Config.TimeMultiplier) - if now >= relevantTime then - verbose("Plant", id, "has died: No interaction in time") - cropstate:remove(id) - end - else - local relevantTime = plant.data.time + ((growthTime * soilQuality) * Config.TimeMultiplier) - if now >= relevantTime then - if plant.data.stage < #Growth then - verbose("Plant", id, "has grown to stage", plant.data.stage + 1) - cropstate:update(id, plant.data.stage + 1) - else - verbose("Plant", id, "has died: Ran out of stages") - cropstate:remove(id) - end - end - end - - plantsHandled = plantsHandled + 1 - if plantsHandled % 10 == 0 then - Wait(0) - end - end - end - - tickPlantCount = plantsHandled - local tickTime = GetGameTimer() - begin - table.insert(tickTimes, tickTime) - while #tickTimes > 20 do - table.remove(tickTimes, 1) - end - end -end) - -local commands = { - debug = function(source) - if source == 0 then - log("Client debugging on the console? Nope.") - else - TriggerClientEvent("esx_uteknark1:toggle_debug", source) - end - end, - stage = function(source, args) - if args[1] and string.match(args[1], "^%d+$") then - local plant = tonumber(args[1]) - if cropstate.index[plant] then - if args[2] and string.match(args[2], "^%d+$") then - local stage = tonumber(args[2]) - if stage > 0 and stage <= #Growth then - log(source, GetPlayerName(source), "set plant", plant, "to stage", stage) - cropstate:update(plant, stage) - else - inChat(source, string.format("%i is an invalid stage", stage)) - end - else - inChat(source, "What stage?") - end - else - inChat(source, string.format("Plant %i does not exist!", plant)) - end - else - inChat(source, "What plant, you say?") - end - end, - forest = function(source, args) - if source == 0 then - log("Forests can't grow in a console, buddy!") - else - local count = #Growth * #Growth - if args[1] and string.match(args[1], "%d+$") then - count = tonumber(args[1]) - end - - local randomStage = false - if args[2] then - randomStage = true - end - - TriggerClientEvent("esx_uteknark1:test_forest", source, count, randomStage) - end - end, - stats = function(source) - if cropstate.loaded then - local totalTime = 0 - for _, time in ipairs(tickTimes) do - totalTime = totalTime + time - end - local tickTimeAverage = totalTime / #tickTimes - inChat(source, string.format("Tick time average: %.1fms", tickTimeAverage)) - inChat(source, string.format("Plant count: %i", tickPlantCount)) - else - inChat(source, "Not loaded yet") - end - end, - groundmat = function(source) - if source == 0 then - log("Console. The ground material is CONSOLE.") - else - TriggerClientEvent("esx_uteknark1:groundmat", source) - end - end, - pyro = function(source) - if source == 0 then - log("You can't really test particle effects on the console.") - else - TriggerClientEvent("esx_uteknark1:pyromaniac", source) - end - end, -} - -RegisterCommand("uteknark", function(source, args) - if #args > 0 then - local directive = string.lower(args[1]) - if commands[directive] then - if #args > 1 then - local newArgs = {} - for i, entry in ipairs(args) do - if i > 1 then - table.insert(newArgs, entry) - end - end - args = newArgs - else - args = {} - end - commands[directive](source, args) - elseif source == 0 then - log("Invalid directive: " .. directive) - else - inChat(source, _U("command_invalid", directive)) - end - else - inChat(source, _U("command_empty", VERSION)) - end -end, true) From 15d20c575dc23f906134675e3d3a8cf1b1cbdb96 Mon Sep 17 00:00:00 2001 From: bitpredator <67551273+bitpredator@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:22:57 +0200 Subject: [PATCH 4/5] refactor: reconstruction of the drug system --- .../bpt_crafting/bpt_crafting.sql | 6 ++- .../[bpt_addons]/bpt_crafting/config.lua | 39 ++++++++++++++++-- .../bpt_crafting/html/img/cannabis.png | Bin 0 -> 16892 bytes .../bpt_crafting/html/img/diamond.png | Bin 0 -> 6258 bytes .../bpt_crafting/html/img/diamond_tip.png | Bin 0 -> 64423 bytes .../bpt_crafting/html/img/marijuana.png | Bin 0 -> 33948 bytes .../localization/bpt_crafting_it.sql | 6 ++- .../[bpt_addons]/bpt_drugs/client/main.lua | 6 +-- .../[bpt_addons]/bpt_drugs/client/weed.lua | 8 ---- .../[ox]/ox_inventory/data/items.lua | 21 ++++------ .../[ox]/ox_inventory/data/shops.lua | 13 ------ .../ox_inventory/web/images/diamond_tip.png | Bin 0 -> 64423 bytes .../ox_inventory/web/images/marijuana.png | Bin 0 -> 33948 bytes 13 files changed, 57 insertions(+), 42 deletions(-) create mode 100644 server-data/resources/[bpt_addons]/bpt_crafting/html/img/cannabis.png create mode 100644 server-data/resources/[bpt_addons]/bpt_crafting/html/img/diamond.png create mode 100644 server-data/resources/[bpt_addons]/bpt_crafting/html/img/diamond_tip.png create mode 100644 server-data/resources/[bpt_addons]/bpt_crafting/html/img/marijuana.png create mode 100644 server-data/resources/[ox]/ox_inventory/web/images/diamond_tip.png create mode 100644 server-data/resources/[ox]/ox_inventory/web/images/marijuana.png diff --git a/server-data/resources/[bpt_addons]/bpt_crafting/bpt_crafting.sql b/server-data/resources/[bpt_addons]/bpt_crafting/bpt_crafting.sql index ef27f7a34..6a4b8ed67 100644 --- a/server-data/resources/[bpt_addons]/bpt_crafting/bpt_crafting.sql +++ b/server-data/resources/[bpt_addons]/bpt_crafting/bpt_crafting.sql @@ -50,5 +50,9 @@ INSERT INTO `bpt_items` (`name`, `label`) VALUES ('plastic_bag', 'Plastic bag'), ('recycled_plastic', 'Recycled plastic'), ('WEAPON_NIGHTSTICK', 'NIGHTSTICK'), - ('WEAPON_PISTOL', 'Pistol') + ('WEAPON_PISTOL', 'Pistol'), + ('marijuana', 'marijuana'), + ('cannabis', 'Cannabis'), + ('diamond_tip', 'Diamond tip'), + ('diamond', 'Diamond') ; \ No newline at end of file diff --git a/server-data/resources/[bpt_addons]/bpt_crafting/config.lua b/server-data/resources/[bpt_addons]/bpt_crafting/config.lua index 189e3b84f..b3af09502 100644 --- a/server-data/resources/[bpt_addons]/bpt_crafting/config.lua +++ b/server-data/resources/[bpt_addons]/bpt_crafting/config.lua @@ -67,6 +67,22 @@ Config = { }, }, + ["marijuana"] = { + Level = 0, + Category = "medical", + isGun = false, + Jobs = { "ambulance" }, + JobGrades = {}, + Amount = 1, + SuccessRate = 100, + requireBlueprint = false, + Time = 20, + Ingredients = { + ["cannabis"] = 2, + ["diamond_tip"] = 1, + }, + }, + ["cottonforbandages"] = { Level = 0, -- From what level this item will be craftable Category = "import", -- The category item will be put in @@ -98,6 +114,23 @@ Config = { }, }, + ["diamond_tip"] = { + Level = 0, + Category = "import", + isGun = false, + Jobs = { "import" }, + JobGrades = {}, + Amount = 1, + SuccessRate = 100, + requireBlueprint = false, + Time = 60, + Ingredients = { + ["diamond"] = 1, + ["hammer"] = 1, + ["steel"] = 1, + }, + }, + ["recycled_paper"] = { Level = 0, Category = "import", @@ -426,14 +459,14 @@ Config = { coords = vector3(1020.936279, -2404.628662, 30.122314), jobs = { "import" }, blip = false, - recipes = { "cottonforbandages", "hammer", "ironsheet", "recycled_paper", "paper", "recycled_plastic", "iron" }, + recipes = { "cottonforbandages", "hammer", "ironsheet", "recycled_paper", "paper", "recycled_plastic", "iron", "diamond_tip" }, radius = 1.0, }, { coords = vector3(311.314301, -565.213196, 43.282104), jobs = { "ambulance" }, blip = false, - recipes = { "bandage" }, + recipes = { "bandage", "marijuana" }, radius = 1.0, }, { @@ -469,7 +502,7 @@ Config = { coords = vector3(83.156044, -1960.259277, 18.041016), jobs = { "ballas" }, blip = false, - recipes = { "cigarette_paper" }, + recipes = { "cigarette_paper", "marijuana" }, radius = 1.0, }, { diff --git a/server-data/resources/[bpt_addons]/bpt_crafting/html/img/cannabis.png b/server-data/resources/[bpt_addons]/bpt_crafting/html/img/cannabis.png new file mode 100644 index 0000000000000000000000000000000000000000..5099b1f9f7a129f99b4b01ee6fefc6ca89464c33 GIT binary patch literal 16892 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

3nSi_N!5d~Rd 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 AF8}}l literal 0 HcmV?d00001 diff --git a/server-data/resources/[bpt_addons]/bpt_crafting/html/img/diamond.png b/server-data/resources/[bpt_addons]/bpt_crafting/html/img/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0207e700fe19ae53c99e9c1a4be2a2e4ec5185 GIT binary patch literal 6258 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 literal 0 HcmV?d00001 diff --git a/server-data/resources/[bpt_addons]/bpt_crafting/html/img/diamond_tip.png b/server-data/resources/[bpt_addons]/bpt_crafting/html/img/diamond_tip.png new file mode 100644 index 0000000000000000000000000000000000000000..18c8014a12a61d8d57a2abab7f9ac3201abc92df GIT binary patch literal 64423 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 MboFyt=akR{06#Y34*&oF literal 0 HcmV?d00001 diff --git a/server-data/resources/[bpt_addons]/bpt_crafting/localization/bpt_crafting_it.sql b/server-data/resources/[bpt_addons]/bpt_crafting/localization/bpt_crafting_it.sql index d3d7bb237..ce1669e54 100644 --- a/server-data/resources/[bpt_addons]/bpt_crafting/localization/bpt_crafting_it.sql +++ b/server-data/resources/[bpt_addons]/bpt_crafting/localization/bpt_crafting_it.sql @@ -50,5 +50,9 @@ INSERT INTO `bpt_items` (`name`, `label`) VALUES ('plastic_bag', 'Sacchetto di plastica'), ('recycled_plastic', 'Plastica riciclata'), ('WEAPON_NIGHTSTICK', 'Manganello'), - ('WEAPON_PISTOL', 'Pistola 9mm') + ('WEAPON_PISTOL', 'Pistola 9mm'), + ('marijuana', 'marijuana'), + ('cannabis', 'Cannabis'), + ('diamond_tip', 'Punta di diamante'), + ('diamond', 'Diamond') ; \ No newline at end of file diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua b/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua index c807b54f4..e9a383d60 100644 --- a/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua +++ b/server-data/resources/[bpt_addons]/bpt_drugs/client/main.lua @@ -63,7 +63,7 @@ function OpenDrugShop() } menuOpen = true - for k, v in pairs(ESX.GetPlayerData().inventory) do + for _, v in pairs(ESX.GetPlayerData().inventory) do local price = Config.DrugDealerItems[v.name] if price and v.count > 0 then @@ -92,7 +92,7 @@ function OpenDrugShop() end TriggerServerEvent("bpt_drugs:sellDrug", tostring(element.name), count) - end, function(menu) + end, function() menuOpen = false end) end, function(menu) @@ -130,7 +130,7 @@ function CreateBlipCircle(coords, text, radius, color, sprite) end CreateThread(function() - for k, zone in pairs(Config.CircleZones) do + for _, zone in pairs(Config.CircleZones) do CreateBlipCircle(zone.coords, zone.name, zone.radius, zone.color, zone.sprite) end end) diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua b/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua index d8d23e55a..0a3bbf8d7 100644 --- a/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua +++ b/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua @@ -13,14 +13,6 @@ CreateThread(function() end end) -function ProcessWeed(xCannabis) - ESX.ShowNotification(TranslateCap("weed_processingstarted")) - TriggerServerEvent("bpt_drugs:processCannabis") - if xCannabis <= 3 then - xCannabis = 0 - end -end - CreateThread(function() while true do local Sleep = 1500 diff --git a/server-data/resources/[ox]/ox_inventory/data/items.lua b/server-data/resources/[ox]/ox_inventory/data/items.lua index e3cc149c8..895bbd13b 100644 --- a/server-data/resources/[ox]/ox_inventory/data/items.lua +++ b/server-data/resources/[ox]/ox_inventory/data/items.lua @@ -168,6 +168,14 @@ return { consume = 0, }, + ["diamond_tip"] = { + label = "Punta di diamante", + weight = 1, + stack = true, + close = false, + consume = 0, + }, + ["emerald"] = { label = "Smeraldo", weight = 1, @@ -557,19 +565,6 @@ return { }, }, - ["coke_seed"] = { - label = "seme di cocaina", - weight = 220, - stack = true, - }, - - ["coke"] = { - label = "cocaina", - weight = 220, - stack = true, - consume = 1, - }, - ["salmon_fillet"] = { label = "filetto di salmone", weight = 220, diff --git a/server-data/resources/[ox]/ox_inventory/data/shops.lua b/server-data/resources/[ox]/ox_inventory/data/shops.lua index b38599ae1..ce0da5285 100644 --- a/server-data/resources/[ox]/ox_inventory/data/shops.lua +++ b/server-data/resources/[ox]/ox_inventory/data/shops.lua @@ -87,19 +87,6 @@ return { targets = {}, }, - ballas = { - name = "ballas", - groups = { - ["ballas"] = 0, - }, - inventory = { - { name = "coke_seed", price = 15000 }, - }, - locations = { - vec3(81.692307, -1966.021973, 18.041016), - }, - }, - Grocerystore = { name = "Grocerystore", blip = { diff --git a/server-data/resources/[ox]/ox_inventory/web/images/diamond_tip.png b/server-data/resources/[ox]/ox_inventory/web/images/diamond_tip.png new file mode 100644 index 0000000000000000000000000000000000000000..18c8014a12a61d8d57a2abab7f9ac3201abc92df GIT binary patch literal 64423 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 MboFyt=akR{06#Y34*&oF literal 0 HcmV?d00001 From bcdc713b3afb32796d5299ed972f6c62309d699a Mon Sep 17 00:00:00 2001 From: bitpredator <67551273+bitpredator@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:38:03 +0200 Subject: [PATCH 5/5] chore: fix lint error --- .../[bpt_addons]/bpt_drugs/client/weed.lua | 6 +-- .../[bpt_addons]/bpt_drugs/config.lua | 20 ++++---- .../[bpt_addons]/bpt_drugs/fxmanifest.lua | 46 +++++++++---------- .../[bpt_addons]/bpt_drugs/server/main.lua | 36 --------------- 4 files changed, 36 insertions(+), 72 deletions(-) diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua b/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua index 0a3bbf8d7..6e4de59cf 100644 --- a/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua +++ b/server-data/resources/[bpt_addons]/bpt_drugs/client/weed.lua @@ -64,7 +64,7 @@ end) AddEventHandler("onResourceStop", function(resource) if resource == GetCurrentResourceName() then - for k, v in pairs(weedPlants) do + for _, v in pairs(weedPlants) do ESX.Game.DeleteObject(v) end end @@ -89,7 +89,7 @@ function ValidateWeedCoord(plantCoord) if spawnedWeeds > 0 then local validate = true - for k, v in pairs(weedPlants) do + for _, v in pairs(weedPlants) do if #(plantCoord - GetEntityCoords(v)) < 5 then validate = false end @@ -134,7 +134,7 @@ end function GetCoordZ(x, y) local groundCheckHeights = { 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0 } - for i, height in ipairs(groundCheckHeights) do + for _, height in ipairs(groundCheckHeights) do local foundGround, z = GetGroundZFor_3dCoord(x, y, height) if foundGround then diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/config.lua b/server-data/resources/[bpt_addons]/bpt_drugs/config.lua index 15454bdac..7fc71fd65 100644 --- a/server-data/resources/[bpt_addons]/bpt_drugs/config.lua +++ b/server-data/resources/[bpt_addons]/bpt_drugs/config.lua @@ -1,28 +1,28 @@ Config = {} -Config.Locale = GetConvar('esx:locale', 'it') +Config.Locale = GetConvar("esx:locale", "it") Config.DrugDealerItems = { - marijuana = 91 + marijuana = 91, } Config.GiveBlack = true -- give black money? if disabled it'll give regular cash. Config.CircleZones = { - WeedField = {coords = vector3(2220.72, 5582.52, 53.81), name = TranslateCap('blip_weedfield'), color = 25, radius = 100.0}, - DrugDealer = {coords = vector3(-1172.02, -1571.98, 4.66), name = TranslateCap('blip_drugdealer'), color = 6, sprite = 378}, + WeedField = { coords = vector3(2220.72, 5582.52, 53.81), name = TranslateCap("blip_weedfield"), color = 25, radius = 100.0 }, + DrugDealer = { coords = vector3(-1172.02, -1571.98, 4.66), name = TranslateCap("blip_drugdealer"), color = 6, sprite = 378 }, } Config.Marker = { - Distance = 100.0, - Color = {r=60,g=230,b=60,a=255}, - Size = vector3(1.5,1.5,1.0), - Type = 1, + Distance = 100.0, + Color = { r = 60, g = 230, b = 60, a = 255 }, + Size = vector3(1.5, 1.5, 1.0), + Type = 1, } -- min amount of Config.DrugDealerItems to sell -- max amount of Config.DrugDealerItems to sell Config.SellMenu = { - Min = 1, - Max = 50 + Min = 1, + Max = 50, } diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua b/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua index 31fc3c460..59dd55f3b 100644 --- a/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua +++ b/server-data/resources/[bpt_addons]/bpt_drugs/fxmanifest.lua @@ -1,28 +1,28 @@ -fx_version 'adamant' +fx_version("adamant") -game 'gta5' -lua54 'yes' -description 'Allows players to harvest and sell marijuana' -version '1.0.2' +game("gta5") +lua54("yes") +description("Allows players to harvest and sell marijuana") +version("1.0.2") -shared_script '@es_extended/imports.lua' +shared_script("@es_extended/imports.lua") -server_scripts { - '@oxmysql/lib/MySQL.lua', - '@es_extended/locale.lua', - 'locales/*.lua', - 'config.lua', - 'server/main.lua' -} +server_scripts({ + "@oxmysql/lib/MySQL.lua", + "@es_extended/locale.lua", + "locales/*.lua", + "config.lua", + "server/main.lua", +}) -client_scripts { - '@es_extended/locale.lua', - 'locales/*.lua', - 'config.lua', - 'client/main.lua', - 'client/weed.lua' -} +client_scripts({ + "@es_extended/locale.lua", + "locales/*.lua", + "config.lua", + "client/main.lua", + "client/weed.lua", +}) -dependencies { - 'es_extended' -} +dependencies({ + "es_extended", +}) diff --git a/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua b/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua index c074f2d9b..eb6dbe67b 100644 --- a/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua +++ b/server-data/resources/[bpt_addons]/bpt_drugs/server/main.lua @@ -1,6 +1,4 @@ local playersProcessingCannabis = {} -local outofbound = true -local alive = true local function ValidatePickupCannabis(src) local ECoords = Config.CircleZones.WeedField.coords @@ -11,15 +9,6 @@ local function ValidatePickupCannabis(src) end end -local function ValidateProcessCannabis(src) - local ECoords = Config.CircleZones.WeedProcessing.coords - local PCoords = GetEntityCoords(GetPlayerPed(src)) - local Dist = #(PCoords - ECoords) - if Dist <= 5 then - return true - end -end - local function FoundExploiter(src, reason) -- ADD YOUR BAN EVENT HERE UNTIL THEN IT WILL ONLY KICK THE PLAYER -- DropPlayer(src, reason) @@ -83,37 +72,12 @@ ESX.RegisterServerCallback("bpt_drugs:canPickUp", function(source, cb, item) cb(xPlayer.canCarryItem(item, 1)) end) -RegisterServerEvent("bpt_drugs:outofbound") -AddEventHandler("bpt_drugs:outofbound", function() - outofbound = true -end) - ESX.RegisterServerCallback("bpt_drugs:cannabis_count", function(source, cb) local xPlayer = ESX.GetPlayerFromId(source) local xCannabis = xPlayer.getInventoryItem("cannabis").count cb(xCannabis) end) -RegisterServerEvent("bpt_drugs:processCannabis") -AddEventHandler("bpt_drugs:processCannabis", function() - if not playersProcessingCannabis[source] then - local source = source - if ValidateProcessCannabis(source) then - local xPlayer = ESX.GetPlayerFromId(source) - local xCannabis = xPlayer.getInventoryItem("cannabis") - if xCannabis.count >= 3 then - else - xPlayer.showNotification(TranslateCap("weed_processingenough")) - TriggerEvent("bpt_drugs:cancelProcessing") - end - else - FoundExploiter(source, "Event Trigger") - end - else - print(("bpt_drugs: %s attempted to exploit weed processing!"):format(GetPlayerIdentifiers(source)[1])) - end -end) - function CancelProcessing(playerId) if playersProcessingCannabis[playerId] then ESX.ClearTimeout(playersProcessingCannabis[playerId])