This commit is contained in:
gabrielkheisa 2020-11-06 18:55:46 +07:00
commit 8e431a3e95
42 changed files with 25647 additions and 0 deletions

63
.gitattributes vendored Normal file
View File

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

340
.gitignore vendored Normal file
View File

@ -0,0 +1,340 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb

674
LICENSE.txt Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

230
README.md Normal file
View File

@ -0,0 +1,230 @@
# subVerison_GTAV_Hack
subVerison重置版——GTAV线上外置修改器
[![](https://img.shields.io/badge/Powerd%20By-subVersion-brightgreen)](https://github.com/sub1to/subVersion_GTAO_Hack)
███████╗██╗ ██╗██████╗ ██╗ ██╗███████╗██████╗ ███████╗██╗ ██████╗ ███╗ ██╗
██╔════╝██║ ██║██╔══██╗██║ ██║██╔════╝██╔══██╗██╔════╝██║██╔═══██╗████╗ ██║
███████╗██║ ██║██████╔╝██║ ██║█████╗ ██████╔╝███████╗██║██║ ██║██╔██╗ ██║
╚════██║██║ ██║██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗╚════██║██║██║ ██║██║╚██╗██║
███████║╚██████╔╝██████╔╝ ╚████╔╝ ███████╗██║ ██║███████║██║╚██████╔╝██║ ╚████║
╚══════╝ ╚═════╝ ╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝
## 目录
- [背景](#背景)
- [支持的版本](#支持的版本)
- [功能](#功能)
- [使用说明](#使用说明)
- [已知问题](#已知问题)
- [TODO](#TODO)
- [相关仓库](#相关仓库)
- [维护者](#维护者)
- [使用许可](#使用许可)
## 背景
`subVersion` 最开始是[@sub1to](https://github.com/sub1to) 开发的原项目开发终止于2017年6月。
`subVersion` 是一款支持线上模式的外置修改器带有d3d9实现的UI。
## 支持的版本
[GTAV 1.51](https://www.rockstargames.com/zh/games/info/V)
线下及线上
Steam版
Epic Game版
## 功能
<details>
<summary>玩家</summary>
```
治疗
自杀
无敌
半无敌
通缉等级
永不通缉
反NPC杀死任何攻击你的NPC
NPC无视玩家
奔跑速度1-5倍
游泳速度1-5倍
超级跳跃
爆炸近战
无布娃娃(永不摔倒)
无限耐力
近战击退倍数
假死雷达隐匿
水下行走
```
</details>
<details>
<summary>武器</summary>
```
补满所有武器弹药
补满当前武器弹药
无扩散
无后座
无需换弹
快速换弹1-10倍
武器伤害系数1-10倍
无限弹药
射程1-10倍
加特林无需预热
爆炸子弹
燃烧子弹
批量子弹1-10倍最大25射出一发等于多发
批量传播0-0.12
初速1-10倍
人冲击力
车辆冲击力
直升机冲击力
```
<details>
<summary>子弹编辑 >></summary>
```
手榴弹
粘弹
燃烧瓶
隐形爆炸
闪电爆炸
大爆炸
中爆炸
小爆炸
小水柱
小火柱
大水柱
大火柱
MK2爆炸子弹
烟雾弹
催泪瓦斯
带特效的爆炸
大冲击波爆炸
大火灾爆炸
超大型飞艇爆炸
大爆炸+坠落碎片
火球爆炸
烟花
雪球
屏幕抖动爆炸
假爆炸(无伤害)
```
</details>
</details>
<details>
<summary>载具</summary>
```
无敌
半无敌
防爆轮胎
安全带
修复
无限喷射
喷射恢复速度
```
<details>
<summary>属性 >></summary>
```
质量
浮力
减档速度
手刹制动力
悬挂高度
撞击伤害倍数
武器伤害倍数
变形系数
引擎伤害倍数
变形系数0-1默认值为0.7)(将滑块向左移动可一直减少变形向右表示变形较大)
加速度1-10倍
高速挡1-25
刹车制动力1-10倍
牵引力1-2倍
重力0N-25N默认9.8N
悬挂1-2倍
```
</details>
</details>
<details>
<summary>参数</summary>
```
RP倍数
AP倍数
最小任务金额
```
</details>
<details>
<summary>导航</summary>
```
导航点
目标点
室内
```
</details>
## 使用说明
### 快捷键
```sh
Numpad - | 打开菜单
F9 | 保存设置并关闭修改器
Numpad 5 | 开/关功能
Numpad 0 | 返回
Numpad 7 | 左翻页
Numpad 9 | 右翻页
Numpad 8 | 上翻
Numpad 2 | 下翻
Numpad 4 | 滑块向左
Numpad 6 | 滑块向右
F5 | 传送至导航点
F6 | 清除通缉
F7 | 满血满防弹衣
F8 | 补满所有武器弹药
```
### 注意
- 只有在静止状态下才可以进行传送
- 传送**导航点**时如果传送后卡地形按下W键即可回到地面
- 传送**导航点**时多人传送需要所有人都下车并按W键
### 为什么传送导航点时会出现这种问题?
- 在进行**导航点**传送时,由于只导航点只有**XY轴**的坐标并不知道Z轴高度轴的坐标所以修改器会将你的Z轴改为-225也就是地下而GTA5有一个机制会自动将Z轴位于-225的人物传送至地面。
## 已知问题
- 无敌开启时反NPC不会生效。必须使用半无敌
- 传送到目标点仅限于任务目标黄点NPC和可拾取目标绿点等其他。
- 如果尚未设定新的导航点,则传送到目标会传送到先前的导航点。
## TODO
1. 一个更好,更易用的**UI**。
2. 更多**功能特性**。
3. 实现**AoBScan**,使用特征码定位基址。
4. 支持Social Club版
## 相关仓库
- [subVersion GTAO Hack](https://github.com/sub1to/subVersion_GTAO_Hack) — 💌 原版subVersion。
## 维护者
[@AmazingPP](https://github.com/AmazingPP)
## 使用许可
[GPL-3.0](LICENSE) © AmazingPP

31
subVersion.sln Normal file
View File

@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30128.74
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "subVersion", "subVersion\subVersion.vcxproj", "{14BDF4DF-A71B-489A-9077-EA112711CB28}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Debug|x64.ActiveCfg = Debug|x64
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Debug|x64.Build.0 = Debug|x64
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Debug|x86.ActiveCfg = Debug|Win32
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Debug|x86.Build.0 = Debug|Win32
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Release|x64.ActiveCfg = Release|x64
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Release|x64.Build.0 = Release|x64
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Release|x86.ActiveCfg = Release|Win32
{14BDF4DF-A71B-489A-9077-EA112711CB28}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {63DF38A2-CBFB-4311-B6EF-1C63E412CA84}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,38 @@
#pragma once
#ifndef __CALLBACK_PROXY_H__
#define __CALLBACK_PROXY_H__
//Tobject:调用对象的类型Tparam回调函数参数的类型
template<typename Tobject, typename Tparam>
class CallbackProxy
{
typedef void (Tobject::* CbFun)(Tparam*);
public:
void Set(Tobject* pInstance, CbFun pFun);
bool Exec(Tparam* pParam);
private:
CbFun pCbFun; //回调函数指针
Tobject* m_pInstance; //调用对象
};
//设置调用对象及其回调函数
template<typename Tobject, typename Tparam>
void CallbackProxy<Tobject, Tparam>::Set(Tobject* pInstance, CbFun pFun)
{
m_pInstance = pInstance;
pCbFun = pFun;
};
//调用回调函数
template<typename Tobject, typename Tparam>
bool CallbackProxy<Tobject, Tparam>::Exec(Tparam* pParam)
{
(m_pInstance->*pCbFun)(pParam);
return true;
}
extern std::map<int, CallbackProxy<hack, float>*>* g_pCBMap;
#endif

141
subVersion/ColorDef.h Normal file
View File

@ -0,0 +1,141 @@
#pragma once
#define CLR_LIGHTPINK RGB(255, 182, 193) // 浅粉红
#define CLR_PINK RGB(255, 192, 203) // 粉红
#define CLR_CRIMSON RGB(220, 20, 60) // 猩红 (深红)
#define CLR_LAVENDERBLUSH RGB(255, 240, 245) // 淡紫红
#define CLR_PALEVIOLETRED RGB(219, 112, 147) // 弱紫罗兰红
#define CLR_HOTPINK RGB(255, 105, 180) // 热情的粉红
#define CLR_DEEPPINK RGB(255, 20, 147) // 深粉红
#define CLR_MEDIUMVIOLETRED RGB(199, 21, 133) // 中紫罗兰红
#define CLR_ORCHID RGB(218, 112, 214) // 兰花紫
#define CLR_THISTLE RGB(216, 191, 216) // 蓟
#define CLR_PLUM RGB(221, 160, 221) // 李子紫
#define CLR_VIOLET RGB(238, 130, 238) // 紫罗兰
#define CLR_MAGENTA RGB(255, 0, 255) // 洋红 (品红 玫瑰红)
#define CLR_FUCHSIA RGB(255, 0, 255) // 灯笼海棠(紫红色)
#define CLR_DARKMAGENTA RGB(139, 0, 139) // 深洋红
#define CLR_PURPLE RGB(128, 0, 128) // 紫色
#define CLR_MEDIUMORCHID RGB(186, 85, 211) // 中兰花紫
#define CLR_DARKVIOLET RGB(148, 0, 211) // 暗紫罗兰
#define CLR_DARKORCHID RGB(153, 50, 204) // 暗兰花紫
#define CLR_INDIGO RGB( 75, 0, 130) // 靛青 (紫兰色)
#define CLR_BLUEVIOLET RGB(138, 43, 226) // 蓝紫罗兰
#define CLR_MEDIUMPURPLE RGB(147, 112, 219) // 中紫色
#define CLR_MEDIUMSLATEBLUE RGB(123, 104, 238) // 中板岩蓝
#define CLR_SLATEBLUE RGB(106, 90, 205) // 板岩蓝
#define CLR_DARKSLATEBLUE RGB( 72, 61, 139) // 暗板岩蓝
#define CLR_LAVENDER RGB(230, 230, 250) // 熏衣草淡紫
#define CLR_GHOSTWHITE RGB(248, 248, 255) // 幽灵白
#define CLR_BLUE RGB( 0, 0, 255) // 纯蓝
#define CLR_MEDIUMBLUE RGB( 0, 0, 205) // 中蓝色
#define CLR_MIDNIGHTBLUE RGB( 25, 25, 112) // 午夜蓝
#define CLR_DARKBLUE RGB( 0, 0, 139) // 暗蓝色
#define CLR_NAVY RGB( 0, 0, 128) // 海军蓝
#define CLR_ROYALBLUE RGB( 65, 105, 225) // 皇家蓝 (宝蓝)
#define CLR_CORNFLOWERBLUE RGB(100, 149, 237) // 矢车菊蓝
#define CLR_LIGHTSTEELBLUE RGB(176, 196, 222) // 亮钢蓝
#define CLR_LIGHTSLATEGRAY RGB(119, 136, 153) // 亮石板灰
#define CLR_SLATEGRAY RGB(112, 128, 144) // 石板灰
#define CLR_DODGERBLUE RGB( 30, 144, 255) // 道奇蓝
#define CLR_ALICEBLUE RGB(240, 248, 255) // 爱丽丝蓝
#define CLR_STEELBLUE RGB( 70, 130, 180) // 钢蓝 (铁青)
#define CLR_LIGHTSKYBLUE RGB(135, 206, 250) // 亮天蓝色
#define CLR_SKYBLUE RGB(135, 206, 235) // 天蓝色
#define CLR_DEEPSKYBLUE RGB( 0, 191, 255) // 深天蓝
#define CLR_LIGHTBLUE RGB(173, 216, 230) // 亮蓝
#define CLR_POWDERBLUE RGB(176, 224, 230) // 火药青
#define CLR_CADETBLUE RGB( 95, 158, 160) // 军服蓝
#define CLR_AZURE RGB(240, 255, 255) // 蔚蓝色
#define CLR_LIGHTCYAN RGB(224, 255, 255) // 淡青色
#define CLR_PALETURQUOISE RGB(175, 238, 238) // 弱绿宝石
#define CLR_CYAN RGB( 0, 255, 255) // 青色
#define CLR_AQUA RGB( 0, 255, 255) // 水色
#define CLR_DARKTURQUOISE RGB( 0, 206, 209) // 暗绿宝石
#define CLR_DARKSLATEGRAY RGB( 47, 79, 79) // 暗石板灰
#define CLR_DARKCYAN RGB( 0, 139, 139) // 暗青色
#define CLR_TEAL RGB( 0, 128, 128) // 水鸭色
#define CLR_MEDIUMTURQUOISE RGB( 72, 209, 204) // 中绿宝石
#define CLR_LIGHTSEAGREEN RGB( 32, 178, 170) // 浅海洋绿
#define CLR_TURQUOISE RGB( 64, 224, 208) // 绿宝石
#define CLR_AQUAMARINE RGB(127, 255, 212) // 宝石碧绿
#define CLR_MEDIUMAQUAMARINE RGB(102, 205, 170) // 中宝石碧绿
#define CLR_MEDIUMSPRINGGREEN RGB( 0, 250, 154) // 中春绿色
#define CLR_MINTCREAM RGB(245, 255, 250) // 薄荷奶油
#define CLR_SPRINGGREEN RGB( 0, 255, 127) // 春绿色
#define CLR_MEDIUMSEAGREEN RGB( 60, 179, 113) // 中海洋绿
#define CLR_SEAGREEN RGB( 46, 139, 87) // 海洋绿
#define CLR_HONEYDEW RGB(240, 255, 240) // 蜜瓜色
#define CLR_LIGHTGREEN RGB(144, 238, 144) // 淡绿色
#define CLR_PALEGREEN RGB(152, 251, 152) // 弱绿色
#define CLR_DARKSEAGREEN RGB(143, 188, 143) // 暗海洋绿
#define CLR_LIMEGREEN RGB( 50, 205, 50) // 闪光深绿
#define CLR_LIME RGB( 0, 255, 0) // 闪光绿
#define CLR_FORESTGREEN RGB( 34, 139, 34) // 森林绿
#define CLR_GREEN RGB( 0, 128, 0) // 纯绿
#define CLR_DARKGREEN RGB( 0, 100, 0) // 暗绿色
#define CLR_CHARTREUSE RGB(127, 255, 0) // 查特酒绿 (黄绿色)
#define CLR_LAWNGREEN RGB(124, 252, 0) // 草坪绿
#define CLR_GREENYELLOW RGB(173, 255, 47) // 绿黄色
#define CLR_DARKOLIVEGREEN RGB( 85, 107, 47) // 暗橄榄绿
#define CLR_YELLOWGREEN RGB(154, 205, 50) // 黄绿色
#define CLR_OLIVEDRAB RGB(107, 142, 35) // 橄榄褐色
#define CLR_BEIGE RGB(245, 245, 220) // 米色(灰棕色)
#define CLR_LIGHTGOLDENRODYELLOW RGB(250, 250, 210) // 亮菊黄
#define CLR_IVORY RGB(255, 255, 240) // 象牙
#define CLR_LIGHTYELLOW RGB(255, 255, 224) // 浅黄色
#define CLR_YELLOW RGB(255, 255, 0) // 纯黄
#define CLR_OLIVE RGB(128, 128, 0) // 橄榄
#define CLR_DARKKHAKI RGB(189, 183, 107) // 深卡叽布
#define CLR_LEMONCHIFFON RGB(255, 250, 205) // 柠檬绸
#define CLR_PALEGOLDENROD RGB(238, 232, 170) // 灰菊黄
#define CLR_KHAKI RGB(240, 230, 140) // 卡叽布
#define CLR_GOLD RGB(255, 215, 0) // 金色
#define CLR_CORNSILK RGB(255, 248, 220) // 玉米丝色
#define CLR_GOLDENROD RGB(218, 165, 32) // 金菊黄
#define CLR_DARKGOLDENROD RGB(184, 134, 11) // 暗金菊黄
#define CLR_FLORALWHITE RGB(255, 250, 240) // 花的白色
#define CLR_OLDLACE RGB(253, 245, 230) // 旧蕾丝
#define CLR_WHEAT RGB(245, 222, 179) // 小麦色
#define CLR_MOCCASIN RGB(255, 228, 181) // 鹿皮靴
#define CLR_ORANGE RGB(255, 165, 0) // 橙色
#define CLR_PAPAYAWHIP RGB(255, 239, 213) // 番木瓜
#define CLR_BLANCHEDALMOND RGB(255, 235, 205) // 发白的杏仁色
#define CLR_NAVAJOWHITE RGB(255, 222, 173) // 土著白
#define CLR_ANTIQUEWHITE RGB(250, 235, 215) // 古董白
#define CLR_TAN RGB(210, 180, 140) // 茶色
#define CLR_BURLYWOOD RGB(222, 184, 135) // 硬木色
#define CLR_BISQUE RGB(255, 228, 196) // 陶坯黄
#define CLR_DARKORANGE RGB(255, 140, 0) // 深橙色
#define CLR_LINEN RGB(250, 240, 230) // 亚麻布
#define CLR_PERU RGB(205, 133, 63) // 秘鲁
#define CLR_PEACHPUFF RGB(255, 218, 185) // 桃肉色
#define CLR_SANDYBROWN RGB(244, 164, 96) // 沙棕色
#define CLR_CHOCOLATE RGB(210, 105, 30) // 巧克力
#define CLR_SADDLEBROWN RGB(139, 69, 19) // 马鞍棕色
#define CLR_SEASHELL RGB(255, 245, 238) // 海贝壳
#define CLR_SIENNA RGB(160, 82, 45) // 黄土赭色
#define CLR_LIGHTSALMON RGB(255, 160, 122) // 浅鲑鱼肉色
#define CLR_CORAL RGB(255, 127, 80) // 珊瑚
#define CLR_ORANGERED RGB(255, 69, 0) // 橙红色
#define CLR_DARKSALMON RGB(233, 150, 122) // 深鲜肉(鲑鱼)色
#define CLR_TOMATO RGB(255, 99, 71) // 番茄红
#define CLR_MISTYROSE RGB(255, 228, 225) // 薄雾玫瑰
#define CLR_SALMON RGB(250, 128, 114) // 鲜肉(鲑鱼)色
#define CLR_SNOW RGB(255, 250, 250) // 雪
#define CLR_LIGHTCORAL RGB(240, 128, 128) // 淡珊瑚色
#define CLR_ROSYBROWN RGB(188, 143, 143) // 玫瑰棕色
#define CLR_INDIANRED RGB(205, 92, 92) // 印度红
#define CLR_RED RGB(255, 0, 0) // 纯红
#define CLR_BROWN RGB(165, 42, 42) // 棕色
#define CLR_FIREBRICK RGB(178, 34, 34) // 耐火砖
#define CLR_DARKRED RGB(139, 0, 0) // 深红色
#define CLR_MAROON RGB(128, 0, 0) // 栗色
#define CLR_WHITE RGB(255, 255, 255) // 纯白
#define CLR_WHITESMOKE RGB(245, 245, 245) // 白烟
#define CLR_GAINSBORO RGB(220, 220, 220) // 庚斯博罗灰色
#define CLR_LIGHTGREY RGB(211, 211, 211) // 浅灰色
#define CLR_SILVER RGB(192, 192, 192) // 银灰色
#define CLR_DARKGRAY RGB(169, 169, 169) // 深灰色
#define CLR_GRAY RGB(186, 183, 186) // 灰色(*)
#define CLR_DIMGRAY RGB(105, 105, 105) // 暗淡的灰色
#define CLR_BLACK RGB( 0, 0, 0) // 纯黑

298
subVersion/D3D9Render.cpp Normal file
View File

@ -0,0 +1,298 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
D3D9Render::D3D9Render() :
m_nFont(0)
{
}
D3D9Render::~D3D9Render()
{
this->releaseFont();
m_pVertexBuffer->Release(); //close and release vertex buffer
m_pD3dDev->Release(); // close and release the 3D device
m_pD3d->Release(); // close and release Direct3D
}
bool D3D9Render::init(HWND hWnd)
{
m_pD3d = Direct3DCreate9(D3D_SDK_VERSION); //create d3d9 interface
ZeroMemory(&m_d3dParam, sizeof(m_d3dParam)); //clear the struct
m_d3dParam.Windowed = true;
m_d3dParam.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3dParam.hDeviceWindow = hWnd;
m_d3dParam.BackBufferHeight = m_screen.h;
m_d3dParam.BackBufferWidth = m_screen.w;
m_d3dParam.MultiSampleQuality = D3DMULTISAMPLE_NONE;
m_d3dParam.BackBufferFormat = D3DFMT_A8R8G8B8;
m_pD3d->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&m_d3dParam,
&m_pD3dDev);
//create vertex buffer
m_pD3dDev->CreateVertexBuffer( 4 * sizeof(Vertex),
0,
VERTEX_FORMAT,
D3DPOOL_DEFAULT, //managed = video ram; D3DPOOL_DEFAULT = auto
&m_pVertexBuffer, //vertex buffer interface
NULL);
this->createFont("Verdana", 14, true, false);
this->createFont("Verdana", 14, false, false);
this->createFont("Verdana", 18, true, false);
m_pD3dDev->SetFVF(VERTEX_FORMAT);// select which vertex format to use
return true;
}
static std::string floatToString(float val) {
auto res = std::to_string(val);
const std::string format("$1");
std::regex r("(\\d*)\\.0{6}|");
std::regex r2("(\\d*\\.{1}0*[^0]+)0*");
res = std::regex_replace(res, r2, format);
res = std::regex_replace(res, r, format);
return res;
}
bool D3D9Render::render()
{
m_pD3dDev->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 1.f, 0);
m_pD3dDev->BeginScene();
if(g_pSettings->isMenuActive() && g_pMemMan->getWindow() == GetForegroundWindow())
{
//Draw header
this->drawBoxBorder(0, 0, LAYOUT_ELEMENT_WIDTH, LAYOUT_ELEMENT_HEIGHT, LAYOUT_BORDER_SIZE, LAYOUT_COLOR_BACKGROUND, LAYOUT_COLOR_BORDER);
this->drawText(m_szWindowTitle, 0, 0, LAYOUT_ELEMENT_WIDTH, LAYOUT_ELEMENT_HEIGHT, 2, LAYOUT_COLOR_TEXT, DT_CENTER | DT_VCENTER);
if (this->m_bMBShowing)
{
this->drawBoxBorder(LAYOUT_ELEMENT_WIDTH + 10, 0, LAYOUT_MB_WIDTH, LAYOUT_ELEMENT_HEIGHT, LAYOUT_BORDER_SIZE, LAYOUT_COLOR_BACKGROUND, LAYOUT_COLOR_BORDER);
this->drawText(this->m_sTitle, LAYOUT_ELEMENT_WIDTH + 10, 0, LAYOUT_MB_WIDTH, LAYOUT_ELEMENT_HEIGHT, 2, LAYOUT_COLOR_TEXT, DT_CENTER | DT_VCENTER);
this->drawBoxBorder(LAYOUT_ELEMENT_WIDTH + 10, LAYOUT_ELEMENT_HEIGHT, LAYOUT_MB_WIDTH, LAYOUT_MB_HEIGHT, LAYOUT_BORDER_SIZE, LAYOUT_COLOR_BACKGROUND, LAYOUT_COLOR_BORDER);
this->drawText(this->m_sDetail, LAYOUT_ELEMENT_WIDTH + 10, LAYOUT_ELEMENT_HEIGHT, LAYOUT_MB_WIDTH , LAYOUT_MB_HEIGHT, 0, LAYOUT_COLOR_TEXT, DT_CENTER | DT_VCENTER);
}
//prevent race conditions
while(!g_pSettings->lockFeatureCur())
Sleep(1);
//draw tabs
for(int i = 0; i < g_pSettings->getFeatureCategoryCount(); i++)
{
featCat* tab = g_pSettings->getFeatureCategory(i);
int x = (LAYOUT_ELEMENT_WIDTH / g_pSettings->getFeatureCategoryCount()) * i,
y = LAYOUT_ELEMENT_HEIGHT * 1,
w = LAYOUT_ELEMENT_WIDTH / g_pSettings->getFeatureCategoryCount(),
h = LAYOUT_ELEMENT_HEIGHT;
this->drawBoxBorder( x, y, w, h, LAYOUT_BORDER_SIZE,
(i == g_pSettings->getActiveCat()) ? LAYOUT_COLOR_ACTIVE_BG : LAYOUT_COLOR_BACKGROUND,
(i == g_pSettings->getActiveCat()) ? LAYOUT_COLOR_ACTIVE_BORDER : LAYOUT_COLOR_BORDER);
this->drawText(tab->m_szName, x, y, w - 1, h, 0, LAYOUT_COLOR_TEXT, DT_CENTER | DT_VCENTER);
}
//draw features
int n = g_pSettings->getFeatureCurCount(),
active = g_pSettings->getActiveFeature();
this->drawBoxBorder( 0, //draw bg for all features
LAYOUT_ELEMENT_HEIGHT * 2,
LAYOUT_ELEMENT_WIDTH,
(n > MAX_MENU_FEATURES_DISPLAYED) ? MAX_MENU_FEATURES_DISPLAYED * LAYOUT_ELEMENT_HEIGHT : LAYOUT_ELEMENT_HEIGHT * n,
LAYOUT_BORDER_SIZE,
LAYOUT_COLOR_BACKGROUND,
LAYOUT_COLOR_BORDER);
for(int i = 0, j = g_pSettings->getDisplayOffset(); i < n && i < MAX_MENU_FEATURES_DISPLAYED; i++, j++)
{
feat* feature = g_pSettings->getFeatureCur(j);
int x = 8,
y = LAYOUT_ELEMENT_HEIGHT * (i + 2);
//selected box
if(j == active)
this->drawBoxBorder( x - 6,
y + 2,
LAYOUT_ELEMENT_WIDTH - (LAYOUT_BORDER_SIZE * 2),
LAYOUT_ELEMENT_HEIGHT - (LAYOUT_BORDER_SIZE * 2),
LAYOUT_BORDER_SIZE,
LAYOUT_COLOR_ACTIVE_BG,
LAYOUT_COLOR_SELECTED);
//checkbox
if(feature->m_type == feat_toggle || feature->m_type == feat_slider)
{
this->drawBoxBorder( x - 2,
y + 5,
LAYOUT_ELEMENT_HEIGHT - (LAYOUT_BORDER_SIZE * 5),
LAYOUT_ELEMENT_HEIGHT - (LAYOUT_BORDER_SIZE * 5),
LAYOUT_BORDER_SIZE,
(feature->m_bOn == true) ? LAYOUT_COLOR_SELECTED : LAYOUT_COLOR_BACKGROUND,
(feature->m_bOn == true) ? LAYOUT_COLOR_ACTIVE_BORDER : LAYOUT_COLOR_BORDER);
x += (LAYOUT_ELEMENT_HEIGHT - (LAYOUT_BORDER_SIZE * 3));
}
this->drawText(feature->m_szName, x, y, 0, LAYOUT_ELEMENT_HEIGHT, 1, LAYOUT_COLOR_TEXT, DT_VCENTER);
//slider
if(feature->m_type == feat_slider)
{
featSlider* slider = static_cast<featSlider*>(feature);
int x = (int) (LAYOUT_ELEMENT_WIDTH * .5f),
y = (LAYOUT_ELEMENT_HEIGHT * (i + 2)) + 5,
w = (int) ((LAYOUT_ELEMENT_WIDTH * .5f) - (LAYOUT_BORDER_SIZE * 2)),
h = LAYOUT_ELEMENT_HEIGHT - (LAYOUT_BORDER_SIZE * 5);
float mod = (slider->m_fValue - slider->m_fMin) / (slider->m_fMax - slider->m_fMin);
this->drawBoxBorder(x, y, w, h, LAYOUT_BORDER_SIZE, LAYOUT_COLOR_SLIDER_BG, LAYOUT_COLOR_BORDER);
this->drawBoxBorder(x + (int) (mod * (w - h)), y, h, h, LAYOUT_BORDER_SIZE, LAYOUT_COLOR_SLIDER_BTN, LAYOUT_COLOR_BORDER);
//this->drawText(floatToString(slider->m_fValue), x, y, w - 1, h, 0, LAYOUT_COLOR_VALUE_TEXT, DT_CENTER | DT_VCENTER);
}
}
//draw scrollbar
int max = n - MAX_MENU_FEATURES_DISPLAYED; //number of features that are not displayed
if(max > 0)
{
int space = LAYOUT_ELEMENT_HEIGHT * (MAX_MENU_FEATURES_DISPLAYED + 2),
height = (space / max <= space / 2) ? space / max : space / 2;
space -= height;
float mod = (g_pSettings->getDisplayOffset() / (float) max);
this->drawBoxBorder(LAYOUT_ELEMENT_WIDTH + LAYOUT_BORDER_SIZE , (int) (space * mod), LAYOUT_SCROLLBAR_WIDTH, height, LAYOUT_BORDER_SIZE, LAYOUT_COLOR_BACKGROUND, LAYOUT_COLOR_BORDER);
}
g_pSettings->unlockFeatureCur();
}
m_pD3dDev->EndScene();
m_pD3dDev->Present(nullptr, nullptr, nullptr, nullptr);
return true;
}
bool D3D9Render::createFont(char *name, int size, bool bold, bool italic)
{
if(m_nFont >= FONT_BUFFER_SIZE)
return false;
D3DXCreateFont(m_pD3dDev, size, 0, (bold) ? FW_BOLD : FW_NORMAL, 0, (italic) ? 1 : 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, name, &m_pFont[m_nFont]);
m_nFont++;
return true;
}
void D3D9Render::releaseFont()
{
for(int i = 0; i < m_nFont; i++)
if(m_pFont[i] != nullptr)
m_pFont[i]->Release();
m_nFont = 0;
return;
}
bool D3D9Render::getViewport()
{
RECT rectWnd;
GetWindowRect(g_pMemMan->getWindow(), &rectWnd);
m_screen.w = LAYOUT_ELEMENT_WIDTH * 2 + LAYOUT_SCROLLBAR_WIDTH + LAYOUT_BORDER_SIZE;
m_screen.h = LAYOUT_ELEMENT_HEIGHT * (MAX_MENU_FEATURES_DISPLAYED + 2); //300
m_screen.x = rectWnd.left + LAYOUT_PADDING_LEFT;
m_screen.y = rectWnd.top + LAYOUT_PADDING_TOP;
return 1;
}
void D3D9Render::showMessageBox(std::wstring title,std::wstring detail)
{
this->m_sTitle = title;
this->m_sDetail = detail;
std::thread t([this] {
m_bMBShowing = true;
Sleep(3000);
m_bMBShowing = false;
});
t.detach();
}
void D3D9Render::drawBox(int x, int y, int w, int h, D3DCOLOR color)
{
/*Vertex vertex[] =
{
{(float) x, (float) y + h, 1.0f, 1.0f, color},
{(float) x, (float) y, 1.0f, 1.0f, color},
{(float) x + w, (float) y + h, 1.0f, 1.0f, color},
{(float) x + w, (float) y, 1.0f, 1.0f, color}
};
void* pvBuffer; //pointer to the buffer
m_pVertexBuffer->Lock(0, 0, (void**) &pvBuffer, 0);
memcpy(pvBuffer, vertex, sizeof(vertex));
m_pVertexBuffer->Unlock();
// select the vertex buffer to display
m_pD3dDev->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(Vertex));
// copy the vertex buffer to the back buffer
m_pD3dDev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);*/
D3DRECT rect {x, y, x + w, y + h};
m_pD3dDev->Clear(1, &rect, D3DCLEAR_TARGET, color, 1.f, 0);
return;
}
void D3D9Render::drawBoxInline(int x, int y, int w, int h, int size, D3DCOLOR color)
{
this->drawBox(x, y, w, size, color); //top
this->drawBox(x + w - size, y, size, h, color); //right
this->drawBox(x, y + h - size, w, size, color); //bottom
this->drawBox(x, y, size, h, color); //left
return;
}
void D3D9Render::drawBoxBorder(int x, int y, int w, int h, int borderSize, D3DCOLOR color, D3DCOLOR borderColor)
{
this->drawBox(x, y, w, h, borderColor);
this->drawBox(x + borderSize, y + borderSize, w - (borderSize * 2), h - (borderSize * 2), color);
}
void D3D9Render::drawText(std::wstring str, int x, int y, int font, D3DCOLOR color)
{
LPCWSTR pszStr = str.c_str();
RECT pos;
pos.left = x;
pos.top = y;
m_pFont[font]->DrawTextW(nullptr, pszStr, (int) lstrlenW(pszStr), &pos, DT_NOCLIP, color);
}
//void drawText (std::string str, float x, float y, float w, float h, int font, D3DCOLOR color, DWORD flags = NULL)
void D3D9Render::drawText(std::wstring str, int x, int y, int w, int h, int font, D3DCOLOR color, DWORD flags)
{
LPCWSTR pszStr = str.c_str();
RECT pos;
pos.left = x;
pos.right = x + w;
pos.top = y;
pos.bottom = y + h;
m_pFont[font]->DrawTextW(nullptr, pszStr, (int) lstrlenW(pszStr), &pos, flags | DT_NOCLIP, color);
}

109
subVersion/D3D9Render.h Normal file
View File

@ -0,0 +1,109 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef D3D9_RENDER
#define D3D9_RENDER
#define FONT_BUFFER_SIZE 0x10 //max amount of fonts
#define VERTEX_FORMAT (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) //custom vertex format
//Layout defines
#define LAYOUT_PADDING_TOP 50
#define LAYOUT_PADDING_LEFT 50
#define LAYOUT_BORDER_SIZE 2
#define LAYOUT_ELEMENT_WIDTH 300
#define LAYOUT_ELEMENT_HEIGHT 25
#define LAYOUT_MB_WIDTH 300
#define LAYOUT_MB_HEIGHT 100
#define LAYOUT_SCROLLBAR_WIDTH 0x08
#define LAYOUT_SCROLLBAR_HEIGHT 0x40
#define uuu 0xaa
#define merah 0x78, 0x38, 0x38
#define merah_aktif 0xac, 0x85, 0x85
#define biru 0x38, 0x78, 0xe2
#define biru_aktif 0x85, 0xac, 0xed
#define hijau 0x38, 0xe2, 0x78
#define hijau_aktif 0x85, 0xed, 0xac
#define LAYOUT_COLOR_BACKGROUND D3DCOLOR_ARGB(uuu, 0x38, 0xe2, 0x78)//
#define LAYOUT_COLOR_BORDER D3DCOLOR_ARGB(uuu, 1, 1, 1)
#define LAYOUT_COLOR_TEXT D3DCOLOR_ARGB(uuu, 1, 1, 1)
#define LAYOUT_COLOR_VALUE_TEXT D3DCOLOR_ARGB(uuu, 255,255,255)
#define LAYOUT_COLOR_SLIDER_BG D3DCOLOR_ARGB(uuu, 0x28, 0x28, 0x28)
#define LAYOUT_COLOR_SLIDER_BTN D3DCOLOR_ARGB(uuu, 0x73, 0x73, 0x73)
#define LAYOUT_COLOR_ACTIVE_BG D3DCOLOR_ARGB(uuu, 0x85, 0xed, 0xac)//
#define LAYOUT_COLOR_ACTIVE_BORDER D3DCOLOR_ARGB(uuu, 1, 1, 1)
#define LAYOUT_COLOR_SELECTED D3DCOLOR_ARGB(uuu, 0xff, 0xff, 0xff)
struct Vertex
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
DWORD color; // from the D3DFVF_DIFFUSE flag
};
class D3D9Render
{
public:
struct scrnVars
{
int w = 800, //screen width
h = 600,
x = 0,
y = 0; //screen height
} m_screen;
std::wstring m_szWindowTitle;
bool m_bMBShowing;
std::wstring m_sTitle;
std::wstring m_sDetail;
D3D9Render ();
~D3D9Render ();
bool init (HWND hWnd);
bool render ();
bool createFont (char *font, int size, bool bold, bool italic);
void releaseFont ();
bool getViewport ();
void showMessageBox(std::wstring title, std::wstring detail);
void drawBox (int x, int y, int w, int h, D3DCOLOR color);
void drawBoxInline (int x, int y, int w, int h, int size, D3DCOLOR color);
void drawBoxBorder (int x, int y, int w, int h, int borderSize, D3DCOLOR color, D3DCOLOR borderColor);
void drawText (std::wstring str, int x, int y, int font, D3DCOLOR color);
void drawText (std::wstring str, int x, int y, int w, int h, int font, D3DCOLOR color, DWORD flags = NULL);
protected:
LPDIRECT3D9 m_pD3d; // the pointer to Direct3D interface
LPDIRECT3DDEVICE9 m_pD3dDev; // the pointer to the device
LPDIRECT3DVERTEXBUFFER9 m_pVertexBuffer; //pointer to the vertex buffer interface
LPD3DXFONT m_pFont[FONT_BUFFER_SIZE];
int m_nFont;
D3DPRESENT_PARAMETERS m_d3dParam; //d3d9 device params
};
extern D3D9Render* g_pD3D9Render;
#endif

71
subVersion/GTA d3d9.rc Normal file
View File

@ -0,0 +1,71 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 中文(简体,中国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "mask.ico"
#endif // 中文(简体,中国) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

811
subVersion/VehiclePreview.h Normal file
View File

@ -0,0 +1,811 @@
#pragma once
#include<vector>
struct VehiclePreview {
std::wstring VName;
char* VCode;
char* TexDict;
char* TexName;
};
static std::vector<VehiclePreview> Super{
{L"Pfister 811","Pfister811","lgm_dlc_executive1","pfister811"},
{L"Adder","Adder","lgm_default","adder"},
{L"Autarch","autarch","lgm_dlc_xmas2017","autarch_b"},
{L"Banshee 900R","Banshee2","lsc_jan2016","banshee2"},
{L"Bullet","Bullet","lgm_default","bullet"},
{L"Cheetah","Cheetah","lgm_default","cheetah"},
{L"Cyclone","cyclone","lgm_dlc_smuggler","cyclone"},
{L"Cyclone","cyclone","lgm_dlc_smuggler","cyclone"},
{L"Deveste 8","DEVESTE","lgm_dlc_arena","deveste"},
{L"Emperor ETR1","Sheava","lgm_dlc_stunt","sheava"},
{L"Emerus","emerus","lgm_dlc_vinewood","emerus"},
{L"Entity XXR","entity2","lgm_dlc_assault","entity2"},
{L"Entity XF","Entityxf","lgm_default","entityxf"},
{L"FMJ","Fmj","lgm_dlc_executive1","fmj"},
{L"Furia","furia","lgm_dlc_casinoheist","furia"},
{L"Progen GP1","gp1","lgm_dlc_specialraces","gp1"},
{L"Infernus","Infernus","sssa_default","infernus"},
{L"Itali GTB Custom","italigtb2","lsc_dlc_import_export","italigtb2"},
{L"Itali GTB","Italigtb","lsc_dlc_import_export","italigtb"},
{L"Krieger","krieger","lgm_dlc_vinewood","krieger"},
{L"Nero Custom","Nero2","lsc_dlc_import_export","nero2_b"},
{L"Nero","Nero","lsc_dlc_import_export","nero2_a"},
{L"Osiris","Osiris","lgm_dlc_luxe","Osiris"},
{L"Penetrator","Penetrator","lgm_dlc_importexport","penetrator"},
{L"Annis RE-7B","Le7b","lgm_dlc_stunt","le7b"},
{L"Reaper","Reaper","lgm_dlc_executive1","reaper"},
{L"Rocket Voltic","voltic2","candc_importexport","voltic2"},
{L"Annis S80RR","s80","lgm_dlc_vinewood","s80"},
{L"Ubermacht SC1","sc1","lgm_dlc_xmas2017","sc1_b"},
{L"Scramjet","Scramjet","candc_battle","scramjet"},
{L"Sultan RS","Sultanrs","lsc_jan2016","sultan2_a"},
{L"Progen T20","T20","lgm_dlc_luxe","t20"},
{L"Taipan","taipan","lgm_dlc_assault","taipan"},
{L"Tempesta","Tempesta","lgm_dlc_importexport","tempesta"},
{L"Tezeract","tezeract","lgm_dlc_assault","tezeract"},
{L"Thrax","thrax","lgm_dlc_vinewood","thrax"},
{L"Turismo R","turismor","lgm_dlc_business","turismor"},
{L"Tyrant","TYRANT","lgm_dlc_assault","tyrant"},
{L"Tyrus","Tyrus","lgm_dlc_stunt","tyrus"},
{L"Vacca","Vacca","lgm_default","vacca"},
{L"Vagner","Vagner","lgm_dlc_gunrunning","vagner"},
{L"Vigilante","Vigilante","candc_smuggler","vigilante"},
{L"Visione","visione","lgm_dlc_smuggler","visione"},
{L"Voltic","Voltic","lgm_default","voltic_tless"},
{L"Proto X80 ","Prototipo","lgm_dlc_executive1","prototipo"},
{L"Ocelot XA-21","xa21","lgm_dlc_gunrunning","xa21"},
{L"Zentorno","Zentorno","lgm_dlc_business2","zentorno"},
{L"Zorusso","zorrusso","lgm_dlc_vinewood","zorrusso"}
};
static std::vector<VehiclePreview> Sports{
{L"Albany Alpha","Alpha","lgm_dlc_business","alpha"},
{L"Banshee Topless","Banshee","lgm_dlc_business2","banshee_tless"},
{L"Dinka Blista","Blista2","sssa_dlc_mp_to_sp","blista2"},
{L"Grotti Bestia GTS","Bestiagts","lgm_dlc_executive1","bestiagts"},
{L"Dinka Blista(GO GO Monkey)","blista3","",""},
{L"Bravado Buffalo Sprunk","Buffalo2","sssa_dlc_hipster","buffalo"},
{L"Bravado Buffalo S ","Buffalo3","sssa_dlc_mp_to_sp","buffalo3"},
{L"Bravado Buffalo","Buffalo","sssa_dlc_hipster","buffalo"},
{L"Grotti Carbonizzare","Carbonizzare","lgm_default","carboniz"},
{L"Pfister Comet Retro Custom","Comet3","lsc_dlc_import_export","comet3"},
{L"Pfister Comet","Comet2","sssa_default","comet2"},
{L"Pfister Comet Safari","comet4","lgm_dlc_xmas2017","comet4_b"},
{L"Pfister Comet SR","comet5","lgm_dlc_xmas2017","comet5_b"},
{L"Invetero Coquette","Coquette","lgm_default","coquette"},
{L"Obey 8F Drafter","drafter","lgm_dlc_vinewood","drafter"},
{L"Declasse Drift Tampa","tampa2","sssa_dlc_stunt","tampa2"},
{L"Elegy RH8","Elegy2","lgm_default","elegy2"},
{L"Annis Elegy Retro Custom","Elegy","lsc_dlc_import_export","elegy"},
{L"Benefactor Feltzer","Feltzer2","",""},
{L"Formula PR4", "formula", "lgm_dlc_casinoheist", "formula"},
{L"Formula R88", "formula2", "lgm_dlc_casinoheist", "formula2"},
{L"Vapid Flash GT","flashgt","lgm_dlc_assault","flashgt"},
{L"Lampadati Furore GT","Furoregt","lgm_dlc_lts_creator","furore"},
{L"Schyster Fusilade","Fusilade","sssa_dlc_business2","fusilade"},
{L"Karin Futo","futo","sssa_dlc_battle","futo"},
{L"Vapid GB200","gb200","lgm_dlc_assault","gb200"},
{L"Declasse Hotring Sabre","hotring","sssa_dlc_assault","hotring"},
{L"Overflod Imorgon","imorgon","lgm_dlc_casinoheist","imorgon"},
{L"Issi Sport","issi7","sssa_dlc_vinewood","issi7"},
{L"Grotti Itali GTO","ITALIGTO","lgm_dlc_arena","italigto"},
{L"Dinka Jester(Racecar)","jester2","sssa_dlc_christmas_2","jester2"},
{L"Dinka Jester Classic","jester3","lgm_dlc_assault","jester3"},
{L"Dinka Jester","Jester","lgm_dlc_business","jester"},
{L"Ocelot Jugular","jugular","lgm_dlc_vinewood","jugular"},
{L"Hijak Khamelion","Khamelion","",""},
{L"Lampadati Komoda","komoda","lgm_dlc_casinoheist","komoda"},
{L"Karin Kuruma(Armored)","kuruma2","sssa_dlc_heist","kuruma2"},
{L"Karin Kuruma","kuruma","sssa_dlc_heist","kuruma"},
{L"Ocelot Locust","locust","lgm_dlc_vinewood","locust"},
{L"Ocelot Lynx","lynx","lgm_dlc_stunt","lynx"},
{L"Dewbauchee Massacro (Race)","Massacro2","sssa_dlc_christmas_2","massacro2"},
{L"Dewbauchee Massacro","Massacro","lgm_dlc_business2","massacro"},
{L"Vysser Neo","neo","lgm_dlc_vinewood","neo"},
{L"Pfister Neon","neon","lgm_dlc_xmas2017","neon_b"},
{L"Obey 9F Cabrio","Ninef2","lgm_default","ninef2"},
{L"Obey 9F","Ninef","sssa_default","ninef"},
{L"Obey Omnis","Omnis","sssa_dlc_stunt","omnis"},
{L"Enus Paragon R","paragon","lgm_dlc_vinewood","paragon"},
{L"Enus Paragon R (Armored)","paragon2","lgm_dlc_vinewood","paragon"},
{L"Ocelot Pariah","pariah","lgm_dlc_xmas2017","pariah_b"},
{L"Maibatsu Penumbra","Penumbra","sssa_dlc_business2","penumbra"},
{L"Coil Raiden","raiden","lgm_dlc_xmas2017","raiden_b"},
{L"Dewbauchee Rapid GT Cabrio","rapidgt2","lgm_default","rapidgt2"},
{L"Dewbauchee Rapid GT","Rapidgt","lgm_default","rapidgt"},
{L"BF Raptor","raptor","lgm_dlc_biker","raptor"},
{L"Ubermacht Revolter","revolter","lgm_dlc_xmas2017","revolter_b"},
{L"Hijak Ruston","ruston","lgm_dlc_specialraces","ruston"},
{L"Benefactor Schafter LWB","schafter4","lgm_dlc_apartments","schafter4"},
{L"Benefactor Schafter V12","schafter3","lgm_dlc_apartments","schafter3"},
{L"Benefactor Schlagen GT","SCHLAGEN","lgm_dlc_arena","schlagen"},
{L"Benefactor Schwarter","schwarzer","sssa_default","schwarze"},
{L"Ubermacht Sentine Classic","sentinel3","sssa_dlc_xmas2017","sentinel3_b"},
{L"Dewbauchee Seven 70","Seven70","lgm_dlc_executive1","seven70"},
{L"Dewbauchee Specter","specter","lsc_dlc_import_export","specter2_a"},
{L"Dewbauchee Specter Custom","specter2","lsc_dlc_import_export","specter2_b"},
{L"Benefactor Streiter","streiter","lgm_dlc_xmas2017","streiter_b"},
{L"Dinka Sugoi","sugoi","sssa_dlc_casinoheist","sugoi"},
{L"Karin Sultan","Sultan","lsc_jan2016","sultan2_a"},
{L"Karin Sultan Classic","sultan2","sssa_dlc_casinoheist","sultan2"},
{L"Benefactor Surano","surano","lgm_default","surano_convertable"},
{L"Lampadati Tropos Rallye","tropos","sssa_dlc_stunt","tropos"},
{L"Albany V-STR","vstr","lgm_dlc_casinoheist","vstr"},
{L"Bravado Verlierer","Verlierer2","lgm_dlc_apartments","verlier"},
{L"Annis Future Shock ZR380","ZR3802","mba_vehicles","zr3802"},
{L"Annis Nightmare ZR380","ZR3803","mba_vehicles","zr3803"},
{L"Annis Apocalypse ZR380","ZR380","mba_vehicles","zr3801"}
};
static std::vector<VehiclePreview> SportsClassics{
{L"Ocelot Ardent","Ardent","candc_gunrunning","ardent"},
{L"Lampadati Casco","casco","lgm_dlc_heist","casco"},
{L"Rune Cheburek","cheburek","sssa_dlc_assault","cheburek"},
{L"Grotti Cheetah Classic","Cheetah2","lgm_dlc_gunrunning","cheetah2"},
{L"Invetero Coquette Classic","coquette2","lgm_dlc_pilot","coquette2"},
{L"Imponte Deluxo","deluxo","candc_xmas2017","deluxo_b"},
{L"Weeny Dynasty","dynasty","sssa_dlc_vinewood","dynasty"},
{L"Vulcar Fagaloa ","fagaloa","sssa_dlc_assault","fagaloa"},
{L"Grotti GT500","gt500","lgm_dlc_xmas2017","gt500_b"},
{L"Pegassi Infernus Classic","Infernus2","lgm_dlc_specialraces","infernus2"},
{L"Dewbauchee JB 700","jb700","lgm_default","jb700"},
{L"Dewbauchee JB 700W","jb7002","lgm_default","jb700"},
{L"Declasse Mamba","mamba","lgm_dlc_apartments","mamba"},
{L"Albany Manana","manana","",""},
{L"Lampadati Michelli GT","michelli","sssa_dlc_assault","michelli"},
{L"Pegassi Monroe","monroe","lgm_default","monroe"},
{L"Vulcar Nebula Turbo","nebula","sssa_dlc_vinewood","nebula"},
{L"Vapid Peyote","Peyote","",""},
{L"Lampadati Pigalle","pigalle","sssa_dlc_hipster","pigalle"},
{L"Dewbauchee Rapid GT Classic","rapidgt3","lgm_dlc_smuggler","rapidgt3"},
{L"Vapid Retinue Mk II","retinue2","sssa_dlc_casinoheist","retinue2"},
{L"Vapid Retinue","Retinue","",""},
{L"Vapid Retinue","Retinue","sssa_dlc_smuggler","retinue_b"},
{L"Albany Franken Strange","btype2","sssa_dlc_halloween","btype2"},
{L"Albany Roosevelt Valor","btype3","lgm_dlc_valentines2","roosevelt2"},
{L"Albany Roosevelt","btype","lgm_dlc_valentines","roosevelt"},
{L"Annis Savestra","savestra","lgm_dlc_xmas2017","savestra_b"},
{L"Grotti Stinger GT","stingergt","lgm_default","stingerg"},
{L"Grotti Stinger","stinger","lgm_default","stinger"},
{L"Benefactor Stirling GT","Feltzer3","lgm_dlc_luxe","feltzer3"},
{L"Ocelot Stromberg","stromberg","candc_xmas2017","stromberg_b"},
{L"Ocelot Swinger","Swinger","lgm_dlc_battle","swinger"},
{L"Pegassi Torero","torero","lgm_dlc_gunrunning","torero"},
{L"Declasse Tornado","Tornado","",""},
{L"Declasse Tornado Convertible","Tornado2","",""},
{L"Declasse Tornado Gang","Tornado3","",""},
{L"Declasse Tornado Convertible Gang","Tornado4","",""},
{L"Declasse Tornado Custom","Tornado5","lsc_lowrider2","tornado5_a"},
{L"Declasse Tornado Rat Rod","tornado6","sssa_dlc_biker","tornado6"},
{L"Grotti Turismo Classic","turismo2","lgm_dlc_specialraces","turismo2"},
{L"Lampadati Viseris","viseris","lgm_dlc_xmas2017","viseris_b"},
{L"Truffade Z-Type","ztype","lgm_default","ztype"},
{L"Karin 190z","z190","lgm_dlc_xmas2017","z190_b"},
{L"Ubermacht Zion Classic","zion3","sssa_dlc_vinewood","zion3"}
};
static std::vector<VehiclePreview> Coupes{
{L"Enus Cognoscenti Cabrio","cogcabrio","lgm_default","cogcabri"},
{L"Dewbauchee Exemplar","Exemplar","sssa_default","exemplar"},
{L"Ocelot F620","F620","sssa_dlc_business2","f620"},
{L"Lampadati Felon","Felon","sssa_default","felon"},
{L"Lampadati Felon GT","Felon2","sssa_default","felon2"},
{L"Ocelot Jackal","Jackal","sssa_dlc_heist","jackal"},
{L"Ubermacht Oracle","Oracle","sssa_default","oracle"},
{L"Ubermacht Oracle Mk2","oracle2","sssa_dlc_heist","oracle1"},
{L"Ubermacht Sentinel XS","Sentinel","sssa_dlc_business2","sentinel"},
{L"Ubermacht Sentinel","Sentinel2","sssa_dlc_business2","sentinel"},
{L"Enus Windsor","Windsor","lgm_dlc_luxe","windsor"},
{L"Enus Windsor Drop","Windsor2","",""},
{L"Ubermacht Zion","Zion","sssa_default","zion"},
{L"Ubermacht Zion Cabrio","Zion2","sssa_default","zion2"}
};
static std::vector<VehiclePreview> Muscle{
{L"Vapid Blade","Blade","sssa_dlc_hipster","blade"},
{L"Imponte Ruiner 2000","ruiner3","",""},
{L"Albany Buccaaneer Custom","Buccaneer2","lsc_default","buccaneer2_b"},
{L"Albany Buccaaneer","Buccaneer","lsc_default","buccaneer2_a"},
{L"Vapid Chino Custom","Chino2","lsc_default","chino2_a"},
{L"Vapid Chino","Chino","lgm_dlc_luxe","chino"},
{L"Vapid Clique","CLIQUE","lgm_dlc_arena","clique"},
{L"Invetero Coquette Blackfin","coquette3","lgm_dlc_luxe","coquette3"},
{L"Schyster Deviant","DEVIANT","lgm_dlc_arena","deviant"},
{L"Vapid Dominator GTX","dominator3","sssa_dlc_assault","dominator3"},
{L"Vapid Apocalypse Dominator","DOMINATOR4","mba_vehicles","dominato_c_1"},
{L"Vapid Future Shock Dominator","DOMINATOR5","mba_vehicles","dominato_c_2"},
{L"Vapid Nightmare Dominator","DOMINATOR6","mba_vehicles","dominato_c_3"},
{L"Vapid Dominator","Dominator","sssa_dlc_business2","dominato"},
{L"Imponte Dukes of Death","Dukes2","candc_default","dukes"},
{L"Imponte Dukes","Dukes","sssa_dlc_mp_to_sp","dukes"},
{L"Vapid Ellie","ellie","sssa_dlc_assault","ellie"},
{L"Williard Faction Custom Donk","Faction3","lsc_lowrider2","faction3_b"},
{L"Williard Faction Custom","Faction2","lsc_lowrider2","faction3_a"},
{L"Williard Faction","Faction","lsc_default","faction2_a"},
{L"Bravado Redwood Gauntlet","Gauntlet2","sssa_dlc_mp_to_sp","gauntlet2"},
{L"Bravado Gauntlet Classic Custom","gauntlet3","sssa_dlc_vinewood","gauntlet3"},
{L"Bravado Gauntlet Hellfire","gauntlet4","sssa_dlc_vinewood","gauntlet4"},
{L"Bravado Gauntlet","Gauntlet","sssa_default","gauntlet"},
{L"Albany Hermes","hermes","sssa_dlc_xmas2017","hermes_b"},
{L"Vapid Hotknife","Hotknife","lgm_default","hotknife"},
{L"Vapid Hustler","hustler","lgm_dlc_xmas2017","hustler_b"},
{L"Declasse Impaler","IMPALER","mba_vehicles","impaler"},
{L"Declasse Impaler","impaler","sssa_dlc_vinewood","impaler"},
{L"Declasse Apocalypse Impaler","IMPALER2","mba_vehicles","impaler_c_1"},
{L"Declasse Future Shock Impaler","IMPALER3","mba_vehicles","impaler_c_2"},
{L"Declasse Nightmare Impaler","IMPALER4","mba_vehicles","impaler_c_3"},
{L"Vapid Future Shock Imperator","IMPERATOR2","mba_vehicles","imperator2"},
{L"Vapid Nightmare Imperator","IMPERATOR3","mba_vehicles","imperator3"},
{L"Vapid Apocalypse Imperator","IMPERATOR","mba_vehicles","imperator1"},
{L"Albany Lurcher","lurcher","sssa_dlc_halloween","lurcher"},
{L"Declasse Moonbeam Custom","Moonbeam2","lsc_default","moonbeam2"},
{L"Declasse Moonbeam","Moonbeam","",""},
{L"Imponte Nightsade","nightshade","lgm_dlc_apartments","niteshad"},
{L"Vapid Peyote Gasser","peyote2","sssa_dlc_vinewood","peyote2"},
{L"Imponte Phoenix","phoenix","",""},
{L"Cheval Picador","picador","sssa_dlc_hipster","picador"},
{L"Vapid Pisswaser Dominator","Dominator2","sssa_dlc_mp_to_sp","dominator2"},
{L"Bravado Rat Loader","ratloader","sssa_dlc_valentines","rloader"},
{L"Bravado Rat truck","ratloader2","sssa_dlc_christmas_2","rloader2"},
{L"Imponte Ruiner 2000","ruiner2","candc_importexport","ruiner2"},
{L"Imponte Ruiner","ruiner","sssa_dlc_battle","ruiner"},
{L"Declasse Sabre Turbo","Sabregt","",""},
{L"Declasse Sabre Turbo Custom","Sabregt2","lsc_lowrider2","sabregt2_a"},
{L"Vapid Slamvan LostMC","Slamvan2","",""},
{L"Vapid Slamvan Custom","Slamvan3","lsc_lowrider2","slamvan3_b"},
{L"Vapid Apocalypse Slamvan ","SLAMVAN4","mba_vehicles","slamvan_c_1"},
{L"Vapid Future Shock Slamvan","SLAMVAN5","mba_vehicles","slamvan_c_2"},
{L"Vapid Nightmare Slamvan","SLAMVAN6","mba_vehicles","slamvan_c_3"},
{L"Vapid Slamvan","Slamvan","sssa_dlc_christmas_2","slamvan"},
{L"Declasse Burgershot Stallion","stalion2","sssa_dlc_mp_to_sp","stalion2"},
{L"Declasse Stallion","Stalion","sssa_dlc_mp_to_sp","stallion"},
{L"Declasse Weaponized Tampa","tampa3","candc_gunrunning","tampa3"},
{L"Declasse Tampa","Tampa","sssa_dlc_christmas_3","tampa"},
{L"Declasse Tulip","TULIP","sssa_dlc_arena","tulip"},
{L"Declasse Vamos","VAMOS","sssa_dlc_arena","vamos"},
{L"Declasse Vigero","Vigero","sssa_default","vigero"},
{L"Dundreary Virgo Classic Custom","Virgo2","lsc_lowrider2","virgo2_a"},
{L"Dundreary Virgo Classic","Virgo3","lsc_lowrider2","virgo2_b"},
{L"Dundreary Virgo","Virgo","lgm_dlc_luxe","virgo"},
{L"Declasse Voodoo Custom","Voodoo2","lsc_default","voodoo_b"},
{L"Declasse Voodoo","Voodoo","lsc_default","voodoo_a"},
{L"Declasse Yosemite","yosemite","sssa_dlc_xmas2017","yosemite_b"},
{L"Declasse Drift Yosemite","yosemite2","sssa_dlc_casinoheist","yosemite2"}
};
static std::vector<VehiclePreview> Offroad{
{L"BF Injection","bfinjection","sssa_default","bfinject"},
{L"BF Bifta","Bifta","sssa_default","bifta"},
{L"Nagasaki Hotrod Blazer","Blazer3","sssa_dlc_hipster","blazer3"},
{L"Nagasaki Blazer Aqua","Blazer5","candc_importexport","blazer5"},
{L"Nagasaki Blazer Lifeguard","Blazer2","",""},
{L"Nagasaki Blazer","Blazer","sssa_default","blazer"},
{L"Nagasaki Street Blazer","Blazer4","sssa_dlc_biker","blazer4"},
{L"Canis Bodhi","Bodhi2","sssa_default","bodhi2"},
{L"Coil Brawler","Brawler","lgm_dlc_luxe","brawler"},
{L"Benefactor Future Shock Bruiser","BRUISER2","mba_vehicles","bruiser_c_2"},
{L"Benefactor Nightmare Bruiser","BRUISER3","mba_vehicles","bruiser_c_3"},
{L"Benefactor Apocalypse Bruiser","BRUISER","mba_vehicles","bruiser_c_1"},
{L"Declasse Future Shock Brutus","BRUTUS2","mba_vehicles","brutus2"},
{L"Declasse Nightmare Brutus","BRUTUS3","mba_vehicles","brutus3"},
{L"Declasse Apocalypse Brutus","BRUTUS","mba_vehicles","brutus1"},
{L"Vapid Caracara 4x4","caracara2","sssa_dlc_vinewood","caracara2"},
{L"Vapid Caracara","caracara","candc_assault","caracara"},
{L"Benefactor Dubsta 6x6","Dubsta3","candc_default","dubsta3"},
{L"BF Dune FAV","Dune3","candc_gunrunning","dune3"},
{L"MTL Dune","Dune","sssa_default","dune"},
{L"BF Duneloader","Dloader","",""},
{L"Karin Everin","everon","sssa_dlc_casinoheist","everon"},
{L"Karin Freecrawler","Freecrawler","lgm_dlc_battle","freecrawler"},
{L"Annis Hellion","hellion","sssa_dlc_vinewood","hellion"},
{L"HVY Insurgent PickUp Custom","Insurgent3","",""},
{L"HVY Insurgent PickUp Custom","Insurgent3","ua_generic","ua_unlock_11"},
{L"HVY Insurgent","Insurgent","candc_default","insurgent"},
{L"HVY Insurgent PickUp","Insurgent2","candc_default","insurgent"},
{L"Canis Kalahari","Kalahari","sssa_default","kalahari"},
{L"Canis Kamacho","kamacho","sssa_dlc_xmas2017","kamacho_b"},
{L"Cheval Marshall","marshall","candc_default","marshall"},
{L"HVY Menacer","Menacer","candc_battle","menacer"},
{L"Canis Mesa (Merryweather)","Mesa3","candc_default","mesa3"},
{L"Bravado Apocalypse Sasquatch","MONSTER3","mba_vehicles","monster_c_1"},
{L"Bravado Future Shock Sasquatch","MONSTER4","mba_vehicles","monster_c_2"},
{L"Bravado Nightmare Sasquatch","MONSTER5","mba_vehicles","monster_c_3"},
{L"HVY Nightshark","nightshark","candc_gunrunning","nightshark"},
{L"Nagasaki Outlaw","outlaw","sssa_dlc_casinoheist","outlaw"},
{L"BF Dune Buggy","Dune4","",""},
{L"Dune","Dune5","candc_importexport","dune5"},
{L"Declasse Rancher XL","Rancherxl2","",""},
{L"Declasse Yosemite Rancher","Rancherxl","sssa_dlc_business","rancherx"},
{L"RC Bandito","RCBANDITO","sssa_dlc_arena","rcbandito"},
{L"Karin Rusty Rebel","Rebel2","sssa_dlc_hipster","rebel2"},
{L"Karin Rebel","Rebel","sssa_default","rebel"},
{L"Vapid Riata","riata","sssa_dlc_xmas2017","riata_b"},
{L"Vapid Sandking XL","Sandking","sssa_default","sandking_b"},
{L"Vapid Sandking SWB","Sandking2","sssa_default","sandkin_2b"},
{L"Dune2","Dune2","",""},
{L"Karin Technical modified edition","Technical3","",""},
{L"Karin Technical Aqua","Technical2","candc_importexport","technical2"},
{L"Karin Technical Custom","Technical3","ua_generic","ua_unlock_15"},
{L"Karin Technical","Technical","candc_default","technical"},
{L"Vapid Liberator","monster","candc_default","monster"},
{L"Vapid Desert Raid","TrophyTruck2","sssa_dlc_stunt","trophy2"},
{L"Vapid Trophy Truck","TrophyTruck","sssa_dlc_stunt","trophy"},
{L"Maxwell Vagrant","vagrant","sssa_dlc_casinoheist","vagrant"},
{L"Rune Zhaba","Zhaba","",""},
};
static std::vector<VehiclePreview> Motorcycles{
{L"Dinka Akuma","Akuma","sssa_default","akuma"},
{L"LCC Avarus","Avarus","sssa_dlc_biker","avarus"},
{L"Nagasaki BF400","BF400","sssa_dlc_stunt","bf400"},
{L"Western Bagger","Bagger","sssa_dlc_biker","bagger"},
{L"Pegassi Bati 801RR","BATI2","sssa_default","bati2"},
{L"Pegassi Bati 801","BATI","sssa_default","bati"},
{L"Nagasaki Carbon RS","CARBONRS","lgm_default","carbon"},
{L"Nagasaki Chimera","CHIMERA","sssa_dlc_biker","chimera"},
{L"Western Cliffhanger","CLIFFHANGER","sssa_dlc_stunt","cliffhanger"},
{L"Western Daemon Custom","DAEMON2","sssa_dlc_biker","daemon2"},
{L"Western Daemon","DAEMON","",""},
{L"Western Future Shock Deathbike","DEATHBIKE2","mba_vehicles","deathbike_c_2"},
{L"Western Nightmare Deathbike","DEATHBIKE3","mba_vehicles","deathbike_c_3"},
{L"Western Apocalypse Deathbike ","DEATHBIKE","mba_vehicles","deathbike_c_1"},
{L"Shitzu Defiler","DEFILER","sssa_dlc_biker","defiler"},
{L"Principe Diabolus Custom","DIABLOUS2","lsc_dlc_import_export","diablous2"},
{L"Principe Diabolus","DIABLOUS","",""},
{L"Dinka Double-T","DOUBLE","sssa_default","double"},
{L"Dinka Enduro","ENDURO","sssa_dlc_heist","enduro"},
{L"Pegassi Esskey","ESSKEY","sssa_dlc_biker","esskey"},
{L"Pegassi FCR 1000 Custom","FCR2","lsc_dlc_import_export","fcr2_b"},
{L"Pegassi FCR 1000","FCR","lsc_dlc_import_export","fcr2_a"},
{L"Pegassi Faggio Mod","FAGGIO3","sssa_dlc_biker","faggio3"},
{L"Pegassi Faggio","FAGGIO","sssa_default","faggio"},
{L"Pegassi Faggio Sport","FAGGIO2","sssa_dlc_biker","faggion"},
{L"Western Gargoyle","GARGOYLE","sssa_dlc_stunt","gargoyle"},
{L"Shitzu Hakuchou Dragbike","HAKUCHOU2","lgm_dlc_biker","hakuchou2"},
{L"Shitzu Hakuchou","HAKUCHOU","sssa_dlc_lts_creator","hakuchou"},
{L"LCC Hexer","HEXER","sssa_default","hexer"},
{L"LCC Innovation","INNOVATION","sssa_dlc_lts_creator","innovation"},
{L"Principe Lectro","LECTRO","lgm_dlc_heist","lectro"},
{L"Maibatsu Manchez","MANCHEZ","sssa_dlc_biker","manchez"},
{L"Principe Nemesis","NEMESIS","sssa_dlc_heist","nemesis"},
{L"Western Nightblade","NIGHTBLADE","sssa_dlc_biker","nightblade"},
{L"Opressor Mk II","Oppressor2","candc_battle","oppressor2"},
{L"Opressor Mk I","Oppressor","candc_gunrunning","oppressor"},
{L"PCJ 600","PCJ","sssa_default","pcj"},
{L"Western Ratbike","RATBIKE","sssa_dlc_biker","ratbike"},
{L"Western Rampant Rocket Tricycle","rrocket","lgm_dlc_vinewood","rrocket"},
{L"Pegassi Rufian","RUFFIAN","sssa_default","ruffian"},
{L"Maibatsu Sanchez","SANCHEZ2","sssa_default","sanchez2"},
{L"Maibatsu Sanchez Livery","SANCHEZ","sssa_default","sanchez"},
{L"LCC Sanctus","SANCTUS","sssa_dlc_biker","sanctus"},
{L"Nagasaki Shotaro","SHOTARO","lgm_dlc_biker","shotaro"},
{L"Western Sovereign","SOVEREIGN","",""},
{L"Nagasaki Stryder","stryder","lgm_dlc_casinoheist","stryder"},
{L"Dinka Thrust","THRUST","lgm_dlc_business2","thrust"},
{L"Shitzu Vader","VADER","sssa_default","vader"},
{L"Dinka Vindicator","VINDICATOR","lgm_dlc_luxe","vindicator"},
{L"Pegassi Vortex","VORTEX","sssa_dlc_biker","vortex"},
{L"Western Wolfsbane","WOLFSBANE","sssa_dlc_biker","wolfsbane"},
{L"Western Zombie Chopper","ZOMBIEB","sssa_dlc_biker","zombieb"},
{L"Western Zombie Bobber","ZOMBIEA","sssa_dlc_biker","zombiea"}
};
static std::vector<VehiclePreview> Military{
{L"HVY APC","apc","candc_gunrunning","apc"},
{L"Trailer","Trailersmall2","candc_gunrunning","trsmall2"},
{L"Barracks 3","Barracks3","",""},
{L"Barracks 2","Barracks","candc_default","barracks"},
{L"Barrage","barrage","candc_xmas2017","barrage_b"},
{L"Chernobog","chernobog","candc_xmas2017","chernobog_b"},
{L"Crusader","Crusader","candc_default","crusader"},
{L"Halftrack","halftrack","candc_gunrunning","halftrack"},
{L"Bangjali","khanjali","candc_xmas2017","khanjali_b"},
{L"Rhino","Rhino","candc_default","rhino"},
{L"HVY Scarab 1","SCARAB2","mba_vehicles","scarab2"},
{L"HVY Scarab 2","SCARAB3","mba_vehicles","scarab3"},
{L"HVY Scarab 3","SCARAB","mba_vehicles","scarab1"},
{L"Thruster","thruster","candc_xmas2017","thruster_b"},
{L"HVY Barracks 2","Barracks2","",""}
};
static std::vector<VehiclePreview> Emergency{
{L"Ambulans","Ambulance","",""},
{L"FIB","Fbi","",""},
{L"Damkar","Firetruk","",""},
{L"FIB SUV","Fbi2","",""},
{L"Lifeguard","Lguard","",""},
{L"Pranger","Pranger","",""},
{L"Polisi 3","Police3","",""},
{L"Cab Polisi","Policeb","",""},
{L"Polisi 2","Police2","",""},
{L"Polisi 1","Police","",""},
{L"Polisi tua 1","Policeold1","",""},
{L"Polisi tua 2","Policeold2","",""},
{L"Riot","Riot","",""},
{L"Policet","Policet","",""},
{L"Pbus","Pbus","candc_default","pbus"},
{L"Riot 2","riot2","candc_xmas2017","riot2_b"},
{L"Sheriff","Sheriff","",""},
{L"Sheriff SUV","Sheriff2","",""},
{L"Polisi 4","Police4","",""}
};
static std::vector<VehiclePreview> Service{
{L"Airbus","Airbus","candc_default","airbus"},
{L"MTL Brickade","Brickade","candc_executive1","brickade"},
{L"Bus","Bus","candc_default","bus"},
{L"Coach","Coach","candc_default","coach"},
{L"MTL Rally","Rallytruck","sssa_dlc_stunt","rallytruck"},
{L"pbus","Pbus2","sssa_dlc_battle","pbus2"},
{L"Rentbus","Rentalbus","candc_default","rentbus"},
{L"Taxi","Taxi","",""},
{L"Tourbus","Tourbus","",""},
{L"Trash","Trash2","",""},
{L"Trash 2","Trash","",""},
{L"MTL Wastelander","Wastelander","candc_importexport","wastlndr"},
};
static std::vector<VehiclePreview> Sedans{
{L"Declasse Asea Custom","Asea2","",""},
{L"Declasse Asea","Asea","sssa_dlc_business","asea"},
{L"Karin Asterope","Asterope","sssa_dlc_business","astrope"},
{L"Enus Cognoscenti 55","Cog55","lgm_dlc_apartments","cognosc"},
{L"Enus Cognoscenti 55 (Armored)","Cog552","",""},
{L"Declasse Premier","Premier","sssa_dlc_business","premier"},
{L"Emperor Modif 1 (破旧版)","Emperor2","",""},
{L"Emperor modif 2 (雪地版)","Emperor3","",""},
{L"Albany Emperor","Emperor","",""},
{L"Enus Super Diamond","Superd","sssa_default","superd"},
{L"Cheval Fugitive","Fugitive","sssa_default","fugitive"},
{L"Benefactor Glendale","Glendale","sssa_dlc_hipster","glendale"},
{L"Karin Intruder","Intruder","sssa_dlc_business","intruder"},
{L"Benefactor Turreted Limo","Limo2","",""},
{L"Dundreary Stretch","Stretch","sssa_default","stretch"},
{L"Albany Primo Custom","Primo2","",""},
{L"Albany Primo","Primo","sssa_dlc_hipster","primo"},
{L"Dundreary Regina","Regina","sssa_dlc_hipster","regina"},
{L"Mobil Jenazah","Romero","sssa_dlc_battle","Romero"},
{L"Benefactor Schafter V12 Armored","Schafter5","lgm_dlc_apartments","schafter3"},
{L"Benefactor Schafter LWB Armored","Schafter6","lgm_dlc_apartments","schafter4"},
{L"Benefactor Schafter","Schafter2","sssa_dlc_heist","schafter2"},
{L"Enus Stafford","Stafford","lgm_dlc_battle","stafford"},
{L"Vapid Stanier","Stanier","sssa_dlc_business","stanier"},
{L"Zirconium Stratum","Stratum","sssa_dlc_business","stratum"},
{L"Cheval Surge","Surge","sssa_dlc_heist","surge"},
{L"Obey Tailgater","Tailgater","sssa_dlc_hipster","tailgater"},
{L"Vulcar Ingot","Ingot","sssa_dlc_business","ingot"},
{L"Vulcar Warrener","Warrener","sssa_dlc_hipster","warrener"},
{L"Albany Washington","Washington","sssa_dlc_business","washingt"}
};
static std::vector<VehiclePreview> Industrial{
{L"HVY Bulldozer","Bulldozer","",""},
{L"HVY Cutter","Cutter","",""},
{L"Handler","Handler","",""},
{L"HVY Dump","Dump","candc_default","dump"},
{L"MTL Flatbed","Flatbed","",""},
{L"Guardian","Guardian","sssa_dlc_heist","guardian"},
{L"HVY Mixer2","Mixer2","",""},
{L"HVY Mixer","Mixer","",""},
{L"Rubble","Rubble","",""},
{L"Tiptruck 2","Tiptruck","",""},
{L"Tip Truck","Tiptruck2","",""}
};
static std::vector<VehiclePreview> Compacts{
{L"Asbo","asbo","sssa_dlc_casinoheist","asbo"},
{L"Dinka Blista","Blista","",""},
{L"Karin Dilettante (FlyUS)","Dilettante2","",""},
{L"Karin Dilettante","Dilettante","sssa_default","dilettan"},
{L"Grotti Brioso R/A","Brioso","sssa_dlc_stunt","brioso"},
{L"Weeny Issi Classic","issi3","sssa_dlc_assault","issi3"},
{L"Issi Apocalypse","ISSI4","mba_vehicles","issi3_c_1"},
{L"Issi Future Shock","ISSI5","mba_vehicles","issi3_c_2"},
{L"Issi Nightmare","ISSI6","mba_vehicles","issi3_c_3"},
{L"Dinka Blista Kanjo","kanjo","sssa_dlc_casinoheist","kanjo"},
{L"Benefactor Panto","Panto","sssa_dlc_hipster","panto"},
{L"Bollokan Prairie","Prairie","sssa_dlc_battle","prairie"},
{L"Declasse Rhapsody","Rhapsody","sssa_dlc_hipster","rhapsody"},
{L"Weeny Issi","Issi2","sssa_default","issi2"}
};
static std::vector<VehiclePreview> Commercial{
{L"Vapid Benson","Benson","",""},
{L"MTL Future Shock Cerberus","CERBERUS2","mba_vehicles","cerberus2"},
{L"MTL Nightmare Cerberus","CERBERUS3","mba_vehicles","cerberus3"},
{L"MTL Appocalypse Cerberus","CERBERUS","mba_vehicles","cerberus1"},
{L"HVY Biff","Biff","",""},
{L"JoBuilt Hauler","Hauler","",""},
{L"JoBuilt Hauler Custom","Hauler2","candc_truck","cab_1"},
{L"MTL Packer","Packer","",""},
{L"Maibatsu Mule Custom","Mule2","",""},
{L"Maibatu Mule Custom1","Mule3","candc_default","mule3"},
{L"Maibatsu Mule Custom2","Mule4","candc_battle","mule4"},
{L"Maibatsu Mule","Mule","candc_default","mule"},
{L"JoBuilt Phantom Custom","phantom3","candc_truck","cab_0"},
{L"JoBuilt Phantom Wedge","Phantom2","candc_importexport","phantom2"},
{L"JoBuilt Phantom","Phantom","",""},
{L"MTL Pounder Custom","Pounder2","candc_battle","pounder2"},
{L"MTL Pounder","Pounder","",""},
{L"Stockade Custom","Stockade3","",""},
{L"Stockade","Stockade","",""},
{L"Terrobyte","Terbyte","",""}
};
static std::vector<VehiclePreview> Planes{
{L"Alpha Z1","alphaz1","elt_dlc_smuggler","alphaz1"},
{L"Avenger","avenger","candc_chopper","banner_5"},
{L"Avenger 2","avenger2","candc_chopper","banner_4"},
{L"Besra","Besra","elt_dlc_pilot","besra"},
{L"Blimp","Blimp2","",""},
{L"Blimp 2","Blimp","",""},
{L"Blimp 3","blimp3","elt_dlc_battle","blimp3"},
{L"RM-10 Bombushka","Bombushka","candc_smuggler","bombushka"},
{L"Antonov","Cargoplane","",""},
{L"Cuban 800","Cuban800","elt_default","cuban800"},
{L"Dodo","Dodo","elt_default","dodo"},
{L"Duster","Duster","elt_default","duster"},
{L"Howard NX-25","Howard","elt_dlc_smuggler","howard"},
{L"Hydra","Hydra","candc_default","hydra"},
{L"B747","Jet","",""},
{L"Luxor Deluxe","Luxor2","elt_dlc_executive1","luxor2"},
{L"Luxor","Luxor","elt_default","luxor"},
{L"Mammatus","Mammatus","elt_default","mammatus"},
{L"Microlight","Microlight","elt_dlc_smuggler","microlight"},
{L"Miljet","Miljet","elt_dlc_pilot","miljet"},
{L"Mogul","Mogul","candc_smuggler","mogul"},
{L"V-65 Molotok","Molotok","candc_smuggler","molotok_b"},
{L"Nimbus","Nimbus","elt_dlc_executive1","nimbus"},
{L"Nokota","Nokota","candc_smuggler","nokota"},
{L"P-996 Lazer","Lazer","candc_smuggler","lazer"},
{L"Pyro","Pyro","candc_smuggler","pyro"},
{L"Rogue","Rogue","candc_smuggler","rogue"},
{L"Seabreeze","Seabreeze","elt_dlc_smuggler","seabreeze"},
{L"Shamal","Shamal","elt_default","shamal"},
{L"LF-22 Starling","starling","candc_smuggler","starling"},
{L"B-11 Strikeforce","Strikeforce","candc_battle","strikeforce"},
{L"Stunt","Stunt","elt_default","stunt"},
{L"Titan","Titan","elt_default","titan"},
{L"Tula","tula","candc_smuggler","tula"},
{L"Velum","Velum2","elt_default","velum2"},
{L"Velum 2","Velum","elt_default","velum"},
{L"Vestra","Vestra","",""},
{L"Volatol (Kontol)","volatol","candc_xmas2017","volatol_b"}
};
static std::vector<VehiclePreview> Utility{
{L"Airtug","Airtug","",""},
{L"ArmyTrailer (1)","Armytrailer","",""},
{L"ArmyTrailer (2)","Armytrailer2","",""},
{L"ArmyTanker","Armytanker","",""},
{L"Trailer3","Tr3","",""},
{L"BoatTrailer","Boattrailer","",""},
{L"Caddy","Caddy","",""},
{L"Caddy2","Caddy2","foreclosures_bunker","transportation_2"},
{L"Caddy3","Caddy3","foreclosures_bunker","transportation_1"},
{L"Trailer2","Tr2","",""},
{L"Trailer4","Tr4","",""},
{L"Trailer (Pibwasser)","Trailers2","",""},
{L"Trailer (Big Good)","Trailers3","",""},
{L"Trailer4","Trailers4","",""},
{L"Dock Trailer","Docktrailer","",""},
{L"Dock Tug","Docktug","",""},
{L"TV Trailer (Fame or Shame)","Tvtrailer","",""},
{L"Tractor3","Tractor3","",""},
{L"Tractor2","Tractor2","",""},
{L"Freight Trailer","Freighttrailer","",""},
{L"Flat Trailer","Trflat","",""},
{L"HVY Forklift","Forklift","",""},
{L"Graintraler","Graintrailer","",""},
{L"Bale Trailer","Baletrailer","",""},
{L"Trailer Logs","Trailerlogs","",""},
{L"Prop Trailer","Proptrailer","",""},
{L"Trailer Larger","trailerlarge","candc_truck","banner_2"},
{L"Tanker","Tanker2","",""},
{L"Tanker(RON)","Tanker","",""},
{L"Ultility Truck","Utillitruck3","",""},
{L"Trailers","Trailers","",""},
{L"Ultility Truck 2","Utillitruck2","",""},
{L"Rake Trailer","Raketrailer","",""},
{L"Ripley","Ripley","",""},
{L"Scrap","Scrap","",""},
{L"Trailer Small","Trailersmall","",""},
{L"Mower","Mower","",""},
{L"Utility Truck 3","Utillitruck","",""},
{L"Tow Truck","Towtruck","",""},
{L"Tow Truck (2)","Towtruck2","",""},
{L"Tractor","Tractor","",""},
{L"Sadler 2","Sadler2","",""},
{L"Sadler","Sadler","sssa_default","sadler"},
};
static std::vector<VehiclePreview> Helicopters{
{L"Akula","akula","candc_xmas2017","akula_b"},
{L"Annihilator","Annihilator","elt_default","annihl"},
{L"Nagasaki Buzzard Attack Chopper","Buzzard","candc_default","buzzard"},
{L"Nagasaki Buzzard","Buzzard2","",""},
{L"Cargobob custom","Cargobob4","",""},
{L"Western Cargobob Jetsam","Cargobob2","",""},
{L"Western Cargobob (TPE)","Cargobob3","",""},
{L"Western Cargobob","Cargobob","candc_default","cargobob"},
{L"Frogger","Frogger","elt_default","frogger"},
{L"Frogger(FIB)","Frogger2","",""},
{L"Havok","havok","elt_dlc_smuggler","havok"},
{L"FH-1 Hunter","hunter","candc_smuggler","hunter"},
{L"Maverick","Maverick","elt_default","maverick"},
{L"Police Maverick","Polmav","",""},
{L"Savage","Savage","candc_default","savage"},
{L"Sea Sparrow","SEASPARROW","elt_dlc_assault","sparrow"},
{L"HVY Skylift","Skylift","",""},
{L"Buckingham Supervolito Carbon","Supervolito2","",""},
{L"Buckingham Supervolito","Supervolito","",""},
{L"Buckingham Swift Deluxe","Swift2","elt_dlc_executive1","swift2"},
{L"Buckingham Swift","Swift","elt_dlc_pilot","swift"},
{L"Valkyrie","Valkyrie2","",""},
{L"Valkyrie (Custom)","Valkyrie","candc_default","valkyrie"},
{L"Volatus","Volatus","elt_dlc_executive1","volatus"},
};
static std::vector<VehiclePreview> Vans{
{L"BF Surfer (Custom)","Surfer2","",""},
{L"BF Surfer","Surfer","sssa_dlc_hipster","surfer"},
{L"Bravado Bison (BackupRack)","Bison2","",""},
{L"Bravado Bison (Rack)","Bison3","",""},
{L"Bravado Bison","Bison","sssa_default","bison"},
{L"Bobcat XL","Bobcatxl","sssa_dlc_business","bobcatxl"},
{L"Boxville (armored)","Boxville5","candc_importexport","boxville5"},
{L"Boxville (Go Postal)","Boxville2","",""},
{L"Boxville (Humane)","Boxville3","",""},
{L"Boxville (Post OP)","Boxville4","candc_default","boxville4"},
{L"Boxville (W & P)","Boxville","",""},
{L"Brute Pony (Business)","Pony","",""},
{L"Brute Pony (Store)","Pony2","",""},
{L"Burrito (Bug Stars)","Burrito2","",""},
{L"Burrito (Construction)","Burrito4","",""},
{L"Burrito (Gang)","Gburrito2","sssa_dlc_heist","gburrito2"},
{L"Burrito (The Lost MC)","Gburrito","",""},
{L"Burriot 5","Burrito5","",""},
{L"Burrito 3","Burrito3","",""},
{L"Burrito (Graphics)","Burrito","",""},
{L"Camper","Camper","",""},
{L"Journey","Journey","candc_default","journey"},
{L"MiniVan Custom","Minivan2","lsc_lowrider2","minivan2_b"},
{L"MiniVAN","Minivan","sssa_dlc_business","minivan"},
{L"Paradise","Paradise","sssa_default","paradise"},
{L"Rumpo (Armored)","Rumpo3","sssa_dlc_executive_1","rumpo3_b"},
{L"Rumpo (Deludamol)","Rumpo2","",""},
{L"Rumpo (Weazel News)","Rumpo","sssa_dlc_heist","rumpo"},
{L"Speedo 3","Speedo4","",""},
{L"Speedo 2","Speedo2","",""},
{L"Speedo","Speedo","",""},
{L"Taco","Taco","",""},
{L"Bravado Youga Custom","Youga2","sssa_dlc_biker","youga2"},
{L"Bravado Youga","Youga","sssa_dlc_hipster","youga"}
};
static std::vector<VehiclePreview> Boats{
{L"Nagasaki Dinghy","Dinghy","",""},
{L"Nagasaki Dinghy (2-Seater)","Dinghy2","",""},
{L"Nagasaki Dinghy (Robbery)","Dinghy3","dock_default","dinghy3"},
{L"Nagasaki Dinghy (Black&White)","Dinghy4","",""},
{L"Shitzu Jetmax","Jetmax","dock_default","jetmax"},
{L"Dinka Marquis","Marquis","dock_default","marquis"},
{L"Police Predator","Predator","",""},
{L"Seashark","Seashark","dock_default","seashark"},
{L"Seashark (Lifeguard)","Seashark2","",""},
{L"Seashark (Charged)","Seashark3","",""},
{L"Pegassi Speeder","Speeder","dock_default","speeder"},
{L"Pegassi Speeder (Custom)","Speeder2","",""},
{L"Shitzu Squalo","Squalo","dock_default","squalo"},
{L"Submersible","Submersible","",""},
{L"Kraken Submersible (Kraken)","Submersible2","dock_default","sub2"},
{L"Shitzu Suntrap","Suntrap","dock_default","suntrap"},
{L"Lampadati Toro","Toro","dock_default","toro"},
{L"Lampadati Toro (Custom)","Toro2","",""},
{L"Shitzu Tropic","Tropic","dock_default","tropic"},
{L"Shitu Tropic (Custom)","Tropic2","",""},
{L"Tug","Tug","",""}
};
static std::vector<VehiclePreview> Cycles{
{L"BMX","Bmx","pandm_default","bmx"},
{L"Cruiser","Cruiser","pandm_default","cruiser"},
{L"Tribike2","Tribike2","pandm_default","tribike2"},
{L"Fixter","Fixter","",""},
{L"Scorcher","Scorcher","pandm_default","scorcher"},
{L"Tribike2","Tribike3","pandm_default","tribike3"},
{L"Tribike1","Tribike","pandm_default","tribike"}
};
static std::vector<VehiclePreview> Trains{
{L"CableCar","Cablecar","",""},
{L"Gerbong1","Freightcont1","",""},
{L"Gerbong2","Freightcont2","",""},
{L"Freightcar","Freightcar","",""},
{L"Freight","Freight","",""},
{L"Kereta Api","Freightgrain","",""},
{L"Metro Train","Metrotrain","",""},
{L"TankerCar","Tankercar","",""}
};
static std::vector<VehiclePreview> Trailer{
{L"Army Tanker", "Armytanker", "", "" },
{L"Army Trailer", "Armytrailer", "", "" },
{L"Army Trailer 2", "Armytrailer2", "", "" },
{L"Bale Trailer", "Baletrailer", "", "" },
{L"Boat Trailer", "Boattrailer", "", "" },
{L"Dock Trailer", "Docktrailer", "", "" },
{L"Freight Trailer", "Freighttrailer", "", "" },
{L"Grain Trailer", "Graintrailer", "", "" },
{L"Prop Trailer", "Proptrailer", "", "" },
{L"Rake Trailer", "Raketrailer", "", "" },
{L"Tanker (RON)", "Tanker", "", "" },
{L"Tanker (2)", "Tanker2", "", "" },
{L"Tanker (3)", "Tr2", "", "" },
{L"Tanker (4)", "Tr3", "", "" },
{L"Tanker (5)", "Tr4", "", "" },
{L"Trailer Logs", "Trailerlogs", "", "" },
{L"Trailer entah", "Trailers", "", "" },
{L"Trailer (Pibwasser)", "Trailers2", "", "" },
{L"Trailer (Big Goods)", "Trailers3", "", "" },
{L"Trailer 4", "Trailers4", "", "" },
{L"Trailer Small", "Trailersmall", "", "" },
{L"Trailer Large", "trailerlarge", "", "" },
{L"Trailer Flat", "Trflat", "", "" },
{L"TV Trailer (Fame or Shame)", "Tvtrailer", "", "" }
};
static std::vector<VehiclePreview> SUV{
{L"Gallivanter Baller (CEO)","Baller6","",""},
{L"Gallivanter Baller 2","Baller2","sssa_default","baller2"},
{L"Gallivanter Baller LE (Armored)","Baller5","",""},
{L"Gallivanter Baller LE LWB","Baller4","lgm_dlc_apartments","baller4"},
{L"Gallivanter Baller LE","Baller3","lgm_dlc_apartments","baller3"},
{L"Gallivanter Baller","Baller","",""},
{L"BeeJay XL","Bjxl","sssa_dlc_battle","bjxl"},
{L"Canis Seminole Frontier","Seminole","sssa_dlc_heist","seminole"},
{L"Albany Cavalcade Mk2","CAVALCADE2","sssa_dlc_business","cavcade2"},
{L"Albany Cavalcade","CAVALCADE","sssa_default","cavcade"},
{L"Vapid Contender","Contender","sssa_dlc_stunt","contender"},
{L"Benefactor Dubsta2","Dubsta2","",""},
{L"Benefactor Dubsta","Dubsta","",""},
{L"Emperor Habanero","Habanero","sssa_dlc_battle","habanero"},
{L"Enus Huntley S","Huntley","lgm_dlc_business2","huntley"},
{L"Fathom FQ 2","fq2","sssa_dlc_battle","fq2"},
{L"Declasse Granger","Granger","sssa_dlc_business","granger"},
{L"Bravado Gresley","Gresley","sssa_dlc_heist","gresley"},
{L"Dundreary Landstalker","Landstalker","sssa_dlc_heist","landstalker"},
{L"Mammoth Patriot","Patriot","sssa_dlc_battle","patriot"},
{L"Cannis Mesa (Custom)","Mesa2","",""},
{L"Cannis Mesa SUV","Mesa","candc_default","mesa"},
{L"Lampadati Novak","novak","lgm_dlc_vinewood","novak"},
{L"Mammoth Patriot Stretch","Patriot2","sssa_dlc_battle","patriot2"},
{L"Vapid Radius","Radi","sssa_dlc_business","radi"},
{L"Ubermacht Rebla GTS","rebla","lgm_dlc_casinoheist","rebla"},
{L"Obey Rocoto","Rocoto","sssa_default","rocoto"},
{L"Benefactor Serrano","Serrano","sssa_dlc_battle","serrano"},
{L"Pegassi Toros","TOROS","lgm_dlc_arena","toros"},
{L"Benefactor XLS(Armored)","Xls2","",""},
{L"Benefactor XLS","Xls","lgm_dlc_executive1","xls"}
};
static std::vector<std::pair<std::wstring, std::vector<VehiclePreview>>> vehiclePreview{
{L"Super >>",Super},
{L"Sport >>",Sports},
{L"SportClassic >>",SportsClassics},
{L"Coupe >>",Coupes},
{L"Muscle >>",Muscle},
{L"Offroad >>",Offroad},
{L"Motor >>",Motorcycles},
{L"Militer >>",Military},
{L"Emergency >>",Emergency},
{L"Service >>",Service},
{L"Sedan >>",Sedans},
{L"Industri >>",Industrial},
{L"Compact >>",Compacts},
{L"Commercial >>",Commercial},
{L"Pesawat >>",Planes},
{L"Utility >>",Utility},
{L"Helikopter >>",Helicopters},
{L"Van >>",Vans},
{L"Perahu >>",Boats},
{L"Sepeda >>",Cycles},
{L"Kereta >>",Trains},
{L"Trailer >>",Trailer},
{L"SUV >>",SUV},
};
static unsigned int joaat(std::string input)
{
unsigned int num1 = 0U;
for (char c : input)
{
unsigned int num2 = num1 + (unsigned int)tolower(c);
unsigned int num3 = num2 + (num2 << 10);
num1 = num3 ^ num3 >> 6;
}
unsigned int num4 = num1 + (num1 << 3);
unsigned int num5 = num4 ^ num4 >> 11;
return num5 + (num5 << 15);
}

2791
subVersion/d3d9/d3d9.h Normal file

File diff suppressed because it is too large Load Diff

BIN
subVersion/d3d9/d3d9.lib Normal file

Binary file not shown.

78
subVersion/d3d9/d3dx9.h Normal file
View File

@ -0,0 +1,78 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx9.h
// Content: D3DX utility library
//
//////////////////////////////////////////////////////////////////////////////
#ifdef __D3DX_INTERNAL__
#error Incorrect D3DX header used
#endif
#ifndef __D3DX9_H__
#define __D3DX9_H__
// Defines
#include <limits.h>
#define D3DX_DEFAULT ((UINT) -1)
#define D3DX_DEFAULT_NONPOW2 ((UINT) -2)
#define D3DX_DEFAULT_FLOAT FLT_MAX
#define D3DX_FROM_FILE ((UINT) -3)
#define D3DFMT_FROM_FILE ((D3DFORMAT) -3)
#ifndef D3DXINLINE
#ifdef _MSC_VER
#if (_MSC_VER >= 1200)
#define D3DXINLINE __forceinline
#else
#define D3DXINLINE __inline
#endif
#else
#ifdef __cplusplus
#define D3DXINLINE inline
#else
#define D3DXINLINE
#endif
#endif
#endif
// Includes
#include "d3d9.h"
#include "d3dx9math.h"
#include "d3dx9core.h"
#include "d3dx9xof.h"
#include "d3dx9mesh.h"
#include "d3dx9shader.h"
#include "d3dx9effect.h"
#include "d3dx9tex.h"
#include "d3dx9shape.h"
#include "d3dx9anim.h"
// Errors
#define _FACDD 0x876
#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code )
enum _D3DXERR {
D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900),
D3DXERR_INVALIDMESH = MAKE_DDHRESULT(2901),
D3DXERR_CANNOTATTRSORT = MAKE_DDHRESULT(2902),
D3DXERR_SKINNINGNOTSUPPORTED = MAKE_DDHRESULT(2903),
D3DXERR_TOOMANYINFLUENCES = MAKE_DDHRESULT(2904),
D3DXERR_INVALIDDATA = MAKE_DDHRESULT(2905),
D3DXERR_LOADEDMESHASNODATA = MAKE_DDHRESULT(2906),
D3DXERR_DUPLICATENAMEDFRAGMENT = MAKE_DDHRESULT(2907),
D3DXERR_CANNOTREMOVELASTITEM = MAKE_DDHRESULT(2908),
};
#endif //__D3DX9_H__

BIN
subVersion/d3d9/d3dx9.lib Normal file

Binary file not shown.

1114
subVersion/d3d9/d3dx9anim.h Normal file

File diff suppressed because it is too large Load Diff

753
subVersion/d3d9/d3dx9core.h Normal file
View File

@ -0,0 +1,753 @@
///////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx9core.h
// Content: D3DX core types and functions
//
///////////////////////////////////////////////////////////////////////////
#include "d3dx9.h"
#ifndef __D3DX9CORE_H__
#define __D3DX9CORE_H__
///////////////////////////////////////////////////////////////////////////
// D3DX_SDK_VERSION:
// -----------------
// This identifier is passed to D3DXCheckVersion in order to ensure that an
// application was built against the correct header files and lib files.
// This number is incremented whenever a header (or other) change would
// require applications to be rebuilt. If the version doesn't match,
// D3DXCheckVersion will return FALSE. (The number itself has no meaning.)
///////////////////////////////////////////////////////////////////////////
#define D3DX_VERSION 0x0902
#define D3DX_SDK_VERSION 43
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
BOOL WINAPI
D3DXCheckVersion(UINT D3DSdkVersion, UINT D3DXSdkVersion);
#ifdef __cplusplus
}
#endif //__cplusplus
///////////////////////////////////////////////////////////////////////////
// D3DXDebugMute
// Mutes D3DX and D3D debug spew (TRUE - mute, FALSE - not mute)
//
// returns previous mute value
//
///////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
BOOL WINAPI
D3DXDebugMute(BOOL Mute);
#ifdef __cplusplus
}
#endif //__cplusplus
///////////////////////////////////////////////////////////////////////////
// D3DXGetDriverLevel:
// Returns driver version information:
//
// 700 - DX7 level driver
// 800 - DX8 level driver
// 900 - DX9 level driver
///////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
UINT WINAPI
D3DXGetDriverLevel(LPDIRECT3DDEVICE9 pDevice);
#ifdef __cplusplus
}
#endif //__cplusplus
///////////////////////////////////////////////////////////////////////////
// ID3DXBuffer:
// ------------
// The buffer object is used by D3DX to return arbitrary size data.
//
// GetBufferPointer -
// Returns a pointer to the beginning of the buffer.
//
// GetBufferSize -
// Returns the size of the buffer, in bytes.
///////////////////////////////////////////////////////////////////////////
typedef interface ID3DXBuffer ID3DXBuffer;
typedef interface ID3DXBuffer *LPD3DXBUFFER;
// {8BA5FB08-5195-40e2-AC58-0D989C3A0102}
DEFINE_GUID(IID_ID3DXBuffer,
0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);
#undef INTERFACE
#define INTERFACE ID3DXBuffer
DECLARE_INTERFACE_(ID3DXBuffer, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// ID3DXBuffer
STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE;
STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// D3DXSPRITE flags:
// -----------------
// D3DXSPRITE_DONOTSAVESTATE
// Specifies device state is not to be saved and restored in Begin/End.
// D3DXSPRITE_DONOTMODIFY_RENDERSTATE
// Specifies device render state is not to be changed in Begin. The device
// is assumed to be in a valid state to draw vertices containing POSITION0,
// TEXCOORD0, and COLOR0 data.
// D3DXSPRITE_OBJECTSPACE
// The WORLD, VIEW, and PROJECTION transforms are NOT modified. The
// transforms currently set to the device are used to transform the sprites
// when the batch is drawn (at Flush or End). If this is not specified,
// WORLD, VIEW, and PROJECTION transforms are modified so that sprites are
// drawn in screenspace coordinates.
// D3DXSPRITE_BILLBOARD
// Rotates each sprite about its center so that it is facing the viewer.
// D3DXSPRITE_ALPHABLEND
// Enables ALPHABLEND(SRCALPHA, INVSRCALPHA) and ALPHATEST(alpha > 0).
// ID3DXFont expects this to be set when drawing text.
// D3DXSPRITE_SORT_TEXTURE
// Sprites are sorted by texture prior to drawing. This is recommended when
// drawing non-overlapping sprites of uniform depth. For example, drawing
// screen-aligned text with ID3DXFont.
// D3DXSPRITE_SORT_DEPTH_FRONTTOBACK
// Sprites are sorted by depth front-to-back prior to drawing. This is
// recommended when drawing opaque sprites of varying depths.
// D3DXSPRITE_SORT_DEPTH_BACKTOFRONT
// Sprites are sorted by depth back-to-front prior to drawing. This is
// recommended when drawing transparent sprites of varying depths.
// D3DXSPRITE_DO_NOT_ADDREF_TEXTURE
// Disables calling AddRef() on every draw, and Release() on Flush() for
// better performance.
//////////////////////////////////////////////////////////////////////////////
#define D3DXSPRITE_DONOTSAVESTATE (1 << 0)
#define D3DXSPRITE_DONOTMODIFY_RENDERSTATE (1 << 1)
#define D3DXSPRITE_OBJECTSPACE (1 << 2)
#define D3DXSPRITE_BILLBOARD (1 << 3)
#define D3DXSPRITE_ALPHABLEND (1 << 4)
#define D3DXSPRITE_SORT_TEXTURE (1 << 5)
#define D3DXSPRITE_SORT_DEPTH_FRONTTOBACK (1 << 6)
#define D3DXSPRITE_SORT_DEPTH_BACKTOFRONT (1 << 7)
#define D3DXSPRITE_DO_NOT_ADDREF_TEXTURE (1 << 8)
//////////////////////////////////////////////////////////////////////////////
// ID3DXSprite:
// ------------
// This object intends to provide an easy way to drawing sprites using D3D.
//
// Begin -
// Prepares device for drawing sprites.
//
// Draw -
// Draws a sprite. Before transformation, the sprite is the size of
// SrcRect, with its top-left corner specified by Position. The color
// and alpha channels are modulated by Color.
//
// Flush -
// Forces all batched sprites to submitted to the device.
//
// End -
// Restores device state to how it was when Begin was called.
//
// OnLostDevice, OnResetDevice -
// Call OnLostDevice() on this object before calling Reset() on the
// device, so that this object can release any stateblocks and video
// memory resources. After Reset(), the call OnResetDevice().
//////////////////////////////////////////////////////////////////////////////
typedef interface ID3DXSprite ID3DXSprite;
typedef interface ID3DXSprite *LPD3DXSPRITE;
// {BA0B762D-7D28-43ec-B9DC-2F84443B0614}
DEFINE_GUID(IID_ID3DXSprite,
0xba0b762d, 0x7d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14);
#undef INTERFACE
#define INTERFACE ID3DXSprite
DECLARE_INTERFACE_(ID3DXSprite, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// ID3DXSprite
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
STDMETHOD(GetTransform)(THIS_ D3DXMATRIX *pTransform) PURE;
STDMETHOD(SetTransform)(THIS_ CONST D3DXMATRIX *pTransform) PURE;
STDMETHOD(SetWorldViewRH)(THIS_ CONST D3DXMATRIX *pWorld, CONST D3DXMATRIX *pView) PURE;
STDMETHOD(SetWorldViewLH)(THIS_ CONST D3DXMATRIX *pWorld, CONST D3DXMATRIX *pView) PURE;
STDMETHOD(Begin)(THIS_ DWORD Flags) PURE;
STDMETHOD(Draw)(THIS_ LPDIRECT3DTEXTURE9 pTexture, CONST RECT *pSrcRect, CONST D3DXVECTOR3 *pCenter, CONST D3DXVECTOR3 *pPosition, D3DCOLOR Color) PURE;
STDMETHOD(Flush)(THIS) PURE;
STDMETHOD(End)(THIS) PURE;
STDMETHOD(OnLostDevice)(THIS) PURE;
STDMETHOD(OnResetDevice)(THIS) PURE;
};
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
HRESULT WINAPI
D3DXCreateSprite(
LPDIRECT3DDEVICE9 pDevice,
LPD3DXSPRITE* ppSprite);
#ifdef __cplusplus
}
#endif //__cplusplus
//////////////////////////////////////////////////////////////////////////////
// ID3DXFont:
// ----------
// Font objects contain the textures and resources needed to render a specific
// font on a specific device.
//
// GetGlyphData -
// Returns glyph cache data, for a given glyph.
//
// PreloadCharacters/PreloadGlyphs/PreloadText -
// Preloads glyphs into the glyph cache textures.
//
// DrawText -
// Draws formatted text on a D3D device. Some parameters are
// surprisingly similar to those of GDI's DrawText function. See GDI
// documentation for a detailed description of these parameters.
// If pSprite is NULL, an internal sprite object will be used.
//
// OnLostDevice, OnResetDevice -
// Call OnLostDevice() on this object before calling Reset() on the
// device, so that this object can release any stateblocks and video
// memory resources. After Reset(), the call OnResetDevice().
//////////////////////////////////////////////////////////////////////////////
typedef struct _D3DXFONT_DESCA
{
INT Height;
UINT Width;
UINT Weight;
UINT MipLevels;
BOOL Italic;
BYTE CharSet;
BYTE OutputPrecision;
BYTE Quality;
BYTE PitchAndFamily;
CHAR FaceName[LF_FACESIZE];
} D3DXFONT_DESCA, *LPD3DXFONT_DESCA;
typedef struct _D3DXFONT_DESCW
{
INT Height;
UINT Width;
UINT Weight;
UINT MipLevels;
BOOL Italic;
BYTE CharSet;
BYTE OutputPrecision;
BYTE Quality;
BYTE PitchAndFamily;
WCHAR FaceName[LF_FACESIZE];
} D3DXFONT_DESCW, *LPD3DXFONT_DESCW;
#ifdef UNICODE
typedef D3DXFONT_DESCW D3DXFONT_DESC;
typedef LPD3DXFONT_DESCW LPD3DXFONT_DESC;
#else
typedef D3DXFONT_DESCA D3DXFONT_DESC;
typedef LPD3DXFONT_DESCA LPD3DXFONT_DESC;
#endif
typedef interface ID3DXFont ID3DXFont;
typedef interface ID3DXFont *LPD3DXFONT;
// {D79DBB70-5F21-4d36-BBC2-FF525C213CDC}
DEFINE_GUID(IID_ID3DXFont,
0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc);
#undef INTERFACE
#define INTERFACE ID3DXFont
DECLARE_INTERFACE_(ID3DXFont, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// ID3DXFont
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9 *ppDevice) PURE;
STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *pDesc) PURE;
STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *pDesc) PURE;
STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *pTextMetrics) PURE;
STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *pTextMetrics) PURE;
STDMETHOD_(HDC, GetDC)(THIS) PURE;
STDMETHOD(GetGlyphData)(THIS_ UINT Glyph, LPDIRECT3DTEXTURE9 *ppTexture, RECT *pBlackBox, POINT *pCellInc) PURE;
STDMETHOD(PreloadCharacters)(THIS_ UINT First, UINT Last) PURE;
STDMETHOD(PreloadGlyphs)(THIS_ UINT First, UINT Last) PURE;
STDMETHOD(PreloadTextA)(THIS_ LPCSTR pString, INT Count) PURE;
STDMETHOD(PreloadTextW)(THIS_ LPCWSTR pString, INT Count) PURE;
STDMETHOD_(INT, DrawTextA)(THIS_ LPD3DXSPRITE pSprite, LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;
STDMETHOD_(INT, DrawTextW)(THIS_ LPD3DXSPRITE pSprite, LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;
STDMETHOD(OnLostDevice)(THIS) PURE;
STDMETHOD(OnResetDevice)(THIS) PURE;
#ifdef __cplusplus
#ifdef UNICODE
HRESULT GetDesc(D3DXFONT_DESCW *pDesc) { return GetDescW(pDesc); }
HRESULT PreloadText(LPCWSTR pString, INT Count) { return PreloadTextW(pString, Count); }
#else
HRESULT GetDesc(D3DXFONT_DESCA *pDesc) { return GetDescA(pDesc); }
HRESULT PreloadText(LPCSTR pString, INT Count) { return PreloadTextA(pString, Count); }
#endif
#endif //__cplusplus
};
#ifndef GetTextMetrics
#ifdef UNICODE
#define GetTextMetrics GetTextMetricsW
#else
#define GetTextMetrics GetTextMetricsA
#endif
#endif
#ifndef DrawText
#ifdef UNICODE
#define DrawText DrawTextW
#else
#define DrawText DrawTextA
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
HRESULT WINAPI
D3DXCreateFontA(
LPDIRECT3DDEVICE9 pDevice,
INT Height,
UINT Width,
UINT Weight,
UINT MipLevels,
BOOL Italic,
DWORD CharSet,
DWORD OutputPrecision,
DWORD Quality,
DWORD PitchAndFamily,
LPCSTR pFaceName,
LPD3DXFONT* ppFont);
HRESULT WINAPI
D3DXCreateFontW(
LPDIRECT3DDEVICE9 pDevice,
INT Height,
UINT Width,
UINT Weight,
UINT MipLevels,
BOOL Italic,
DWORD CharSet,
DWORD OutputPrecision,
DWORD Quality,
DWORD PitchAndFamily,
LPCWSTR pFaceName,
LPD3DXFONT* ppFont);
#ifdef UNICODE
#define D3DXCreateFont D3DXCreateFontW
#else
#define D3DXCreateFont D3DXCreateFontA
#endif
HRESULT WINAPI
D3DXCreateFontIndirectA(
LPDIRECT3DDEVICE9 pDevice,
CONST D3DXFONT_DESCA* pDesc,
LPD3DXFONT* ppFont);
HRESULT WINAPI
D3DXCreateFontIndirectW(
LPDIRECT3DDEVICE9 pDevice,
CONST D3DXFONT_DESCW* pDesc,
LPD3DXFONT* ppFont);
#ifdef UNICODE
#define D3DXCreateFontIndirect D3DXCreateFontIndirectW
#else
#define D3DXCreateFontIndirect D3DXCreateFontIndirectA
#endif
#ifdef __cplusplus
}
#endif //__cplusplus
///////////////////////////////////////////////////////////////////////////
// ID3DXRenderToSurface:
// ---------------------
// This object abstracts rendering to surfaces. These surfaces do not
// necessarily need to be render targets. If they are not, a compatible
// render target is used, and the result copied into surface at end scene.
//
// BeginScene, EndScene -
// Call BeginScene() and EndScene() at the beginning and ending of your
// scene. These calls will setup and restore render targets, viewports,
// etc..
//
// OnLostDevice, OnResetDevice -
// Call OnLostDevice() on this object before calling Reset() on the
// device, so that this object can release any stateblocks and video
// memory resources. After Reset(), the call OnResetDevice().
///////////////////////////////////////////////////////////////////////////
typedef struct _D3DXRTS_DESC
{
UINT Width;
UINT Height;
D3DFORMAT Format;
BOOL DepthStencil;
D3DFORMAT DepthStencilFormat;
} D3DXRTS_DESC, *LPD3DXRTS_DESC;
typedef interface ID3DXRenderToSurface ID3DXRenderToSurface;
typedef interface ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE;
// {6985F346-2C3D-43b3-BE8B-DAAE8A03D894}
DEFINE_GUID(IID_ID3DXRenderToSurface,
0x6985f346, 0x2c3d, 0x43b3, 0xbe, 0x8b, 0xda, 0xae, 0x8a, 0x3, 0xd8, 0x94);
#undef INTERFACE
#define INTERFACE ID3DXRenderToSurface
DECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// ID3DXRenderToSurface
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC* pDesc) PURE;
STDMETHOD(BeginScene)(THIS_ LPDIRECT3DSURFACE9 pSurface, CONST D3DVIEWPORT9* pViewport) PURE;
STDMETHOD(EndScene)(THIS_ DWORD MipFilter) PURE;
STDMETHOD(OnLostDevice)(THIS) PURE;
STDMETHOD(OnResetDevice)(THIS) PURE;
};
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
HRESULT WINAPI
D3DXCreateRenderToSurface(
LPDIRECT3DDEVICE9 pDevice,
UINT Width,
UINT Height,
D3DFORMAT Format,
BOOL DepthStencil,
D3DFORMAT DepthStencilFormat,
LPD3DXRENDERTOSURFACE* ppRenderToSurface);
#ifdef __cplusplus
}
#endif //__cplusplus
///////////////////////////////////////////////////////////////////////////
// ID3DXRenderToEnvMap:
// --------------------
// This object abstracts rendering to environment maps. These surfaces
// do not necessarily need to be render targets. If they are not, a
// compatible render target is used, and the result copied into the
// environment map at end scene.
//
// BeginCube, BeginSphere, BeginHemisphere, BeginParabolic -
// This function initiates the rendering of the environment map. As
// parameters, you pass the textures in which will get filled in with
// the resulting environment map.
//
// Face -
// Call this function to initiate the drawing of each face. For each
// environment map, you will call this six times.. once for each face
// in D3DCUBEMAP_FACES.
//
// End -
// This will restore all render targets, and if needed compose all the
// rendered faces into the environment map surfaces.
//
// OnLostDevice, OnResetDevice -
// Call OnLostDevice() on this object before calling Reset() on the
// device, so that this object can release any stateblocks and video
// memory resources. After Reset(), the call OnResetDevice().
///////////////////////////////////////////////////////////////////////////
typedef struct _D3DXRTE_DESC
{
UINT Size;
UINT MipLevels;
D3DFORMAT Format;
BOOL DepthStencil;
D3DFORMAT DepthStencilFormat;
} D3DXRTE_DESC, *LPD3DXRTE_DESC;
typedef interface ID3DXRenderToEnvMap ID3DXRenderToEnvMap;
typedef interface ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap;
// {313F1B4B-C7B0-4fa2-9D9D-8D380B64385E}
DEFINE_GUID(IID_ID3DXRenderToEnvMap,
0x313f1b4b, 0xc7b0, 0x4fa2, 0x9d, 0x9d, 0x8d, 0x38, 0xb, 0x64, 0x38, 0x5e);
#undef INTERFACE
#define INTERFACE ID3DXRenderToEnvMap
DECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// ID3DXRenderToEnvMap
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC* pDesc) PURE;
STDMETHOD(BeginCube)(THIS_
LPDIRECT3DCUBETEXTURE9 pCubeTex) PURE;
STDMETHOD(BeginSphere)(THIS_
LPDIRECT3DTEXTURE9 pTex) PURE;
STDMETHOD(BeginHemisphere)(THIS_
LPDIRECT3DTEXTURE9 pTexZPos,
LPDIRECT3DTEXTURE9 pTexZNeg) PURE;
STDMETHOD(BeginParabolic)(THIS_
LPDIRECT3DTEXTURE9 pTexZPos,
LPDIRECT3DTEXTURE9 pTexZNeg) PURE;
STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES Face, DWORD MipFilter) PURE;
STDMETHOD(End)(THIS_ DWORD MipFilter) PURE;
STDMETHOD(OnLostDevice)(THIS) PURE;
STDMETHOD(OnResetDevice)(THIS) PURE;
};
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
HRESULT WINAPI
D3DXCreateRenderToEnvMap(
LPDIRECT3DDEVICE9 pDevice,
UINT Size,
UINT MipLevels,
D3DFORMAT Format,
BOOL DepthStencil,
D3DFORMAT DepthStencilFormat,
LPD3DXRenderToEnvMap* ppRenderToEnvMap);
#ifdef __cplusplus
}
#endif //__cplusplus
///////////////////////////////////////////////////////////////////////////
// ID3DXLine:
// ------------
// This object intends to provide an easy way to draw lines using D3D.
//
// Begin -
// Prepares device for drawing lines
//
// Draw -
// Draws a line strip in screen-space.
// Input is in the form of a array defining points on the line strip. of D3DXVECTOR2
//
// DrawTransform -
// Draws a line in screen-space with a specified input transformation matrix.
//
// End -
// Restores device state to how it was when Begin was called.
//
// SetPattern -
// Applies a stipple pattern to the line. Input is one 32-bit
// DWORD which describes the stipple pattern. 1 is opaque, 0 is
// transparent.
//
// SetPatternScale -
// Stretches the stipple pattern in the u direction. Input is one
// floating-point value. 0.0f is no scaling, whereas 1.0f doubles
// the length of the stipple pattern.
//
// SetWidth -
// Specifies the thickness of the line in the v direction. Input is
// one floating-point value.
//
// SetAntialias -
// Toggles line antialiasing. Input is a BOOL.
// TRUE = Antialiasing on.
// FALSE = Antialiasing off.
//
// SetGLLines -
// Toggles non-antialiased OpenGL line emulation. Input is a BOOL.
// TRUE = OpenGL line emulation on.
// FALSE = OpenGL line emulation off.
//
// OpenGL line: Regular line:
// *\ *\
// | \ / \
// | \ *\ \
// *\ \ \ \
// \ \ \ \
// \ * \ *
// \ | \ /
// \| *
// *
//
// OnLostDevice, OnResetDevice -
// Call OnLostDevice() on this object before calling Reset() on the
// device, so that this object can release any stateblocks and video
// memory resources. After Reset(), the call OnResetDevice().
///////////////////////////////////////////////////////////////////////////
typedef interface ID3DXLine ID3DXLine;
typedef interface ID3DXLine *LPD3DXLINE;
// {D379BA7F-9042-4ac4-9F5E-58192A4C6BD8}
DEFINE_GUID(IID_ID3DXLine,
0xd379ba7f, 0x9042, 0x4ac4, 0x9f, 0x5e, 0x58, 0x19, 0x2a, 0x4c, 0x6b, 0xd8);
#undef INTERFACE
#define INTERFACE ID3DXLine
DECLARE_INTERFACE_(ID3DXLine, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// ID3DXLine
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
STDMETHOD(Begin)(THIS) PURE;
STDMETHOD(Draw)(THIS_ CONST D3DXVECTOR2 *pVertexList,
DWORD dwVertexListCount, D3DCOLOR Color) PURE;
STDMETHOD(DrawTransform)(THIS_ CONST D3DXVECTOR3 *pVertexList,
DWORD dwVertexListCount, CONST D3DXMATRIX* pTransform,
D3DCOLOR Color) PURE;
STDMETHOD(SetPattern)(THIS_ DWORD dwPattern) PURE;
STDMETHOD_(DWORD, GetPattern)(THIS) PURE;
STDMETHOD(SetPatternScale)(THIS_ FLOAT fPatternScale) PURE;
STDMETHOD_(FLOAT, GetPatternScale)(THIS) PURE;
STDMETHOD(SetWidth)(THIS_ FLOAT fWidth) PURE;
STDMETHOD_(FLOAT, GetWidth)(THIS) PURE;
STDMETHOD(SetAntialias)(THIS_ BOOL bAntialias) PURE;
STDMETHOD_(BOOL, GetAntialias)(THIS) PURE;
STDMETHOD(SetGLLines)(THIS_ BOOL bGLLines) PURE;
STDMETHOD_(BOOL, GetGLLines)(THIS) PURE;
STDMETHOD(End)(THIS) PURE;
STDMETHOD(OnLostDevice)(THIS) PURE;
STDMETHOD(OnResetDevice)(THIS) PURE;
};
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
HRESULT WINAPI
D3DXCreateLine(
LPDIRECT3DDEVICE9 pDevice,
LPD3DXLINE* ppLine);
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__D3DX9CORE_H__

View File

@ -0,0 +1,873 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: d3dx9effect.h
// Content: D3DX effect types and Shaders
//
//////////////////////////////////////////////////////////////////////////////
#include "d3dx9.h"
#ifndef __D3DX9EFFECT_H__
#define __D3DX9EFFECT_H__
//----------------------------------------------------------------------------
// D3DXFX_DONOTSAVESTATE
// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
// is specified, device state is not saved or restored in Begin/End.
// D3DXFX_DONOTSAVESHADERSTATE
// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
// is specified, shader device state is not saved or restored in Begin/End.
// This includes pixel/vertex shaders and shader constants
// D3DXFX_DONOTSAVESAMPLERSTATE
// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
// is specified, sampler device state is not saved or restored in Begin/End.
// D3DXFX_NOT_CLONEABLE
// This flag is used as a parameter to the D3DXCreateEffect family of APIs.
// When this flag is specified, the effect will be non-cloneable and will not
// contain any shader binary data.
// Furthermore, GetPassDesc will not return shader function pointers.
// Setting this flag reduces effect memory usage by about 50%.
//----------------------------------------------------------------------------
#define D3DXFX_DONOTSAVESTATE (1 << 0)
#define D3DXFX_DONOTSAVESHADERSTATE (1 << 1)
#define D3DXFX_DONOTSAVESAMPLERSTATE (1 << 2)
#define D3DXFX_NOT_CLONEABLE (1 << 11)
#define D3DXFX_LARGEADDRESSAWARE (1 << 17)
//----------------------------------------------------------------------------
// D3DX_PARAMETER_SHARED
// Indicates that the value of a parameter will be shared with all effects
// which share the same namespace. Changing the value in one effect will
// change it in all.
//
// D3DX_PARAMETER_LITERAL
// Indicates that the value of this parameter can be treated as literal.
// Literal parameters can be marked when the effect is compiled, and their
// cannot be changed after the effect is compiled. Shared parameters cannot
// be literal.
//----------------------------------------------------------------------------
#define D3DX_PARAMETER_SHARED (1 << 0)
#define D3DX_PARAMETER_LITERAL (1 << 1)
#define D3DX_PARAMETER_ANNOTATION (1 << 2)
//----------------------------------------------------------------------------
// D3DXEFFECT_DESC:
//----------------------------------------------------------------------------
typedef struct _D3DXEFFECT_DESC
{
LPCSTR Creator; // Creator string
UINT Parameters; // Number of parameters
UINT Techniques; // Number of techniques
UINT Functions; // Number of function entrypoints
} D3DXEFFECT_DESC;
//----------------------------------------------------------------------------
// D3DXPARAMETER_DESC:
//----------------------------------------------------------------------------
typedef struct _D3DXPARAMETER_DESC
{
LPCSTR Name; // Parameter name
LPCSTR Semantic; // Parameter semantic
D3DXPARAMETER_CLASS Class; // Class
D3DXPARAMETER_TYPE Type; // Component type
UINT Rows; // Number of rows
UINT Columns; // Number of columns
UINT Elements; // Number of array elements
UINT Annotations; // Number of annotations
UINT StructMembers; // Number of structure member sub-parameters
DWORD Flags; // D3DX_PARAMETER_* flags
UINT Bytes; // Parameter size, in bytes
} D3DXPARAMETER_DESC;
//----------------------------------------------------------------------------
// D3DXTECHNIQUE_DESC:
//----------------------------------------------------------------------------
typedef struct _D3DXTECHNIQUE_DESC
{
LPCSTR Name; // Technique name
UINT Passes; // Number of passes
UINT Annotations; // Number of annotations
} D3DXTECHNIQUE_DESC;
//----------------------------------------------------------------------------
// D3DXPASS_DESC:
//----------------------------------------------------------------------------
typedef struct _D3DXPASS_DESC
{
LPCSTR Name; // Pass name
UINT Annotations; // Number of annotations
CONST DWORD *pVertexShaderFunction; // Vertex shader function
CONST DWORD *pPixelShaderFunction; // Pixel shader function
} D3DXPASS_DESC;
//----------------------------------------------------------------------------
// D3DXFUNCTION_DESC:
//----------------------------------------------------------------------------
typedef struct _D3DXFUNCTION_DESC
{
LPCSTR Name; // Function name
UINT Annotations; // Number of annotations
} D3DXFUNCTION_DESC;
//////////////////////////////////////////////////////////////////////////////
// ID3DXEffectPool ///////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
typedef interface ID3DXEffectPool ID3DXEffectPool;
typedef interface ID3DXEffectPool *LPD3DXEFFECTPOOL;
// {9537AB04-3250-412e-8213-FCD2F8677933}
DEFINE_GUID(IID_ID3DXEffectPool,
0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);
#undef INTERFACE
#define INTERFACE ID3DXEffectPool
DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// No public methods
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXBaseEffect ///////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
typedef interface ID3DXBaseEffect ID3DXBaseEffect;
typedef interface ID3DXBaseEffect *LPD3DXBASEEFFECT;
// {017C18AC-103F-4417-8C51-6BF6EF1E56BE}
DEFINE_GUID(IID_ID3DXBaseEffect,
0x17c18ac, 0x103f, 0x4417, 0x8c, 0x51, 0x6b, 0xf6, 0xef, 0x1e, 0x56, 0xbe);
#undef INTERFACE
#define INTERFACE ID3DXBaseEffect
DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// Descs
STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
// Handle operations
STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
// Get/Set Parameters
STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
//Set Range of an Array to pass to device
//Useful for sending only a subrange of an array down to the device
STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE;
};
//----------------------------------------------------------------------------
// ID3DXEffectStateManager:
// ------------------------
// This is a user implemented interface that can be used to manage device
// state changes made by an Effect.
//----------------------------------------------------------------------------
typedef interface ID3DXEffectStateManager ID3DXEffectStateManager;
typedef interface ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER;
// {79AAB587-6DBC-4fa7-82DE-37FA1781C5CE}
DEFINE_GUID(IID_ID3DXEffectStateManager,
0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce);
#undef INTERFACE
#define INTERFACE ID3DXEffectStateManager
DECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown)
{
// The user must correctly implement QueryInterface, AddRef, and Release.
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// The following methods are called by the Effect when it wants to make
// the corresponding device call. Note that:
// 1. Users manage the state and are therefore responsible for making the
// the corresponding device calls themselves inside their callbacks.
// 2. Effects pay attention to the return values of the callbacks, and so
// users must pay attention to what they return in their callbacks.
STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix) PURE;
STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9 *pMaterial) PURE;
STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9 *pLight) PURE;
STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
STDMETHOD(SetTexture)(THIS_ DWORD Stage, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
STDMETHOD(SetNPatchMode)(THIS_ FLOAT NumSegments) PURE;
STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
STDMETHOD(SetVertexShader)(THIS_ LPDIRECT3DVERTEXSHADER9 pShader) PURE;
STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT RegisterIndex, CONST FLOAT *pConstantData, UINT RegisterCount) PURE;
STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT RegisterIndex, CONST INT *pConstantData, UINT RegisterCount) PURE;
STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT RegisterIndex, CONST BOOL *pConstantData, UINT RegisterCount) PURE;
STDMETHOD(SetPixelShader)(THIS_ LPDIRECT3DPIXELSHADER9 pShader) PURE;
STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT RegisterIndex, CONST FLOAT *pConstantData, UINT RegisterCount) PURE;
STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT RegisterIndex, CONST INT *pConstantData, UINT RegisterCount) PURE;
STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT RegisterIndex, CONST BOOL *pConstantData, UINT RegisterCount) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXEffect ///////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
typedef interface ID3DXEffect ID3DXEffect;
typedef interface ID3DXEffect *LPD3DXEFFECT;
// {F6CEB4B3-4E4C-40dd-B883-8D8DE5EA0CD5}
DEFINE_GUID(IID_ID3DXEffect,
0xf6ceb4b3, 0x4e4c, 0x40dd, 0xb8, 0x83, 0x8d, 0x8d, 0xe5, 0xea, 0xc, 0xd5);
#undef INTERFACE
#define INTERFACE ID3DXEffect
DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect)
{
// ID3DXBaseEffect
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// Descs
STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
// Handle operations
STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
// Get/Set Parameters
STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
//Set Range of an Array to pass to device
//Usefull for sending only a subrange of an array down to the device
STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE;
// ID3DXBaseEffect
// Pool
STDMETHOD(GetPool)(THIS_ LPD3DXEFFECTPOOL* ppPool) PURE;
// Selecting and setting a technique
STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE hTechnique) PURE;
STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE;
STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE hTechnique) PURE;
STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE hTechnique, D3DXHANDLE *pTechnique) PURE;
STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE hParameter, D3DXHANDLE hTechnique) PURE;
// Using current technique
// Begin starts active technique
// BeginPass begins a pass
// CommitChanges updates changes to any set calls in the pass. This should be called before
// any DrawPrimitive call to d3d
// EndPass ends a pass
// End ends active technique
STDMETHOD(Begin)(THIS_ UINT *pPasses, DWORD Flags) PURE;
STDMETHOD(BeginPass)(THIS_ UINT Pass) PURE;
STDMETHOD(CommitChanges)(THIS) PURE;
STDMETHOD(EndPass)(THIS) PURE;
STDMETHOD(End)(THIS) PURE;
// Managing D3D Device
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
STDMETHOD(OnLostDevice)(THIS) PURE;
STDMETHOD(OnResetDevice)(THIS) PURE;
// Logging device calls
STDMETHOD(SetStateManager)(THIS_ LPD3DXEFFECTSTATEMANAGER pManager) PURE;
STDMETHOD(GetStateManager)(THIS_ LPD3DXEFFECTSTATEMANAGER *ppManager) PURE;
// Parameter blocks
STDMETHOD(BeginParameterBlock)(THIS) PURE;
STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE;
STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE hParameterBlock) PURE;
STDMETHOD(DeleteParameterBlock)(THIS_ D3DXHANDLE hParameterBlock) PURE;
// Cloning
STDMETHOD(CloneEffect)(THIS_ LPDIRECT3DDEVICE9 pDevice, LPD3DXEFFECT* ppEffect) PURE;
// Fast path for setting variables directly in ID3DXEffect
STDMETHOD(SetRawValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT ByteOffset, UINT Bytes) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXEffectCompiler ///////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
typedef interface ID3DXEffectCompiler ID3DXEffectCompiler;
typedef interface ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER;
// {51B8A949-1A31-47e6-BEA0-4B30DB53F1E0}
DEFINE_GUID(IID_ID3DXEffectCompiler,
0x51b8a949, 0x1a31, 0x47e6, 0xbe, 0xa0, 0x4b, 0x30, 0xdb, 0x53, 0xf1, 0xe0);
#undef INTERFACE
#define INTERFACE ID3DXEffectCompiler
DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect)
{
// ID3DXBaseEffect
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// Descs
STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
// Handle operations
STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE;
STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
// Get/Set Parameters
STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
//Set Range of an Array to pass to device
//Usefull for sending only a subrange of an array down to the device
STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE;
// ID3DXBaseEffect
// Parameter sharing, specialization, and information
STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL Literal) PURE;
STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL *pLiteral) PURE;
// Compilation
STDMETHOD(CompileEffect)(THIS_ DWORD Flags,
LPD3DXBUFFER* ppEffect, LPD3DXBUFFER* ppErrorMsgs) PURE;
STDMETHOD(CompileShader)(THIS_ D3DXHANDLE hFunction, LPCSTR pTarget, DWORD Flags,
LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs, LPD3DXCONSTANTTABLE* ppConstantTable) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// APIs //////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
//----------------------------------------------------------------------------
// D3DXCreateEffectPool:
// ---------------------
// Creates an effect pool. Pools are used for sharing parameters between
// multiple effects. For all effects within a pool, shared parameters of the
// same name all share the same value.
//
// Parameters:
// ppPool
// Returns the created pool.
//----------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateEffectPool(
LPD3DXEFFECTPOOL* ppPool);
//----------------------------------------------------------------------------
// D3DXCreateEffect:
// -----------------
// Creates an effect from an ascii or binary effect description.
//
// Parameters:
// pDevice
// Pointer of the device on which to create the effect
// pSrcFile
// Name of the file containing the effect description
// hSrcModule
// Module handle. if NULL, current module will be used.
// pSrcResource
// Resource name in module
// pSrcData
// Pointer to effect description
// SrcDataSize
// Size of the effect description in bytes
// pDefines
// Optional NULL-terminated array of preprocessor macro definitions.
// Flags
// See D3DXSHADER_xxx flags.
// pSkipConstants
// A list of semi-colon delimited variable names. The effect will
// not set these variables to the device when they are referenced
// by a shader. NOTE: the variables specified here must be
// register bound in the file and must not be used in expressions
// in passes or samplers or the file will not load.
// pInclude
// Optional interface pointer to use for handling #include directives.
// If this parameter is NULL, #includes will be honored when compiling
// from file, and will error when compiling from resource or memory.
// pPool
// Pointer to ID3DXEffectPool object to use for shared parameters.
// If NULL, no parameters will be shared.
// ppEffect
// Returns a buffer containing created effect.
// ppCompilationErrors
// Returns a buffer containing any error messages which occurred during
// compile. Or NULL if you do not care about the error messages.
//
//----------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateEffectFromFileA(
LPDIRECT3DDEVICE9 pDevice,
LPCSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
HRESULT WINAPI
D3DXCreateEffectFromFileW(
LPDIRECT3DDEVICE9 pDevice,
LPCWSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
#ifdef UNICODE
#define D3DXCreateEffectFromFile D3DXCreateEffectFromFileW
#else
#define D3DXCreateEffectFromFile D3DXCreateEffectFromFileA
#endif
HRESULT WINAPI
D3DXCreateEffectFromResourceA(
LPDIRECT3DDEVICE9 pDevice,
HMODULE hSrcModule,
LPCSTR pSrcResource,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
HRESULT WINAPI
D3DXCreateEffectFromResourceW(
LPDIRECT3DDEVICE9 pDevice,
HMODULE hSrcModule,
LPCWSTR pSrcResource,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
#ifdef UNICODE
#define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceW
#else
#define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceA
#endif
HRESULT WINAPI
D3DXCreateEffect(
LPDIRECT3DDEVICE9 pDevice,
LPCVOID pSrcData,
UINT SrcDataLen,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
//
// Ex functions that accept pSkipConstants in addition to other parameters
//
HRESULT WINAPI
D3DXCreateEffectFromFileExA(
LPDIRECT3DDEVICE9 pDevice,
LPCSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
LPCSTR pSkipConstants,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
HRESULT WINAPI
D3DXCreateEffectFromFileExW(
LPDIRECT3DDEVICE9 pDevice,
LPCWSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
LPCSTR pSkipConstants,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
#ifdef UNICODE
#define D3DXCreateEffectFromFileEx D3DXCreateEffectFromFileExW
#else
#define D3DXCreateEffectFromFileEx D3DXCreateEffectFromFileExA
#endif
HRESULT WINAPI
D3DXCreateEffectFromResourceExA(
LPDIRECT3DDEVICE9 pDevice,
HMODULE hSrcModule,
LPCSTR pSrcResource,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
LPCSTR pSkipConstants,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
HRESULT WINAPI
D3DXCreateEffectFromResourceExW(
LPDIRECT3DDEVICE9 pDevice,
HMODULE hSrcModule,
LPCWSTR pSrcResource,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
LPCSTR pSkipConstants,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
#ifdef UNICODE
#define D3DXCreateEffectFromResourceEx D3DXCreateEffectFromResourceExW
#else
#define D3DXCreateEffectFromResourceEx D3DXCreateEffectFromResourceExA
#endif
HRESULT WINAPI
D3DXCreateEffectEx(
LPDIRECT3DDEVICE9 pDevice,
LPCVOID pSrcData,
UINT SrcDataLen,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
LPCSTR pSkipConstants,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER* ppCompilationErrors);
//----------------------------------------------------------------------------
// D3DXCreateEffectCompiler:
// -------------------------
// Creates an effect from an ascii or binary effect description.
//
// Parameters:
// pSrcFile
// Name of the file containing the effect description
// hSrcModule
// Module handle. if NULL, current module will be used.
// pSrcResource
// Resource name in module
// pSrcData
// Pointer to effect description
// SrcDataSize
// Size of the effect description in bytes
// pDefines
// Optional NULL-terminated array of preprocessor macro definitions.
// pInclude
// Optional interface pointer to use for handling #include directives.
// If this parameter is NULL, #includes will be honored when compiling
// from file, and will error when compiling from resource or memory.
// pPool
// Pointer to ID3DXEffectPool object to use for shared parameters.
// If NULL, no parameters will be shared.
// ppCompiler
// Returns a buffer containing created effect compiler.
// ppParseErrors
// Returns a buffer containing any error messages which occurred during
// parse. Or NULL if you do not care about the error messages.
//
//----------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateEffectCompilerFromFileA(
LPCSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTCOMPILER* ppCompiler,
LPD3DXBUFFER* ppParseErrors);
HRESULT WINAPI
D3DXCreateEffectCompilerFromFileW(
LPCWSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTCOMPILER* ppCompiler,
LPD3DXBUFFER* ppParseErrors);
#ifdef UNICODE
#define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileW
#else
#define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileA
#endif
HRESULT WINAPI
D3DXCreateEffectCompilerFromResourceA(
HMODULE hSrcModule,
LPCSTR pSrcResource,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTCOMPILER* ppCompiler,
LPD3DXBUFFER* ppParseErrors);
HRESULT WINAPI
D3DXCreateEffectCompilerFromResourceW(
HMODULE hSrcModule,
LPCWSTR pSrcResource,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTCOMPILER* ppCompiler,
LPD3DXBUFFER* ppParseErrors);
#ifdef UNICODE
#define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceW
#else
#define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceA
#endif
HRESULT WINAPI
D3DXCreateEffectCompiler(
LPCSTR pSrcData,
UINT SrcDataLen,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTCOMPILER* ppCompiler,
LPD3DXBUFFER* ppParseErrors);
//----------------------------------------------------------------------------
// D3DXDisassembleEffect:
// -----------------------
//
// Parameters:
//----------------------------------------------------------------------------
HRESULT WINAPI
D3DXDisassembleEffect(
LPD3DXEFFECT pEffect,
BOOL EnableColorCode,
LPD3DXBUFFER *ppDisassembly);
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__D3DX9EFFECT_H__

1796
subVersion/d3d9/d3dx9math.h Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3007
subVersion/d3d9/d3dx9mesh.h Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,221 @@
///////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx9shapes.h
// Content: D3DX simple shapes
//
///////////////////////////////////////////////////////////////////////////
#include "d3dx9.h"
#ifndef __D3DX9SHAPES_H__
#define __D3DX9SHAPES_H__
///////////////////////////////////////////////////////////////////////////
// Functions:
///////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C" {
#endif //__cplusplus
//-------------------------------------------------------------------------
// D3DXCreatePolygon:
// ------------------
// Creates a mesh containing an n-sided polygon. The polygon is centered
// at the origin.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// Length Length of each side.
// Sides Number of sides the polygon has. (Must be >= 3)
// ppMesh The mesh object which will be created
// ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreatePolygon(
LPDIRECT3DDEVICE9 pDevice,
FLOAT Length,
UINT Sides,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency);
//-------------------------------------------------------------------------
// D3DXCreateBox:
// --------------
// Creates a mesh containing an axis-aligned box. The box is centered at
// the origin.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// Width Width of box (along X-axis)
// Height Height of box (along Y-axis)
// Depth Depth of box (along Z-axis)
// ppMesh The mesh object which will be created
// ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateBox(
LPDIRECT3DDEVICE9 pDevice,
FLOAT Width,
FLOAT Height,
FLOAT Depth,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency);
//-------------------------------------------------------------------------
// D3DXCreateCylinder:
// -------------------
// Creates a mesh containing a cylinder. The generated cylinder is
// centered at the origin, and its axis is aligned with the Z-axis.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// Radius1 Radius at -Z end (should be >= 0.0f)
// Radius2 Radius at +Z end (should be >= 0.0f)
// Length Length of cylinder (along Z-axis)
// Slices Number of slices about the main axis
// Stacks Number of stacks along the main axis
// ppMesh The mesh object which will be created
// ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateCylinder(
LPDIRECT3DDEVICE9 pDevice,
FLOAT Radius1,
FLOAT Radius2,
FLOAT Length,
UINT Slices,
UINT Stacks,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency);
//-------------------------------------------------------------------------
// D3DXCreateSphere:
// -----------------
// Creates a mesh containing a sphere. The sphere is centered at the
// origin.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// Radius Radius of the sphere (should be >= 0.0f)
// Slices Number of slices about the main axis
// Stacks Number of stacks along the main axis
// ppMesh The mesh object which will be created
// ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateSphere(
LPDIRECT3DDEVICE9 pDevice,
FLOAT Radius,
UINT Slices,
UINT Stacks,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency);
//-------------------------------------------------------------------------
// D3DXCreateTorus:
// ----------------
// Creates a mesh containing a torus. The generated torus is centered at
// the origin, and its axis is aligned with the Z-axis.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// InnerRadius Inner radius of the torus (should be >= 0.0f)
// OuterRadius Outer radius of the torue (should be >= 0.0f)
// Sides Number of sides in a cross-section (must be >= 3)
// Rings Number of rings making up the torus (must be >= 3)
// ppMesh The mesh object which will be created
// ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateTorus(
LPDIRECT3DDEVICE9 pDevice,
FLOAT InnerRadius,
FLOAT OuterRadius,
UINT Sides,
UINT Rings,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency);
//-------------------------------------------------------------------------
// D3DXCreateTeapot:
// -----------------
// Creates a mesh containing a teapot.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// ppMesh The mesh object which will be created
// ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateTeapot(
LPDIRECT3DDEVICE9 pDevice,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency);
//-------------------------------------------------------------------------
// D3DXCreateText:
// ---------------
// Creates a mesh containing the specified text using the font associated
// with the device context.
//
// Parameters:
//
// pDevice The D3D device with which the mesh is going to be used.
// hDC Device context, with desired font selected
// pText Text to generate
// Deviation Maximum chordal deviation from true font outlines
// Extrusion Amount to extrude text in -Z direction
// ppMesh The mesh object which will be created
// pGlyphMetrics Address of buffer to receive glyph metric data (or NULL)
//-------------------------------------------------------------------------
HRESULT WINAPI
D3DXCreateTextA(
LPDIRECT3DDEVICE9 pDevice,
HDC hDC,
LPCSTR pText,
FLOAT Deviation,
FLOAT Extrusion,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency,
LPGLYPHMETRICSFLOAT pGlyphMetrics);
HRESULT WINAPI
D3DXCreateTextW(
LPDIRECT3DDEVICE9 pDevice,
HDC hDC,
LPCWSTR pText,
FLOAT Deviation,
FLOAT Extrusion,
LPD3DXMESH* ppMesh,
LPD3DXBUFFER* ppAdjacency,
LPGLYPHMETRICSFLOAT pGlyphMetrics);
#ifdef UNICODE
#define D3DXCreateText D3DXCreateTextW
#else
#define D3DXCreateText D3DXCreateTextA
#endif
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__D3DX9SHAPES_H__

1735
subVersion/d3d9/d3dx9tex.h Normal file

File diff suppressed because it is too large Load Diff

299
subVersion/d3d9/d3dx9xof.h Normal file
View File

@ -0,0 +1,299 @@
///////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx9xof.h
// Content: D3DX .X File types and functions
//
///////////////////////////////////////////////////////////////////////////
#include "d3dx9.h"
#if !defined( __D3DX9XOF_H__ )
#define __D3DX9XOF_H__
#if defined( __cplusplus )
extern "C" {
#endif // defined( __cplusplus )
//----------------------------------------------------------------------------
// D3DXF_FILEFORMAT
// This flag is used to specify what file type to use when saving to disk.
// _BINARY, and _TEXT are mutually exclusive, while
// _COMPRESSED is an optional setting that works with all file types.
//----------------------------------------------------------------------------
typedef DWORD D3DXF_FILEFORMAT;
#define D3DXF_FILEFORMAT_BINARY 0
#define D3DXF_FILEFORMAT_TEXT 1
#define D3DXF_FILEFORMAT_COMPRESSED 2
//----------------------------------------------------------------------------
// D3DXF_FILESAVEOPTIONS
// This flag is used to specify where to save the file to. Each flag is
// mutually exclusive, indicates the data location of the file, and also
// chooses which additional data will specify the location.
// _TOFILE is paired with a filename (LPCSTR)
// _TOWFILE is paired with a filename (LPWSTR)
//----------------------------------------------------------------------------
typedef DWORD D3DXF_FILESAVEOPTIONS;
#define D3DXF_FILESAVE_TOFILE 0x00L
#define D3DXF_FILESAVE_TOWFILE 0x01L
//----------------------------------------------------------------------------
// D3DXF_FILELOADOPTIONS
// This flag is used to specify where to load the file from. Each flag is
// mutually exclusive, indicates the data location of the file, and also
// chooses which additional data will specify the location.
// _FROMFILE is paired with a filename (LPCSTR)
// _FROMWFILE is paired with a filename (LPWSTR)
// _FROMRESOURCE is paired with a (D3DXF_FILELOADRESOUCE*) description.
// _FROMMEMORY is paired with a (D3DXF_FILELOADMEMORY*) description.
//----------------------------------------------------------------------------
typedef DWORD D3DXF_FILELOADOPTIONS;
#define D3DXF_FILELOAD_FROMFILE 0x00L
#define D3DXF_FILELOAD_FROMWFILE 0x01L
#define D3DXF_FILELOAD_FROMRESOURCE 0x02L
#define D3DXF_FILELOAD_FROMMEMORY 0x03L
//----------------------------------------------------------------------------
// D3DXF_FILELOADRESOURCE:
//----------------------------------------------------------------------------
typedef struct _D3DXF_FILELOADRESOURCE
{
HMODULE hModule; // Desc
LPCSTR lpName; // Desc
LPCSTR lpType; // Desc
} D3DXF_FILELOADRESOURCE;
//----------------------------------------------------------------------------
// D3DXF_FILELOADMEMORY:
//----------------------------------------------------------------------------
typedef struct _D3DXF_FILELOADMEMORY
{
LPCVOID lpMemory; // Desc
SIZE_T dSize; // Desc
} D3DXF_FILELOADMEMORY;
#if defined( _WIN32 ) && !defined( _NO_COM )
// {cef08cf9-7b4f-4429-9624-2a690a933201}
DEFINE_GUID( IID_ID3DXFile,
0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
// {cef08cfa-7b4f-4429-9624-2a690a933201}
DEFINE_GUID( IID_ID3DXFileSaveObject,
0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
// {cef08cfb-7b4f-4429-9624-2a690a933201}
DEFINE_GUID( IID_ID3DXFileSaveData,
0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
// {cef08cfc-7b4f-4429-9624-2a690a933201}
DEFINE_GUID( IID_ID3DXFileEnumObject,
0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
// {cef08cfd-7b4f-4429-9624-2a690a933201}
DEFINE_GUID( IID_ID3DXFileData,
0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
#endif // defined( _WIN32 ) && !defined( _NO_COM )
#if defined( __cplusplus )
#if !defined( DECLSPEC_UUID )
#if _MSC_VER >= 1100
#define DECLSPEC_UUID( x ) __declspec( uuid( x ) )
#else // !( _MSC_VER >= 1100 )
#define DECLSPEC_UUID( x )
#endif // !( _MSC_VER >= 1100 )
#endif // !defined( DECLSPEC_UUID )
interface DECLSPEC_UUID( "cef08cf9-7b4f-4429-9624-2a690a933201" )
ID3DXFile;
interface DECLSPEC_UUID( "cef08cfa-7b4f-4429-9624-2a690a933201" )
ID3DXFileSaveObject;
interface DECLSPEC_UUID( "cef08cfb-7b4f-4429-9624-2a690a933201" )
ID3DXFileSaveData;
interface DECLSPEC_UUID( "cef08cfc-7b4f-4429-9624-2a690a933201" )
ID3DXFileEnumObject;
interface DECLSPEC_UUID( "cef08cfd-7b4f-4429-9624-2a690a933201" )
ID3DXFileData;
#if defined( _COM_SMARTPTR_TYPEDEF )
_COM_SMARTPTR_TYPEDEF( ID3DXFile,
__uuidof( ID3DXFile ) );
_COM_SMARTPTR_TYPEDEF( ID3DXFileSaveObject,
__uuidof( ID3DXFileSaveObject ) );
_COM_SMARTPTR_TYPEDEF( ID3DXFileSaveData,
__uuidof( ID3DXFileSaveData ) );
_COM_SMARTPTR_TYPEDEF( ID3DXFileEnumObject,
__uuidof( ID3DXFileEnumObject ) );
_COM_SMARTPTR_TYPEDEF( ID3DXFileData,
__uuidof( ID3DXFileData ) );
#endif // defined( _COM_SMARTPTR_TYPEDEF )
#endif // defined( __cplusplus )
typedef interface ID3DXFile ID3DXFile;
typedef interface ID3DXFileSaveObject ID3DXFileSaveObject;
typedef interface ID3DXFileSaveData ID3DXFileSaveData;
typedef interface ID3DXFileEnumObject ID3DXFileEnumObject;
typedef interface ID3DXFileData ID3DXFileData;
//////////////////////////////////////////////////////////////////////////////
// ID3DXFile /////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#undef INTERFACE
#define INTERFACE ID3DXFile
DECLARE_INTERFACE_( ID3DXFile, IUnknown )
{
STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE;
STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
STDMETHOD_( ULONG, Release )( THIS ) PURE;
STDMETHOD( CreateEnumObject )( THIS_ LPCVOID, D3DXF_FILELOADOPTIONS,
ID3DXFileEnumObject** ) PURE;
STDMETHOD( CreateSaveObject )( THIS_ LPCVOID, D3DXF_FILESAVEOPTIONS,
D3DXF_FILEFORMAT, ID3DXFileSaveObject** ) PURE;
STDMETHOD( RegisterTemplates )( THIS_ LPCVOID, SIZE_T ) PURE;
STDMETHOD( RegisterEnumTemplates )( THIS_ ID3DXFileEnumObject* ) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXFileSaveObject ///////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#undef INTERFACE
#define INTERFACE ID3DXFileSaveObject
DECLARE_INTERFACE_( ID3DXFileSaveObject, IUnknown )
{
STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE;
STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
STDMETHOD_( ULONG, Release )( THIS ) PURE;
STDMETHOD( GetFile )( THIS_ ID3DXFile** ) PURE;
STDMETHOD( AddDataObject )( THIS_ REFGUID, LPCSTR, CONST GUID*,
SIZE_T, LPCVOID, ID3DXFileSaveData** ) PURE;
STDMETHOD( Save )( THIS ) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXFileSaveData /////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#undef INTERFACE
#define INTERFACE ID3DXFileSaveData
DECLARE_INTERFACE_( ID3DXFileSaveData, IUnknown )
{
STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE;
STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
STDMETHOD_( ULONG, Release )( THIS ) PURE;
STDMETHOD( GetSave )( THIS_ ID3DXFileSaveObject** ) PURE;
STDMETHOD( GetName )( THIS_ LPSTR, SIZE_T* ) PURE;
STDMETHOD( GetId )( THIS_ LPGUID ) PURE;
STDMETHOD( GetType )( THIS_ GUID* ) PURE;
STDMETHOD( AddDataObject )( THIS_ REFGUID, LPCSTR, CONST GUID*,
SIZE_T, LPCVOID, ID3DXFileSaveData** ) PURE;
STDMETHOD( AddDataReference )( THIS_ LPCSTR, CONST GUID* ) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXFileEnumObject ///////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#undef INTERFACE
#define INTERFACE ID3DXFileEnumObject
DECLARE_INTERFACE_( ID3DXFileEnumObject, IUnknown )
{
STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE;
STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
STDMETHOD_( ULONG, Release )( THIS ) PURE;
STDMETHOD( GetFile )( THIS_ ID3DXFile** ) PURE;
STDMETHOD( GetChildren )( THIS_ SIZE_T* ) PURE;
STDMETHOD( GetChild )( THIS_ SIZE_T, ID3DXFileData** ) PURE;
STDMETHOD( GetDataObjectById )( THIS_ REFGUID, ID3DXFileData** ) PURE;
STDMETHOD( GetDataObjectByName )( THIS_ LPCSTR, ID3DXFileData** ) PURE;
};
//////////////////////////////////////////////////////////////////////////////
// ID3DXFileData /////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#undef INTERFACE
#define INTERFACE ID3DXFileData
DECLARE_INTERFACE_( ID3DXFileData, IUnknown )
{
STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE;
STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
STDMETHOD_( ULONG, Release )( THIS ) PURE;
STDMETHOD( GetEnum )( THIS_ ID3DXFileEnumObject** ) PURE;
STDMETHOD( GetName )( THIS_ LPSTR, SIZE_T* ) PURE;
STDMETHOD( GetId )( THIS_ LPGUID ) PURE;
STDMETHOD( Lock )( THIS_ SIZE_T*, LPCVOID* ) PURE;
STDMETHOD( Unlock )( THIS ) PURE;
STDMETHOD( GetType )( THIS_ GUID* ) PURE;
STDMETHOD_( BOOL, IsReference )( THIS ) PURE;
STDMETHOD( GetChildren )( THIS_ SIZE_T* ) PURE;
STDMETHOD( GetChild )( THIS_ SIZE_T, ID3DXFileData** ) PURE;
};
STDAPI D3DXFileCreate( ID3DXFile** lplpDirectXFile );
/*
* DirectX File errors.
*/
#define _FACD3DXF 0x876
#define D3DXFERR_BADOBJECT MAKE_HRESULT( 1, _FACD3DXF, 900 )
#define D3DXFERR_BADVALUE MAKE_HRESULT( 1, _FACD3DXF, 901 )
#define D3DXFERR_BADTYPE MAKE_HRESULT( 1, _FACD3DXF, 902 )
#define D3DXFERR_NOTFOUND MAKE_HRESULT( 1, _FACD3DXF, 903 )
#define D3DXFERR_NOTDONEYET MAKE_HRESULT( 1, _FACD3DXF, 904 )
#define D3DXFERR_FILENOTFOUND MAKE_HRESULT( 1, _FACD3DXF, 905 )
#define D3DXFERR_RESOURCENOTFOUND MAKE_HRESULT( 1, _FACD3DXF, 906 )
#define D3DXFERR_BADRESOURCE MAKE_HRESULT( 1, _FACD3DXF, 907 )
#define D3DXFERR_BADFILETYPE MAKE_HRESULT( 1, _FACD3DXF, 908 )
#define D3DXFERR_BADFILEVERSION MAKE_HRESULT( 1, _FACD3DXF, 909 )
#define D3DXFERR_BADFILEFLOATSIZE MAKE_HRESULT( 1, _FACD3DXF, 910 )
#define D3DXFERR_BADFILE MAKE_HRESULT( 1, _FACD3DXF, 911 )
#define D3DXFERR_PARSEERROR MAKE_HRESULT( 1, _FACD3DXF, 912 )
#define D3DXFERR_BADARRAYSIZE MAKE_HRESULT( 1, _FACD3DXF, 913 )
#define D3DXFERR_BADDATAREFERENCE MAKE_HRESULT( 1, _FACD3DXF, 914 )
#define D3DXFERR_NOMOREOBJECTS MAKE_HRESULT( 1, _FACD3DXF, 915 )
#define D3DXFERR_NOMOREDATA MAKE_HRESULT( 1, _FACD3DXF, 916 )
#define D3DXFERR_BADCACHEFILE MAKE_HRESULT( 1, _FACD3DXF, 917 )
/*
* DirectX File object types.
*/
#ifndef WIN_TYPES
#define WIN_TYPES(itype, ptype) typedef interface itype *LP##ptype, **LPLP##ptype
#endif
WIN_TYPES(ID3DXFile, D3DXFILE);
WIN_TYPES(ID3DXFileEnumObject, D3DXFILEENUMOBJECT);
WIN_TYPES(ID3DXFileSaveObject, D3DXFILESAVEOBJECT);
WIN_TYPES(ID3DXFileData, D3DXFILEDATA);
WIN_TYPES(ID3DXFileSaveData, D3DXFILESAVEDATA);
#if defined( __cplusplus )
} // extern "C"
#endif // defined( __cplusplus )
#endif // !defined( __D3DX9XOF_H__ )

1570
subVersion/entity.cpp Normal file

File diff suppressed because it is too large Load Diff

538
subVersion/entity.h Normal file
View File

@ -0,0 +1,538 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef ENTITY_H
#define ENTITY_H
typedef struct
{
float cur, max;
} curmax;
class entity
{
public:
curmax m_cmHp;
v3 m_v3Pos;
float m_fCos,m_fSin;
BYTE m_btGod;
entity();
~entity();
virtual void getPos();
virtual void setPos(v3 dest);
virtual void getCos();
virtual void setCos(float value);
virtual void getSin();
virtual void setSin(float value);
virtual void getHealth();
virtual void setHealth(float hp);
virtual void getGod();
virtual void setGod(BYTE value);
DWORD_PTR m_dwpBase,
m_dwpPosBase;
};
class player : public entity
{
public:
float m_flArmor,
m_flRunSpd,
m_flSwimSpd,
m_flWantedCanChange,
m_flVehicleDamageMult;
DWORD m_dwWanted,
m_dwNpcIgnore,
m_dwFrameFlags;
BYTE m_btRagdoll,
m_btSeatbelt;
bool m_bIsInVehicle;
curmax m_cmStamina;
struct playerData
{
bool m_isInit;
DWORD m_dwWaterProof;
float m_maxHealth;
};
playerData m_playerDataRestore,//the original values will be stored here.
m_playerDataCur;
player();
~player();
virtual void getHealth();
virtual void setHealth(float hp, float armor);
bool loadPlayerData();
void restorePlayerData();
void getMaxHealth();
void setMaxHealth(float hp);
void getVehicleDamageMult();
void setVehicleDamageMult(float value);
void getWanted();
void setWanted(DWORD stars);
void getWantedCanChange();
void setWantedCanChange(float value);
void getInVehicle();
void getRunSpeed();
void setRunSpeed(float value);
void getSwimSpeed();
void setSwimSpeed(float value);
void getNpcIgnore();
void setNpcIgnore(DWORD value);
void getFrameFlags();
void setFrameFlags(DWORD value);
void getWaterProof();
void setWaterProof(DWORD value);
void getRagdoll();
void setRagdoll(BYTE value);
void getSeatbelt();
void setSeatbelt(BYTE value);
void getStamina();
void setStamina(float value);
DWORD_PTR m_dwpPlayerInfo;
};
class vehicle : public entity
{
public:
curmax m_cmHpVehicle;
float m_fBoost,
m_fRocketRechargeSpeed,
m_fGravity;
BYTE m_btBulletproofTires,
m_btEngineManagementSystem,
m_btBrakes,
m_btTransmission,
m_btSuspension,
m_btArmor,
m_btTurboTuning,
m_btNeonLightRed,
m_btNeonLightGreen,
m_btNeonLightBlue,
m_btNeonLightLeft,
m_btNeonLightRight,
m_btNeonLightFront,
m_btNeonLightBack,
m_btTyreSmoke,
m_btTyreSmokeRed,
m_btTyreSmokeGreen,
m_btTyreSmokeBlue,
m_btLimoWindows,
m_btVehicleMissles,
m_btAircraftBombs,
m_btAircraftCountermeasures,
m_btOppressorMK2Misseles,
m_btTampaMissles;
struct vehicleHandling
{
DWORD_PTR m_dwpHandling = 0;
float m_fMass,
m_fBuoyancy,
m_fAcceleration,
m_fUpShift,
m_fDownShift,
m_fBrakeForce,
m_fHandbrakeForce,
m_fTractionCurveMin,
m_fSuspensionForce,
m_fSuspensionHeigh,
m_fColisionDamageMult,
m_fWeaponDamageMult,
m_fDeformationDamageMult,
m_fEngineDamageMult;
};
vehicleHandling m_handlingRestore,
m_handlingCur;
vehicle();
~vehicle();
void getHealth();
void setHealth(float hp);
bool loadHandling();
void restoreHandling();
void getMass();
void setMass(float value);
void getBuoyancy();
void setBuoyancy(float value);
void getAcceleration();
void setAcceleration(float value);
void getBrakeForce();
void setBrakeForce(float value);
void getHandbrakeForce();
void setHandbrakeForce(float value);
void getTractionCurveMin();
void setTractionCurveMin(float value);
void getGravity();
void setGravity(float value);
void getBoost();
void setBoost(float value);
void getRocketRechargeSpeed();
void setRocketRechargeSpeed(float value);
void getBulletproofTires();
void setBulletproofTires(BYTE value);
void getEngineManagementSystem();
void setEngineManagementSystem(BYTE value);
void getBrakes();
void setBrakes(BYTE value);
void getTransmission();
void setTransmission(BYTE value);
void getSuspension();
void setSuspension(BYTE value);
void getArmor();
void setArmor(BYTE value);
void getTurboTuning();
void setTurboTuning(BYTE value);
void getNeonLightRed();
void setNeonLightRed(BYTE value);
void getNeonLightGreen();
void setNeonLightGreen(BYTE value);
void getNeonLightBlue();
void setNeonLightBlue(BYTE value);
void getNeonLightLeft();
void setNeonLightLeft(BYTE value);
void getNeonLightRight();
void setNeonLightRight(BYTE value);
void getNeonLightFront();
void setNeonLightFront(BYTE value);
void getNeonLightBack();
void setNeonLightBack(BYTE value);
void getTyreSmoke();
void setTyreSmoke(BYTE value);
void getTyreSmokeRed();
void setTyreSmokeRed(BYTE value);
void getTyreSmokeGreen();
void setTyreSmokeGreen(BYTE value);
void getTyreSmokeBlue();
void setTyreSmokeBlue(BYTE value);
void getLimoWindows();
void setLimoWindows(BYTE value);
void getVehicleMissles();
void setVehicleMissles(BYTE value);
void getAircraftBombs();
void setAircraftBombs(BYTE value);
void getAircraftCountermeasures();
void setAircraftCountermeasures(BYTE value);
void getOppressorMK2Misseles();
void setOppressorMK2Misseles(BYTE value);
void getTampaMissles();
void setTampaMissles(BYTE value);
void getDeformationDamageMult();
void setDeformationDamageMult(float value);
void getUpShift();
void setUpShift(float value);
void getSuspensionForce();
void setSuspensionForce(float value);
void getSuspensionHeigh();
void setSuspensionHeigh(float value);
void getColisionDamageMult();
void setColisionDamageMult(float value);
void getWeaponDamageMult();
void setWeaponDamageMult(float value);
void getEngineDamageMult();
void setEngineDamageMult(float value);
void getDownShift();
void setDownShift(float value);
};
enum ImpactTypeEnum
{
Fists = 2,
Bullets = 3,
Explosives = 5,
};
enum ImpactExplosionEnum
{
DefaultBullets = 4294967295,
GrenadeExplosion = 1,
StickyBombExplosion = 2,
MoltovCoctailExplosion = 3,
SuperLauncher = 59,
LightningExplosion = 58,
BigExplosion = 4,
MediumExplosion = 40,
TinyExplosion = 25,
BigFireyExplosion = 5,
SmallWaterSpray = 11,
SmallFireSpray = 12,
BigWaterSpray = 13,
BigFireSpray = 14,
MK2ExplosiveBullets = 18,
SmokeGrenade = 19,
TearGas = 20,
TearGas2 = 21,
RedFlareSmoke = 22,
CoolGroundExplosion = 23,
CRAZYSHOCKWAVEEXPLOSION = 26,
HUGEFireyExplosion = 28,
MassiveBlimpExplosion = 29,
MassiveBlimpExplosion2 = 37,
LargeExplosionFallingDebris = 31,
FireBallExplosion = 32,
FireworkExplosion = 38,
SnowballHit = 39,
TinyExplosions2 = 33,
JustScreenShake = 41,
SPOOFEXPLOSION = 99
};
class weapon
{
public:
DWORD m_dwCurAmmo,
m_dwMaxAmmo,
m_dwHash; //name hash
struct weaponData
{
DWORD m_dwHash = 0,
m_dwBulletBatch,
m_dwImpactType,
m_dwImpactExplosion;
DWORD_PTR m_dwpWeapon = 0;
float m_fSpread,
m_fRecoil,
m_fDamage,
m_fReload,
m_fReloadVeh,
m_fRange,
m_fSpinUp,
m_fSpin,
m_fMuzzleVelocity,
m_fPenetration,
m_fForceOnPed,
m_fForceOnVehicle,
m_fForceOnHeli;
};
weaponData m_weapDataRestore,//the original values will be stored here.
m_weapDataCur;
weapon();
~weapon();
bool loadWeapon();
void restoreWeapon();
void getReloadSpeed();
void setReloadSpeed(float value);
void getReloadVehicle();
void setReloadVehicle(float value);
void getBulletDamage();
void setBulletDamage(float value);
void getRecoil();
void setRecoil(float value);
void getSpread();
void setSpread(float value);
void getRange();
void setRange(float value);
void getSpinUp();
void setSpinUp(float value);
void getSpin();
void setSpin(float value);
void getForceOnPed();
void setForceOnPed(float value);
void getForceOnVehicle();
void setForceOnVehicle(float value);
void getForceOnHeli();
void setForceOnHeli(float value);
void getHash();
bool findAmmoBase();
void getCurAmmo();
void setCurAmmo(DWORD ammo);
void getMaxAmmo();
void getBulletBatch();
void setBulletBatch(DWORD value);
void getImpactType();
void setImpactType(DWORD value);
void getImpactExplosion();
void setImpactExplosion(DWORD value);
void getMuzzleVelocity();
void setMuzzleVelocity(float value);
DWORD_PTR m_dwpAmmoInfo,
m_dwpCurAmmoBase;
};
class tunable
{
public:
float m_fRpMult,
m_fApMult,
m_fMinMissionPayout;
DWORD m_dwOrbitalCannonCooldown,
m_dwBunkerResearch,
m_dwAntiIdleKick1,
m_dwAntiIdleKick2,
m_dwAntiIdleKick3,
m_dwAntiIdleKick4;
tunable();
~tunable();
void restoreTunable();
void getRpMult();
void setRpMult(float value);
void getApMult();
void setApMult(float value);
void getMinMissionPayout();
void setMinMissionPayout(float value);
void getOrbitalCannonCooldown();
void setOrbitalCannonCooldown(DWORD value);
void getBunkerResearch();
void setBunkerResearch(DWORD value);
void getAntiIdleKick1();
void setAntiIdleKick1(DWORD value);
void getAntiIdleKick2();
void setAntiIdleKick2(DWORD value);
void getAntiIdleKick3();
void setAntiIdleKick3(DWORD value);
void getAntiIdleKick4();
void setAntiIdleKick4(DWORD value);
DWORD_PTR m_dwpTunableBase;
};
class global
{
public:
DWORD_PTR m_dwpStatHash,
m_dwpStatValue,
m_dwpStatCall,
m_dwpMoneyObject,
m_dwpMoneyVal,
m_dwpMoneyPosX,
m_dwpMoneyPosY,
m_dwpMoneyPosZ,
m_dwpMoneyCall,
m_dwpSessionTransition,
m_dwpSessionID,
m_dwpIntoPersonalVehicle,
m_dwpVehicleSpawn1,
m_dwpVehicleSpawn2,
m_dwpVehicleHash,
m_dwpVehicleKickPrevent1,
m_dwpVehicleKickPrevent2,
m_dwpVehicleX,
m_dwpVehicleY,
m_dwpVehicleZ,
m_dwpPrimaryColor,
m_dwpSecondaryColor;
unsigned int m_dwStatHash,
m_dwVehicleHash,
m_dwStatHashSet;
int m_dwStatValue,
m_dwStatCall,
m_dwMoneyVal,
m_dwSessionTransition,
m_dwSessionID,
m_dwIntoPersonalVehicle,
m_dwVehicleSpawn1,
m_dwVehicleSpawn2,
m_dwVehicleKickPrevent1,
m_dwVehicleKickPrevent2;
float m_fMoneyPosX,
m_fMoneyPosY,
m_fMoneyPosZ,
m_fVehicleX,
m_fVehicleY,
m_fVehicleZ;
BYTE m_btMoneyObject,
m_btMoneyCall,
m_btPrimaryColor,
m_btSecondaryColor;
global();
~global();
bool initStatPtr(HMODULE base);
bool initMoneyPtr(HMODULE base);
bool initSessionPtr(HMODULE base);
bool initIntoPVPtr(HMODULE base);
bool initVehiclePtr(HMODULE base);
bool findMoneyPtr(HMODULE base);
void getStatHash();
void setStatHash(unsigned int value);
void getStatValue();
void setStatValue(int value);
void getStatCall();
void setStatCall(int value);
void getMoneyObject();
void setMoneyObject(BYTE value);
void getMoneyVal();
void setMoneyVal(int value);
void getMoneyPosX();
void setMoneyPosX(float value);
void getMoneyPosY();
void setMoneyPosY(float value);
void getMoneyPosZ();
void setMoneyPosZ(float value);
void getMoneyCall();
void setMoneyCall(BYTE value);
void getSessionTransition();
void setSessionTransition(int value);
void getSessionID();
void setSessionID(int value);
void getIntoPersonalVehicle();
void setIntoPersonalVehicle(int value);
void getVehicleSpawn1();
void setVehicleSpawn1(int value);
void getVehicleSpawn2();
void setVehicleSpawn2(int value);
void getVehicleHash();
void setVehicleHash(unsigned int value);
void getVehicleKickPrevent1();
void setVehicleKickPrevent1(int value);
void getVehicleKickPrevent2();
void setVehicleKickPrevent2(int value);
void getVehiclePosX();
void setVehiclePosX(float value);
void getVehiclePosY();
void setVehiclePosY(float value);
void getVehiclePosZ();
void setVehiclePosZ(float value);
void getPrimaryColor();
void setPrimaryColor(BYTE value);
void getSecondaryColor();
void setSecondaryColor(BYTE value);
DWORD_PTR getGlobal(int value, HMODULE base);
DWORD_PTR m_dwpGlobalBase;
};
class replayInterface
{
public:
entity *g_pPedList[256];
DWORD dw_curPedNum;
replayInterface();
~replayInterface();
void initPeds();
DWORD_PTR m_dwpReplayInterfaceBase,
m_dwpPedInterface,
m_dwpPedList;
};
#endif

2109
subVersion/hack.cpp Normal file

File diff suppressed because it is too large Load Diff

191
subVersion/hack.h Normal file
View File

@ -0,0 +1,191 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include<map>
#ifndef HACK_H
#define HACK_H
#define INITPTR_INVALID_WORLD 1 << 0
#define INITPTR_INVALID_PLAYER 1 << 1
#define INITPTR_INVALID_VEHICLE 1 << 2
#define INITPTR_INVALID_WEAPON 1 << 3
#define INITPTR_INVALID_TUNABLE 1 << 4
#define INITPTR_INVALID_GLOBAL 1 << 5
#define INITPTR_INVALID_PLAYER_LIST 1 << 6
#define INITPTR_INVALID_REPLAY_INTERFACE 1 << 7
class trainer
{
public:
clock_t m_keyTmr;
trainer();
~trainer();
bool checkKeyState(int key);
virtual void checkKeys();
};
class hack : public trainer
{
public:
v2 m_v2Waypoint;
v3 m_v3Objective;
player m_player;
vehicle m_vehicle;
weapon m_weapon;
tunable m_tunable;
global m_global;
replayInterface m_replayInterface;
std::string m_mpId;
std::deque<std::pair<unsigned int,int>> m_dStat;
ImpactExplosionEnum m_explosion;
HMODULE m_hModule;
hack();
~hack();
void checkKeys();
BYTE initPointers();
void teleport(v3 v);
bool teleportWaypoint();
bool teleportObjective();
void restoreHealth();
void restoreVehicleHealth();
void restoreStamina();
void notWanted();
void killNpc();
void fillAmmo();
void consumeStatQueue();
void killAllNpc(float* arg);
void renderPlayerList(int parent, int playerList[32]);
void setImpactExplosion(float* arg);
void fillAllAmmo(float* arg);
void healVehicle(float* arg);
void healPlayer(float* arg);
void suicide(float* arg);
void fillAmmo(float* arg);
void fillSkillLevels(float* arg);
void fillAllSnacks(float* arg);
void casinoStat(float* arg);
void casinoStatBitSet1(float* arg);
void casinoStatBitSet2(float* arg);
void unlockHeistCars(float* arg);
void unlockLSC(float* arg);
void unlockWeaponCamos(float* arg);
//void unlockWeapon(float* arg);
void unlockAllAwards(float* arg);
void unlockClothes(float* arg);
void intoPV(float* arg);
void loadSession(float* arg);
void forwardTeleport(float* arg);
void spawnVehicle(float* arg);
void selfDropMoney(feat* feature);
void waterProof(feat* feature);
void undeadOffradar(feat* feature);
void superPunch(feat* feature);
void noSpread(feat* feature);
void noRecoil(feat* feature);
void quickReload(feat* feature);
void bulletDamage(feat* feature);
void weaponRange(feat* feature);
void weaponSpin(feat* feature);
void weaponForceOnPed(feat* feature);
void weaponForceOnVehicle(feat* feature);
void weaponForceOnHeli(feat* feature);
void weaponBulletEdit(feat* feature);
void runSpeed(feat* feature);
void swimSpeed(feat* feature);
void npcIgnore(feat* feature);
void godMode(feat* feature);
void frameFlags(feat* featSuperJump, feat* featExplosiveMelee, feat* featFireAmmo, feat* featExplosiveAmmo);
void vehicleGod(feat* feature);
void infAmmo(feat* feature);
void noReload(feat* feature);
void seatbelt(feat* feature);
void noRagdoll(feat* feature);
void vehicleAccel(feat* feature);
void vehicleBrake(feat* feature);
void neverWanted(feat* feature);
void vehicleTraction(feat* feature);
void vehicleGravity(feat* feature);
void vehicleBulletproofTires(feat* feature);
void wanted(feat* feature);
void bulletBatch(feat* feature);
void muzzleVelocity(feat* feature);
void vehicleDeformation(feat* feature);
void vehicleUpShift(feat* feature);
void vehicleSuspensionForce(feat* feature);
void vehicleDownShift(feat* feature);
void vehicleMass(feat* feature);
void vehicleBuoyancy(feat* feature);
void vehicleHandbrakeForce(feat* feature);
void boost(feat* feature);
void vehicleRocketRechargeSpeed(feat* feature);
void vehicleSuspensionHeigh(feat* feature);
void vehicleColisionDamageMult(feat* feature);
void vehicleWeaponDamageMult(feat* feature);
void vehicleEngineDamageMult(feat* feature);
void tunableRpMult(feat* feature);
void tunableApMult(feat* feature);
void tunableMissionPayout(feat* feature);
void tunableOrbitalCannonCooldown(feat* feature);
void tunableBunkerResearch(feat* feature);
void tunableAntiIdleKick(feat* feature);
void about(float* arg);
void cabut(float* arg);
private:
DWORD_PTR m_dwpWorldBase,
m_dwpPlayerBase,
m_dwpVehicleBase,
m_dwpAttackerBase,
m_dwpWeaponManager,
m_dwpWeaponCur,
m_dwpAmmoInfo,
m_dwpWeaponBase,
m_dwpTunableBase,
m_dwpGlobalBase,
m_dwpPlayerListBase,
m_dwpReplayInterfaceBase;
bool m_bInit,m_bSelfDropInit;
void getWaypoint();
void getObjective();
void dStatPushBack(unsigned int hash, int value);
unsigned int string_to_hash(std::string input,std::string pre = "MP0_")
{
unsigned int num1 = 0U;
input = pre + input;
for (char c : input)
{
unsigned int num2 = num1 + (unsigned int)tolower(c);
unsigned int num3 = num2 + (num2 << 10);
num1 = num3 ^ num3 >> 6;
}
unsigned int num4 = num1 + (num1 << 3);
unsigned int num5 = num4 ^ num4 >> 11;
return num5 + (num5 << 15);
}
};
extern hack* g_pHack;
#endif

587
subVersion/main.cpp Normal file
View File

@ -0,0 +1,587 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
//global vars
HWND g_hWnd;
hack* g_pHack;
settings* g_pSettings;
memManager* g_pMemMan;
D3D9Render* g_pD3D9Render;
std::map<int, CallbackProxy<hack, float>*>* g_pCBMap;
int g_iFeature[MAX_MENU_FEATURES] = {};
int g_iIndex;
int g_iFeaturePlayerList[32];
std::pair<int, std::wstring> tbl_SessionMItems[] = {
{-1,L"Ke GTA offline"},{0,L"Join public"},{1,L"Bikin Solo Public"},{12,L"Join temen"},
{2,L"Bikin friend only"},{3,L"Gang war?"},{9,L"Add sbg teman"},{6,L"Close friend"},
{10,L"Solo"},{11,L"Sesi invite only"}
};
bool g_bKillSwitch = false;
bool g_bKillRender = false;
bool g_bKillAttach = false;
bool g_bKillHack = false;
long ADDRESS_WORLD = 0;
long ADDRESS_BLIP = 0;
long ADDRESS_AMMO = 0;
long ADDRESS_MAGAZINE = 0;
long ADDRESS_TUNABLE = 0;
long ADDRESS_WEAPON = 0;
long ADDRESS_GLOBAL = 0;
long ADDRESS_PLAYER_LIST = 0;
long ADDRESS_REPLAY_INTERFACE = 0;
//fuction prototypes
LRESULT __stdcall WindowProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam);
int addFeature(int cat,
int parent,
std::wstring name,
featType type,
void (hack::* fun)(float*),
float arg);
DWORD __stdcall threadAttach(LPVOID lpParam);
DWORD __stdcall threadRender(LPVOID lpParam);
DWORD __stdcall threadHack(LPVOID lpParam);
void iklan();
int __stdcall WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
if (FindWindow("sub1toOverlay", nullptr)) //make sure the hack is not already running
exit(0);
g_iIndex = 0;
g_pMemMan = new memManager;
g_pSettings = new settings;
g_pD3D9Render = new D3D9Render;
g_pHack = new hack;
g_pCBMap = new std::map<int, CallbackProxy<hack, float>*>;
LPCSTR szWindowTitleTarget = "Grand Theft Auto V";
LPCWSTR szWindowTitle = L"Wahyu anekdot mk2";
//v 1.3.1
g_pMemMan->setWindowName(szWindowTitleTarget);
g_pD3D9Render->m_szWindowTitle = szWindowTitle;
g_pSettings->addFeatureCategory(L"Pemain"); //0
g_pSettings->addFeatureCategory(L"Senjata"); //1
g_pSettings->addFeatureCategory(L"Mobil"); //2
g_pSettings->addFeatureCategory(L"Teleport"); //3
g_pSettings->addFeatureCategory(L"dll"); //4
g_iFeature[FEATURE_P_TRUEGOD] = g_pSettings->addFeature(0, -1, L"Tuhan", feat_toggle, "trueGodMode");
g_iFeature[FEATURE_P_GOD] = g_pSettings->addFeature(0, -1, L"Dewa", feat_toggle, "godMode");
g_iFeature[FEATURE_P_HEAL] = addFeature(0, -1, L"ngobat", feat_btn, &hack::healPlayer, -1.f);
g_iFeature[FEATURE_P_SUICIDE] = addFeature(0, -1, L"Bunuh diri", feat_btn, &hack::suicide, -1.f);
g_iFeature[FEATURE_P_WANTED] = g_pSettings->addFeature(0, -1, L"Wanted", feat_slider, "wanted", 0.f, 5.f, .2f);
g_iFeature[FEATURE_P_NEVERWANTED] = g_pSettings->addFeature(0, -1, L"Polisi Damai", feat_toggle, "neverWanted");
//addFeature(0, -1, "杀死所有NPC", feat_btn, &hack::killAllNpc, -1.f);
g_iFeature[FEATURE_P_ANTINPC] = g_pSettings->addFeature(0, -1, L"bunuh NPC", feat_toggle, "antiNpc");
g_iFeature[FEATURE_P_NPC_IGNORE] = g_pSettings->addFeature(0, -1, L"NPC cuek", feat_toggle, "npcIgnore");
g_iFeature[FEATURE_P_RUNSPD] = g_pSettings->addFeature(0, -1, L"kecepatan Lari", feat_slider, "runSpd", 1.f, 5.f);
g_iFeature[FEATURE_P_SWIMSPD] = g_pSettings->addFeature(0, -1, L"kecepatan Renang", feat_slider, "swimSpd", 1.f, 5.f);
g_iFeature[FEATURE_P_SUPER_PUNCH] = g_pSettings->addFeature(0, -1, L"Tinju Budha", feat_slider, "superPunch", 0.f, 1000.f, (float)1.f / 10.f);
g_iFeature[FEATURE_P_SUPERJUMP] = g_pSettings->addFeature(0, -1, L"Lompat Kanguru", feat_toggle, "superJump");
g_iFeature[FEATURE_P_EXPLOSIVEMELEE] = g_pSettings->addFeature(0, -1, L"Tinju Ledak Budha", feat_toggle, "explMelee");
g_iFeature[FEATURE_P_UNDEAD_OFFRADAR] = g_pSettings->addFeature(0, -1, L"anti RadarUndead", feat_toggle, "undeadOffradar");
g_iFeature[FEATURE_P_NORAGDOLL] = g_pSettings->addFeature(0, -1, L"anti Ragdoll", feat_toggle, "noRagdoll");
g_iFeature[FEATURE_P_WATER_PROOF] = g_pSettings->addFeature(0, -1, L"anti Aer", feat_toggle, "waterProof");
g_iFeature[FEATURE_P_STAMINA] = g_pSettings->addFeature(0, -1, L"Stamina Dewa", feat_toggle, "infStam");
//g_iFeature[FEATURE_W_FILL_ALL_AMMO] = addFeature(1, -1, "补满所有武器弹药", feat_btn, &hack::fillAllAmmo, -1.f);
g_iFeature[FEATURE_W_FILL_AMMO] = addFeature(1, -1, L"IsiPelor", feat_btn, &hack::fillAmmo, -1.f);
g_iFeature[FEATURE_W_SPREAD] = g_pSettings->addFeature(1, -1, L"No Nyebar", feat_toggle, "noSpread");
g_iFeature[FEATURE_W_RECOIL] = g_pSettings->addFeature(1, -1, L"No Recoil", feat_toggle, "noRecoil");
g_iFeature[FEATURE_W_NORELOAD] = g_pSettings->addFeature(1, -1, L"No Isi Ulang", feat_toggle, "noReload");
g_iFeature[FEATURE_W_RELOAD] = g_pSettings->addFeature(1, -1, L"Isi Ulang GC", feat_slider, "quickReload", 1.f, 10.f);
int bulletEdit = g_pSettings->addFeature(1, -1, L"Edit Peluru >>", feat_parent);
g_iFeature[FEATURE_W_BULLET_EDIT] = g_pSettings->addFeature(-1, bulletEdit, L"Edit Peluru", feat_toggle, "bulletEdit");
addFeature(-1, bulletEdit, L"Ledakan Granat", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::GrenadeExplosion);
addFeature(-1, bulletEdit, L"Ledakan Sticky", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::StickyBombExplosion);
addFeature(-1, bulletEdit, L"Ledakan Molotov", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::MoltovCoctailExplosion);
addFeature(-1, bulletEdit, L"Super Launcher", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::SuperLauncher);
addFeature(-1, bulletEdit, L"Ledakan petir", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::LightningExplosion);
addFeature(-1, bulletEdit, L"Ledakan besar", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::BigExplosion);
addFeature(-1, bulletEdit, L"Ledakan berapi", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::BigFireyExplosion);
addFeature(-1, bulletEdit, L"Ledakan sedang", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::MediumExplosion);
addFeature(-1, bulletEdit, L"Ledakan kecil", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::TinyExplosion);
addFeature(-1, bulletEdit, L"Ledakan kecil 2", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::TinyExplosions2);
addFeature(-1, bulletEdit, L"Semprot air kecil", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::SmallWaterSpray);
addFeature(-1, bulletEdit, L"Semprot api kecil", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::SmallFireSpray);
addFeature(-1, bulletEdit, L"Semprot air besar", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::BigWaterSpray);
addFeature(-1, bulletEdit, L"Semprot api besar", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::BigFireSpray);
addFeature(-1, bulletEdit, L"Peluru ledak MK2", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::MK2ExplosiveBullets);
addFeature(-1, bulletEdit, L"Granat asap", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::SmokeGrenade);
addFeature(-1, bulletEdit, L"Gas air mata", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::TearGas);
addFeature(-1, bulletEdit, L"Gas air mata 2", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::TearGas2);
addFeature(-1, bulletEdit, L"Flare merah", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::RedFlareSmoke);
addFeature(-1, bulletEdit, L"Cool Ground Explosion", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::CoolGroundExplosion);
addFeature(-1, bulletEdit, L"Ledakan shockwave", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::CRAZYSHOCKWAVEEXPLOSION);
addFeature(-1, bulletEdit, L"Ledakan berapi besar", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::HUGEFireyExplosion);
addFeature(-1, bulletEdit, L"Ledakan blimp besar", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::MassiveBlimpExplosion);
addFeature(-1, bulletEdit, L"Ledakan blimp besar 2", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::MassiveBlimpExplosion2);
addFeature(-1, bulletEdit, L"Serpihan ledak", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::LargeExplosionFallingDebris);
addFeature(-1, bulletEdit, L"Ledakan bola api", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::FireBallExplosion);
addFeature(-1, bulletEdit, L"Ledakan petasan", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::FireworkExplosion);
addFeature(-1, bulletEdit, L"Bola salju", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::SnowballHit);
addFeature(-1, bulletEdit, L"Layar gempa", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::JustScreenShake);
addFeature(-1, bulletEdit, L"Spoof Exp", feat_btn, &hack::setImpactExplosion, ImpactExplosionEnum::SPOOFEXPLOSION);
g_iFeature[FEATURE_W_FORCE_ON_PED] = g_pSettings->addFeature(1, -1, L"Gaya pejalan kaki", feat_slider, "forceOnPed", 1.f, 10000.f);
g_iFeature[FEATURE_W_FORCE_ON_VEHICLE] = g_pSettings->addFeature(1, -1, L"Gaya pada kendaraan", feat_slider, "forceOnVeh", 1.f, 10000.f);
g_iFeature[FEATURE_W_FORCE_ON_HELI] = g_pSettings->addFeature(1, -1, L"Gaya pada heli", feat_slider, "forceOnHeli", 1.f, 10000.f);
g_iFeature[FEATURE_W_DAMAGE] = g_pSettings->addFeature(1, -1, L"Damage peluru", feat_slider, "bulletDamage", 1.f, 10.f);
g_iFeature[FEATURE_W_AMMO] = g_pSettings->addFeature(1, -1, L"Peluru ga habis", feat_toggle, "infAmmo");
g_iFeature[FEATURE_W_RANGE] = g_pSettings->addFeature(1, -1, L"Weap Range", feat_slider, "weapRange", 1.f, 10.f);
g_iFeature[FEATURE_W_SPINUP] = g_pSettings->addFeature(1, -1, L"Weap spin", feat_toggle, "weapSpin");
g_iFeature[FEATURE_W_EXPLOSIVEAMMO] = g_pSettings->addFeature(1, -1, L"Peluru Ledak", feat_toggle, "explAmmo");
g_iFeature[FEATURE_W_FIREAMMO] = g_pSettings->addFeature(1, -1, L"Peluru api", feat_toggle, "fireAmmo");
g_iFeature[FEATURE_W_BULLET_BATCH] = g_pSettings->addFeature(1, -1, L"Peluru banyak", feat_slider, "bulletBatch", 1.f, 10.f, (float)1.f / 9.f);
g_iFeature[FEATURE_W_MUZZLE_VELOCITY] = g_pSettings->addFeature(1, -1, L"Kelajuan peluru", feat_slider, "muzzleVelo", 1.f, 10.f);
g_iFeature[FEATURE_V_TRUEGOD] = g_pSettings->addFeature(2, -1, L"Kendaraan Tuhan", feat_toggle, "vehTrueGodMode");
g_iFeature[FEATURE_V_GOD] = g_pSettings->addFeature(2, -1, L"Kendaraan Dewa", feat_toggle, "vehGodMode");
g_iFeature[FEATURE_V_HEAL] = addFeature(2, -1, L"Ketok magic", feat_btn, &hack::healVehicle, -1.f);
g_iFeature[FEATURE_V_BULLETPROOFTIRES] = g_pSettings->addFeature(2, -1, L"Ban antipeluru", feat_toggle, "vehBulletproofTires");
g_iFeature[FEATURE_V_SEATBELT] = g_pSettings->addFeature(2, -1, L"Sabuk pengaman", feat_toggle, "seatbelt");
g_iFeature[FEATURE_V_GRAVITY] = g_pSettings->addFeature(2, -1, L"Gravitasi Kendaraan", feat_slider, "vehGravity", -25.f, 25.f);
g_iFeature[FEATURE_V_BOOST] = g_pSettings->addFeature(2, -1, L"Boost Kendaraan", feat_toggle, "vehBoost");
g_iFeature[FEATURE_V_RECHARGE_SPEED] = g_pSettings->addFeature(2, -1, L"Boost isi ulang", feat_slider, "vehRrchargeSpeed", .5f, 5.f);
int handing = g_pSettings->addFeature(2, -1, L"Setingan mobil >>", feat_parent);
g_iFeature[FEATURE_V_MASS] = g_pSettings->addFeature(-1, handing, L"Massa", feat_slider, "vehMass", 0.f, 1000000.f);
g_iFeature[FEATURE_V_BUOYANCY] = g_pSettings->addFeature(-1, handing, L"Kemampuan ngapung", feat_slider, "vehBuoyancy", 0.f, 1000.f);
g_iFeature[FEATURE_V_ACCELERATION] = g_pSettings->addFeature(-1, handing, L"Akselerasi", feat_slider, "vehAccel", 1.f, 1000.f);
g_iFeature[FEATURE_V_UPSHIFT] = g_pSettings->addFeature(-1, handing, L"Gigi naik", feat_slider, "vehUpShift", 1.f, 25.f);
g_iFeature[FEATURE_V_DOWNSHIFT] = g_pSettings->addFeature(-1, handing, L"Gigi turun", feat_slider, "vehDownShift", 1.f, 25.f);
g_iFeature[FEATURE_V_BRAKEFORCE] = g_pSettings->addFeature(-1, handing, L"Gaya rem", feat_slider, "vehBrakeForce", 1.f, 25.f);
g_iFeature[FEATURE_V_HANDBRAKEFORCE] = g_pSettings->addFeature(-1, handing, L"Buyoancy", feat_slider, "vehBuoyancy", 1.f, 25.f);
g_iFeature[FEATURE_V_TRACTION] = g_pSettings->addFeature(-1, handing, L"Traction", feat_slider, "vehTraction", 1.f, 25.f);
g_iFeature[FEATURE_V_SUSPENSION_FORCE] = g_pSettings->addFeature(-1, handing, L"Gaya pegas", feat_slider, "vehSuspensionForce", 0.f, 25.f);
g_iFeature[FEATURE_V_SUSPENSION_HEIGH] = g_pSettings->addFeature(-1, handing, L"Tinggi pegas", feat_slider, "vehSuspensionHeigh", 0.f, 1.f);
g_iFeature[FEATURE_V_COLISION_DAMAGE_MP] = g_pSettings->addFeature(-1, handing, L"Kerusakan tabrakan", feat_slider, "vehColisionDamage", 0.f, 25.f);
g_iFeature[FEATURE_V_WEAPON_DAMAGE_MP] = g_pSettings->addFeature(-1, handing, L"Damage senjata kendaraan", feat_slider, "vehWeaponDamage", 0.f, 25.f);
g_iFeature[FEATURE_V_DEFORMATION] = g_pSettings->addFeature(-1, handing, L"Deform kendaraan", feat_slider, "vehDeform", 0.f, 25.f);
g_iFeature[FEATURE_V_ENGINE_DAMAGE_MP] = g_pSettings->addFeature(-1, handing, L"Kerusakan mesin", feat_slider, "vehEngineDamage", 0.f, 25.f);
g_pSettings->addFeature(3, -1, L"teleport ke WP", feat_teleport, tp_waypoint);
g_pSettings->addFeature(3, -1, L"teleport ke OBJ", feat_teleport, tp_objective);
addFeature(3, -1, L"Teleport maju", feat_btn, &hack::forwardTeleport, 5.f);
int interior = g_pSettings->addFeature(3, -1, L"Teleport ke... >>", feat_parent);
g_pSettings->addFeature(-1, interior, L"Gedung FIB", feat_teleport, tp_static, 136.0f, -750.f, 262.f);
g_pSettings->addFeature(-1, interior, L"Garment Factory", feat_teleport, tp_static, 712.716f, -962.906f, 30.6f);
g_pSettings->addFeature(-1, interior, L"Franklin House", feat_teleport, tp_static, 7.119f, 536.615f, 176.2f);
g_pSettings->addFeature(-1, interior, L"Michael House", feat_teleport, tp_static, -813.603f, 179.474f, 72.5f);
g_pSettings->addFeature(-1, interior, L"Hidden Treasure 1", feat_teleport, tp_static, 1972.610f, 3817.040f, 33.65f);
g_pSettings->addFeature(-1, interior, L"Aunt Dennis House", feat_teleport, tp_static, -14.380f, -1438.510f, 31.3f);
g_pSettings->addFeature(-1, interior, L"Freud House", feat_teleport, tp_static, -1151.770f, -1518.138f, 10.85f);
g_pSettings->addFeature(-1, interior, L"Lester House", feat_teleport, tp_static, 1273.898f, -1719.304f, 54.8f);
g_pSettings->addFeature(-1, interior, L"Strip Club", feat_teleport, tp_static, 97.271f, -1290.994f, 29.45f);
g_pSettings->addFeature(-1, interior, L"Bank Vault (Pacific Standard)", feat_teleport, tp_static, 255.85f, 217.f, 101.9f);
g_pSettings->addFeature(-1, interior, L"Comedy Club", feat_teleport, tp_static, 378.100f, -999.964f, -98.6f);
g_pSettings->addFeature(-1, interior, L"Humane Lab", feat_teleport, tp_static, 3614.394f, 3744.803f, 28.9f);
g_pSettings->addFeature(-1, interior, L"Humane Lab Authentic", feat_teleport, tp_static, 3525.201f, 3709.625f, 21.2f);
g_pSettings->addFeature(-1, interior, L"IAA Office", feat_teleport, tp_static, 113.568f, -619.001f, 206.25f);
g_pSettings->addFeature(-1, interior, L"Torture Chamber", feat_teleport, tp_static, 142.746f, -2201.189f, 4.9f);
g_pSettings->addFeature(-1, interior, L"Military Base Tower", feat_teleport, tp_static, -2358.132f, 3249.754f, 101.65f);
g_pSettings->addFeature(-1, interior, L"Mine", feat_teleport, tp_static, -595.342f, 2086.008f, 131.6f);
int saved = g_pSettings->addFeature(3, -1, L"Custom Save Point >>", feat_parent);
g_pSettings->addFeature(-1, saved, L"Save Point1", feat_teleport, "pos0", tp_saved);
g_pSettings->addFeature(-1, saved, L"Save Point2", feat_teleport, "pos1", tp_saved);
g_pSettings->addFeature(-1, saved, L"Save Point3", feat_teleport, "pos2", tp_saved);
g_pSettings->addFeature(-1, saved, L"Save Point4", feat_teleport, "pos3", tp_saved);
g_pSettings->addFeature(-1, saved, L"Save Point5", feat_teleport, "pos4", tp_saved);
g_pSettings->addFeature(-1, saved, L"Save Point6", feat_teleport, "pos5", tp_saved);
g_pSettings->addFeature(3, -1, L"Los Santos Custom", feat_teleport, tp_static, -365.425f, -131.809f, -225.f);//38.9f);
g_pSettings->addFeature(3, -1, L"LS Airport", feat_teleport, tp_static, -1336.f, -3044.f, -225.f);//14.15f);
g_pSettings->addFeature(3, -1, L"Shandy Shore Airport", feat_teleport, tp_static, 1747.f, 3273.f, -225.f);//41.35f);
g_pSettings->addFeature(3, -1, L"Mount Chilliad", feat_teleport, tp_static, 489.979f, 5587.527f, 794.3f);
int session = g_pSettings->addFeature(4, -1, L"Bikin sesi baru >>", feat_parent);
for (size_t i = 0; i < sizeof(tbl_SessionMItems) / sizeof(tbl_SessionMItems[0]); i++)
addFeature(-1, session, tbl_SessionMItems[i].second, feat_btn, &hack::loadSession, tbl_SessionMItems[i].first);
int olService = g_pSettings->addFeature(4, -1, L"Onlen >>", feat_parent);
addFeature(-1, olService, L"Ke PV", feat_btn, &hack::intoPV, -1.f);
g_iFeature[FEATURE_P_MONERY_DROP] = g_pSettings->addFeature(-1, olService, L"Uang surga", feat_toggle, "moneyDrop");
//g_iFeature[FEATURE_P_PLAYER_LIST] = g_pSettings->addFeature(3, -1, "玩家列表 >>", feat_parent);
//for (size_t i = 0; i < sizeof(g_iFeaturePlayerList)/sizeof(g_iFeaturePlayerList[0]); i++)
//{
// g_iFeaturePlayerList[i] = g_pSettings->addFeature(-1, g_iFeature[FEATURE_P_PLAYER_LIST],"线上 >>", feat_parent);
//}
int vehSpawn = g_pSettings->addFeature(-1, olService, L"Mobil >>", feat_parent);
for (size_t i = 0; i < vehiclePreview.size(); i++)
{
int temp = g_pSettings->addFeature(-1, vehSpawn, vehiclePreview[i].first, feat_parent);
for (size_t j = 0; j < vehiclePreview[i].second.size(); j++)
addFeature(-1, temp, vehiclePreview[i].second[j].VName, feat_btn, &hack::spawnVehicle, i * 1000 + j);
}
int tunable = g_pSettings->addFeature(-1, olService, L"Parameter tunable >>", feat_parent);
g_iFeature[FEATURE_T_ANTI_IDLE_KICK] = g_pSettings->addFeature(-1, tunable, L"Anti AFK", feat_toggle, "AntiIdleKick");
g_iFeature[FEATURE_T_ORBITAL_CANNON] = g_pSettings->addFeature(-1, tunable, L"Orbital Cannon", feat_toggle, "OrbitalCannon");
g_iFeature[FEATURE_T_RP_MP] = g_pSettings->addFeature(-1, tunable, L"RP Ganda", feat_slider, "RP", 1.f, 1000.f, (float)1.f / 9.f);
g_iFeature[FEATURE_T_AP_MP] = g_pSettings->addFeature(-1, tunable, L"AP Ganda", feat_slider, "AP", 1.f, 1000.f, (float)1.f / 9.f);
g_iFeature[FEATURE_T_MISSION_PAYOUT] = g_pSettings->addFeature(-1, tunable, L"Bayaran misi", feat_slider, "MinMissionPayout", 0.f, 100000.f);
int recovery = g_pSettings->addFeature(-1, olService, L"Buka kunci >>", feat_parent);
addFeature(-1, recovery, L"Isi Skill", feat_btn, &hack::fillSkillLevels, -1.f);
addFeature(-1, recovery, L"Isi cemilan", feat_btn, &hack::fillAllSnacks, -1.f);
int casino = g_pSettings->addFeature(-1, recovery, L"Perampokan Kasino >>", feat_parent);
addFeature(-1, casino, L"Stat kasino", feat_btn, &hack::casinoStat, 1.f);
int bitSet1 = g_pSettings->addFeature(-1, casino, L"Papan rencana >>", feat_parent);
addFeature(-1, bitSet1, L"Unlock probe", feat_btn, &hack::casinoStatBitSet1, 7.f);
addFeature(-1, bitSet1, L"Unlock POI", feat_btn, &hack::casinoStatBitSet1, 8.f);
int approach = g_pSettings->addFeature(-1, bitSet1, L"抢劫方式 >>", feat_parent);
addFeature(-1, approach, L"Stealth", feat_btn, &hack::casinoStatBitSet1, 0.f);
addFeature(-1, approach, L"Big Cont", feat_btn, &hack::casinoStatBitSet1, 1.f);
addFeature(-1, approach, L"Agressive", feat_btn, &hack::casinoStatBitSet1, 2.f);
int target = g_pSettings->addFeature(-1, bitSet1, L"Rampok >>", feat_parent);
addFeature(-1, target, L"Duid", feat_btn, &hack::casinoStatBitSet1, 3.f);
addFeature(-1, target, L"Emas", feat_btn, &hack::casinoStatBitSet1, 4.f);
addFeature(-1, target, L"Seni", feat_btn, &hack::casinoStatBitSet1, 5.f);
addFeature(-1, target, L"Intan", feat_btn, &hack::casinoStatBitSet1, 6.f);
int bitSet2 = g_pSettings->addFeature(-1, casino, L"Papan rencana kedua >>", feat_parent);
addFeature(-1, bitSet2, L"One key, highest", feat_btn, &hack::casinoStatBitSet2, 11.f);
addFeature(-1, bitSet2, L"Duggan Shipment kelar", feat_btn, &hack::casinoStatBitSet2, 0.f);
addFeature(-1, bitSet2, L"Keycard level tinggi", feat_btn, &hack::casinoStatBitSet2, 1.f);
addFeature(-1, bitSet2, L"Most sought-after", feat_btn, &hack::casinoStatBitSet2, 2.f);
addFeature(-1, bitSet2, L"Driver terbaik", feat_btn, &hack::casinoStatBitSet2, 3.f);
addFeature(-1, bitSet2, L"Hacker terbaik", feat_btn, &hack::casinoStatBitSet2, 4.f);
int vehs = g_pSettings->addFeature(-1, bitSet2, L"Kendaraan escape >>", feat_parent);
addFeature(-1, vehs, L"0", feat_btn, &hack::casinoStatBitSet2, 5.f);
addFeature(-1, vehs, L"1", feat_btn, &hack::casinoStatBitSet2, 6.f);
addFeature(-1, vehs, L"2", feat_btn, &hack::casinoStatBitSet2, 7.f);
addFeature(-1, vehs, L"3", feat_btn, &hack::casinoStatBitSet2, 8.f);
int weaps = g_pSettings->addFeature(-1, bitSet2, L"Senjata >>", feat_parent);
addFeature(-1, weaps, L"0", feat_btn, &hack::casinoStatBitSet2, 9.f);
addFeature(-1, weaps, L"1", feat_btn, &hack::casinoStatBitSet2, 10.f);
int unlock = g_pSettings->addFeature(-1, recovery, L"Buka >>", feat_parent);
addFeature(-1, unlock, L"Unlock LSC", feat_btn, &hack::unlockLSC, -1.f);
addFeature(-1, unlock, L"Unlock Camo", feat_btn, &hack::unlockWeaponCamos, -1.f);
addFeature(-1, unlock, L"Unlock Heist Car", feat_btn, &hack::unlockHeistCars, -1.f);
addFeature(-1, unlock, L"Unlock Awards", feat_btn, &hack::unlockAllAwards, -1.f);
addFeature(-1, unlock, L"Unlock Baju", feat_btn, &hack::unlockClothes, -1.f);
g_iFeature[FEATURE_T_BUNKER_RESEARCH] = g_pSettings->addFeature(-1, unlock, L"Riset Bunker", feat_toggle, "BunkerResearch");
addFeature(4, -1, L"Buka Internet", feat_btn, &hack::about, 0.f);
//addFeature(4, -1, L"Cek Update", feat_btn, &hack::about, 1.f);
addFeature(4, -1, L"Matiin modmenu", feat_btn, &hack::cabut, 1.f);
g_pSettings->setActiveCat(0); //this needs to be called so we can fill the current feature buffer
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wc.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wc.hbrBackground = dynamic_cast<HBRUSH>(CreateSolidBrush(RGB(0, 0, 0)));//(HBRUSH)COLOR_WINDOW;
wc.lpszClassName = "sub1toOverlay";
RegisterClassEx(&wc);
g_hWnd = CreateWindowExW(WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOOLWINDOW, //dwExStyle [in]
L"sub1toOverlay", //lpClassName [in, optional]
szWindowTitle, //lpWindowName [in, optional]
WS_POPUP, //dwStyle [in]
0, //x [in]
0, //y [in]
300, //nWidth [in]
300, //nHeight [in]
nullptr, //hWndParent [in, optional]
nullptr, //hMenu [in, optional]
hInstance, //hInstance [in, optional] A handle to the instance of the module to be associated with the window.
nullptr); //lpParam [in, optional]
SetLayeredWindowAttributes(g_hWnd, 0, 0, LWA_ALPHA);
SetLayeredWindowAttributes(g_hWnd, RGB(0, 0, 0), 0, LWA_COLORKEY);
MARGINS margins{ 1, 1, 1, 1 };
DwmExtendFrameIntoClientArea(g_hWnd, &margins);
ShowWindow(g_hWnd, SW_SHOWNORMAL);
CreateThread(NULL,
0,
threadAttach,
NULL,
0,
nullptr);
Sleep(100);
CreateThread(NULL,
0,
threadRender,
NULL,
0,
nullptr);
Sleep(100);
CreateThread(NULL,
0,
threadHack,
NULL,
0,
nullptr);
MSG msg;
while (true)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) // Check to see if any messages are waiting in the queue
{
TranslateMessage(&msg); //Translate the message and dispatch it to WindowProc()
DispatchMessage(&msg);
}
if (msg.message == WM_QUIT)
break;
Sleep(100);
}
return (int)msg.wParam;
}
//main message handler
LRESULT __stdcall WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc(hWnd, message, wParam, lParam); //default behaviour for any unhandled messages
}
int addFeature(int cat, int parent, std::wstring name, featType type, void (hack::* func)(float*), float arg)
{
(*g_pCBMap)[g_iIndex] = new CallbackProxy<hack, float>;
(*g_pCBMap)[g_iIndex]->Set(g_pHack, func);
return g_pSettings->addFeature(cat, parent, name, type, g_iIndex++, arg);
}
void iklan() {
MessageBoxExW(
NULL,
L"Nyalain NUM LOCK dan tekan NUM-",
L"Mod menu terbuka",
MB_ICONWARNING | MB_OK | MB_DEFBUTTON2,
0
);
}
DWORD __stdcall threadAttach(LPVOID lpParam)
{
//iklan();
while (!g_bKillSwitch)
{
if (g_pMemMan->attach() && g_pMemMan->findWindow())
{
HWND fgWnd = GetForegroundWindow(),
tgWnd = g_pMemMan->getWindow();
if (g_pD3D9Render->getViewport())
MoveWindow(g_hWnd, g_pD3D9Render->m_screen.x, g_pD3D9Render->m_screen.y, g_pD3D9Render->m_screen.w, g_pD3D9Render->m_screen.h, true);
if (fgWnd != tgWnd && fgWnd != g_hWnd)
{
SetWindowPos(g_hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
else if (g_hWnd == fgWnd)
{
ShowWindow(tgWnd, SW_SHOW);
SetForegroundWindow(tgWnd);
}
else if (tgWnd == fgWnd && !(GetWindowLong(g_hWnd, GWL_EXSTYLE) & WS_EX_TOPMOST))
{
SetWindowPos(g_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
}
else
{
MessageBoxW(nullptr, L"GTA V nya idupin dulu jir", L"Mod menu gagal kebukak", MB_OK | MB_ICONERROR);
g_bKillAttach = true;
killProgram();
}
Sleep(0x30);
}
g_bKillAttach = true;
return 1;
}
DWORD __stdcall threadRender(LPVOID lpParam)
{
g_pD3D9Render->init(g_hWnd);
while (!g_bKillSwitch)
{
g_pD3D9Render->render();
Sleep(0x10);
}
g_bKillRender = true;
return 0;
}
DWORD __stdcall threadHack(LPVOID lpParam)
{
g_pHack->m_hModule = g_pMemMan->getModuleAddress("GTA5.exe");
while (!g_bKillSwitch)
{
BYTE btInit = g_pHack->initPointers();
g_pHack->checkKeys();
if (!(btInit & INITPTR_INVALID_WORLD) && !(btInit & INITPTR_INVALID_PLAYER))
{
if (g_pSettings->getFeature(g_iFeature[FEATURE_P_GOD])->m_bOn || g_pSettings->getFeature(g_iFeature[FEATURE_P_TRUEGOD])->m_bOn)
g_pHack->restoreHealth();
if (g_pSettings->getFeature(g_iFeature[FEATURE_P_ANTINPC])->m_bOn)
g_pHack->killNpc();
if (g_pSettings->getFeature(g_iFeature[FEATURE_P_NEVERWANTED])->m_bOn)
g_pHack->notWanted();
if (g_pSettings->getFeature(g_iFeature[FEATURE_P_STAMINA])->m_bOn)
g_pHack->restoreStamina();
g_pHack->neverWanted(g_pSettings->getFeature(g_iFeature[FEATURE_P_NEVERWANTED]));
g_pHack->wanted(g_pSettings->getFeature(g_iFeature[FEATURE_P_WANTED]));
g_pHack->runSpeed(g_pSettings->getFeature(g_iFeature[FEATURE_P_RUNSPD]));
g_pHack->swimSpeed(g_pSettings->getFeature(g_iFeature[FEATURE_P_SWIMSPD]));
g_pHack->npcIgnore(g_pSettings->getFeature(g_iFeature[FEATURE_P_NPC_IGNORE]));
g_pHack->godMode(g_pSettings->getFeature(g_iFeature[FEATURE_P_TRUEGOD]));
g_pHack->noRagdoll(g_pSettings->getFeature(g_iFeature[FEATURE_P_NORAGDOLL]));
g_pHack->seatbelt(g_pSettings->getFeature(g_iFeature[FEATURE_V_SEATBELT]));
g_pHack->superPunch(g_pSettings->getFeature(g_iFeature[FEATURE_P_SUPER_PUNCH]));
if (g_pHack->m_player.loadPlayerData())
{
g_pHack->undeadOffradar(g_pSettings->getFeature(g_iFeature[FEATURE_P_UNDEAD_OFFRADAR]));
g_pHack->waterProof(g_pSettings->getFeature(g_iFeature[FEATURE_P_WATER_PROOF]));
}
g_pHack->frameFlags(g_pSettings->getFeature(g_iFeature[FEATURE_P_SUPERJUMP]),
g_pSettings->getFeature(g_iFeature[FEATURE_P_EXPLOSIVEMELEE]),
g_pSettings->getFeature(g_iFeature[FEATURE_W_FIREAMMO]),
g_pSettings->getFeature(g_iFeature[FEATURE_W_EXPLOSIVEAMMO]));
if (!(btInit & INITPTR_INVALID_VEHICLE))
{
if (g_pSettings->getFeature(g_iFeature[FEATURE_V_GOD])->m_bOn)
g_pHack->restoreVehicleHealth();
g_pHack->vehicleGod(g_pSettings->getFeature(g_iFeature[FEATURE_V_TRUEGOD]));
g_pHack->vehicleGravity(g_pSettings->getFeature(g_iFeature[FEATURE_V_GRAVITY]));
g_pHack->vehicleBulletproofTires(g_pSettings->getFeature(g_iFeature[FEATURE_V_BULLETPROOFTIRES]));
g_pHack->boost(g_pSettings->getFeature(g_iFeature[FEATURE_V_BOOST]));
g_pHack->vehicleRocketRechargeSpeed(g_pSettings->getFeature(g_iFeature[FEATURE_V_RECHARGE_SPEED]));
if (g_pHack->m_vehicle.loadHandling())
{
g_pHack->vehicleAccel(g_pSettings->getFeature(g_iFeature[FEATURE_V_ACCELERATION]));
g_pHack->vehicleBrake(g_pSettings->getFeature(g_iFeature[FEATURE_V_BRAKEFORCE]));
g_pHack->vehicleTraction(g_pSettings->getFeature(g_iFeature[FEATURE_V_TRACTION]));
g_pHack->vehicleDeformation(g_pSettings->getFeature(g_iFeature[FEATURE_V_DEFORMATION]));
g_pHack->vehicleUpShift(g_pSettings->getFeature(g_iFeature[FEATURE_V_UPSHIFT]));
g_pHack->vehicleDownShift(g_pSettings->getFeature(g_iFeature[FEATURE_V_DOWNSHIFT]));
g_pHack->vehicleSuspensionForce(g_pSettings->getFeature(g_iFeature[FEATURE_V_SUSPENSION_FORCE]));
g_pHack->vehicleMass(g_pSettings->getFeature(g_iFeature[FEATURE_V_MASS]));
g_pHack->vehicleBuoyancy(g_pSettings->getFeature(g_iFeature[FEATURE_V_BUOYANCY]));
g_pHack->vehicleHandbrakeForce(g_pSettings->getFeature(g_iFeature[FEATURE_V_HANDBRAKEFORCE]));
g_pHack->vehicleSuspensionHeigh(g_pSettings->getFeature(g_iFeature[FEATURE_V_SUSPENSION_HEIGH]));
g_pHack->vehicleColisionDamageMult(g_pSettings->getFeature(g_iFeature[FEATURE_V_COLISION_DAMAGE_MP]));
g_pHack->vehicleWeaponDamageMult(g_pSettings->getFeature(g_iFeature[FEATURE_V_WEAPON_DAMAGE_MP]));
g_pHack->vehicleEngineDamageMult(g_pSettings->getFeature(g_iFeature[FEATURE_V_ENGINE_DAMAGE_MP]));
}
}
if (!(btInit & INITPTR_INVALID_WEAPON) && g_pHack->m_weapon.loadWeapon())
{
g_pHack->weaponBulletEdit(g_pSettings->getFeature(g_iFeature[FEATURE_W_BULLET_EDIT]));
g_pHack->noSpread(g_pSettings->getFeature(g_iFeature[FEATURE_W_SPREAD]));
g_pHack->noRecoil(g_pSettings->getFeature(g_iFeature[FEATURE_W_RECOIL]));
g_pHack->quickReload(g_pSettings->getFeature(g_iFeature[FEATURE_W_RELOAD]));
g_pHack->bulletDamage(g_pSettings->getFeature(g_iFeature[FEATURE_W_DAMAGE]));
g_pHack->weaponRange(g_pSettings->getFeature(g_iFeature[FEATURE_W_RANGE]));
g_pHack->weaponSpin(g_pSettings->getFeature(g_iFeature[FEATURE_W_SPINUP]));
g_pHack->weaponForceOnPed(g_pSettings->getFeature(g_iFeature[FEATURE_W_FORCE_ON_PED]));
g_pHack->weaponForceOnVehicle(g_pSettings->getFeature(g_iFeature[FEATURE_W_FORCE_ON_VEHICLE]));
g_pHack->weaponForceOnHeli(g_pSettings->getFeature(g_iFeature[FEATURE_W_FORCE_ON_HELI]));
g_pHack->bulletBatch(g_pSettings->getFeature(g_iFeature[FEATURE_W_BULLET_BATCH]));
g_pHack->muzzleVelocity(g_pSettings->getFeature(g_iFeature[FEATURE_W_MUZZLE_VELOCITY]));
g_pHack->infAmmo(g_pSettings->getFeature(g_iFeature[FEATURE_W_AMMO]));
g_pHack->noReload(g_pSettings->getFeature(g_iFeature[FEATURE_W_NORELOAD]));
}
if (!(btInit & INITPTR_INVALID_TUNABLE))
{
g_pHack->tunableRpMult(g_pSettings->getFeature(g_iFeature[FEATURE_T_RP_MP]));
g_pHack->tunableApMult(g_pSettings->getFeature(g_iFeature[FEATURE_T_AP_MP]));
g_pHack->tunableMissionPayout(g_pSettings->getFeature(g_iFeature[FEATURE_T_MISSION_PAYOUT]));
g_pHack->tunableOrbitalCannonCooldown(g_pSettings->getFeature(g_iFeature[FEATURE_T_ORBITAL_CANNON]));
g_pHack->tunableBunkerResearch(g_pSettings->getFeature(g_iFeature[FEATURE_T_BUNKER_RESEARCH]));
g_pHack->tunableAntiIdleKick(g_pSettings->getFeature(g_iFeature[FEATURE_T_ANTI_IDLE_KICK]));
}
if (!(btInit & INITPTR_INVALID_GLOBAL))
{
g_pHack->selfDropMoney(g_pSettings->getFeature(g_iFeature[FEATURE_P_MONERY_DROP]));
g_pHack->consumeStatQueue();
}
//g_pHack->renderPlayerList(g_iFeature[FEATURE_P_PLAYER_LIST], g_iFeaturePlayerList);
}
Sleep(1);
}
g_bKillHack = true;
return 0;
}
//Kill the program; Prototype in stdafx.h
void killProgram()
{
g_bKillSwitch = true; //enable thread killswitch
g_pSettings->m_iniParser.write(); //save options
//make sure we shut down all threads before deleting the objects
while (!g_bKillAttach || !g_bKillRender || !g_bKillHack)
Sleep(1);
//restore patched code
feat dummyFeat;
dummyFeat.m_bRestored = false;
g_pHack->noReload(&dummyFeat);
dummyFeat.m_bRestored = false;
g_pHack->infAmmo(&dummyFeat);
delete g_pHack;
delete g_pD3D9Render;
delete g_pSettings;
delete g_pMemMan;
exit(0);
}

BIN
subVersion/mask.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

124
subVersion/memManager.cpp Normal file
View File

@ -0,0 +1,124 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
memManager::memManager() {}
memManager::memManager(LPCSTR name)
{
m_szWindowName = name;
}
memManager::~memManager()
{
CloseHandle(m_hProc);
}
bool memManager::attach()
{
if(m_hProc != nullptr)
return 1;
if(!this->findWindow())
return 0;
DWORD dwProcId;
GetWindowThreadProcessId(m_hWndTarget, &dwProcId);
if(!dwProcId)
return 0;
m_hProc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION, 0, dwProcId);
if(m_hProc == nullptr)
return 0;
initPtr();
return 1;
}
HMODULE memManager::getModuleAddress(char* moduleName)
{
HMODULE hModBuf[0xff];
DWORD bN;
UINT i;
if(EnumProcessModulesEx(m_hProc, hModBuf, sizeof(hModBuf), &bN, LIST_MODULES_64BIT))
{
for(i = 0; i < (bN / sizeof(HMODULE)); i++)
{
TCHAR szPath[MAX_PATH];
if(GetModuleFileNameEx(m_hProc, hModBuf[i], szPath, sizeof(szPath) / sizeof(TCHAR)))
{
std::string szName = szPath;
if(szName.find(moduleName) != std::string::npos)
return hModBuf[i];
}
}
}
return 0;
}
bool memManager::findWindow()
{
m_hWndTarget = FindWindow(nullptr, m_szWindowName);
if(!m_hWndTarget)
return 0;
return 1;
}
HWND memManager::getWindow()
{
return m_hWndTarget;
}
void memManager::setWindowName(LPCSTR str)
{
m_szWindowName = str;
}
void memManager::initPtr()
{
HMODULE hModule = memManager::getModuleAddress("steam_api64.dll");
if (hModule != 0)
{
//Steam
ADDRESS_WORLD = 0x24CD000;
ADDRESS_BLIP = 0x1F524F0;
ADDRESS_AMMO = 0x101BFBD;
ADDRESS_MAGAZINE = 0x101BF78;
ADDRESS_TUNABLE = 0x2D765E8;
//ADDRESS_WEAPON = 0x02810670;
ADDRESS_GLOBAL = 0x2D765E0;
ADDRESS_PLAYER_LIST = 0x1D98AE8;
ADDRESS_REPLAY_INTERFACE = 0x1EC7E40;
}
else
{
//Epic
ADDRESS_WORLD = 0x24C8858;
ADDRESS_BLIP = 0x1F4F940;
ADDRESS_AMMO = 0x101B6D9;
ADDRESS_MAGAZINE = 0x101B694;
ADDRESS_TUNABLE = 0x2D70DA8;
//ADDRESS_WEAPON = 0x0280E650;
ADDRESS_GLOBAL = 0x2D70DA0;
ADDRESS_PLAYER_LIST = 0x1D949A0;
ADDRESS_REPLAY_INTERFACE = 0x1EC3828;
}
}

67
subVersion/memManager.h Normal file
View File

@ -0,0 +1,67 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef MEMMANAGER_H
#define MEMMANAGER_H
class memManager
{
public:
memManager();
memManager(LPCSTR name);
~memManager();
bool attach();
HMODULE getModuleAddress(char* moduleName);
bool findWindow();
HWND getWindow();
void setWindowName(LPCSTR str);
void initPtr();
template <typename rT>
void readMem(DWORD_PTR address, rT* output, DWORD size = NULL, DWORD prot = NULL)
{
size = (size == NULL) ? sizeof(rT) : size;
ReadProcessMemory(m_hProc, (LPVOID) address, output, size, NULL);
return;
}
template <typename wT>
void writeMem(DWORD_PTR address, wT* value , DWORD size = NULL, DWORD prot = NULL)
{
size = (size == NULL) ? sizeof(wT) : size;
WriteProcessMemory(m_hProc, (LPVOID) address, value, size, NULL);
return;
}
template <typename wT>
void writeMem(DWORD_PTR address, wT value, DWORD size = NULL, DWORD prot = NULL)
{
size = (size == NULL) ? sizeof(wT) : size;
WriteProcessMemory(m_hProc, (LPVOID)address, &value, size, NULL);
return;
}
protected:
LPCSTR m_szWindowName;
HWND m_hWndTarget;
HANDLE m_hProc = nullptr;
};
extern memManager* g_pMemMan;
#endif

BIN
subVersion/resource.h Normal file

Binary file not shown.

649
subVersion/settings.cpp Normal file
View File

@ -0,0 +1,649 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
/*
//SETTINGS CLASS
*/
settings::settings()
{
m_iniParser.m_szFile = "settings.ini";
m_iniParser.read();
//keys
m_iKeys[keyExit] = strToVk(m_iniParser.getValue<std::string>("Exit", "Keys"));
m_iKeys[keyMenu] = strToVk(m_iniParser.getValue<std::string>("Menu", "Keys"));
m_iKeys[keyMenuUp] = strToVk(m_iniParser.getValue<std::string>("MenuUp", "Keys"));
m_iKeys[keyMenuDown] = strToVk(m_iniParser.getValue<std::string>("MenuDown", "Keys"));
m_iKeys[keyMenuLeft] = strToVk(m_iniParser.getValue<std::string>("MenuLeft", "Keys"));
m_iKeys[keyMenuRight] = strToVk(m_iniParser.getValue<std::string>("MenuRight", "Keys"));
m_iKeys[keyMenuSelect] = strToVk(m_iniParser.getValue<std::string>("MenuSelect", "Keys"));
m_iKeys[keyMenuBack] = strToVk(m_iniParser.getValue<std::string>("MenuBack", "Keys"));
m_iKeys[keyMenuTabNext] = strToVk(m_iniParser.getValue<std::string>("MenuTabNext", "Keys"));
m_iKeys[keyMenuTabPrev] = strToVk(m_iniParser.getValue<std::string>("MenuTabPrev", "Keys"));
m_iKeys[keyMenuSave] = strToVk(m_iniParser.getValue<std::string>("MenuSave", "Keys"));
m_iKeys[keyHotTeleport] = strToVk(m_iniParser.getValue<std::string>("HotTeleport", "Keys"));
m_iKeys[keyHotWanted] = strToVk(m_iniParser.getValue<std::string>("HotWanted", "Keys"));
m_iKeys[keyHotHealth] = strToVk(m_iniParser.getValue<std::string>("HotHealth", "Keys"));
m_iKeys[keyHotAmmo] = strToVk(m_iniParser.getValue<std::string>("HotAmmo", "Keys"));
}
settings::~settings()
{
for(int i = 0; i < MAX_MENU_FEATURES; i++)
{
if(m_pFeature[i])
delete m_pFeature[i];
}
for(int i = 0; i < MAX_MENU_TABS; i++)
{
if(m_pFeatureCat[i])
delete m_pFeatureCat[i];
}
}
void settings::toggleMenu()
{
m_bMenuActive = !m_bMenuActive;
return;
}
bool settings::isMenuActive()
{
return m_bMenuActive;
}
void settings::menuDown()
{
if(m_iActiveFeature + 1 < m_nFeatureCur)
{
m_iActiveFeature++;
if (m_iActiveFeature == m_iFeatureCurDisplayOffset + MAX_MENU_FEATURES_DISPLAYED - MENU_FEATURE_SCROLL_PADDING)
{
int displayOffset = m_iActiveFeature - (MAX_MENU_FEATURES_DISPLAYED - 1 - MENU_FEATURE_SCROLL_PADDING);
displayOffset = (displayOffset > m_nFeatureCur - MAX_MENU_FEATURES_DISPLAYED) ? m_nFeatureCur - MAX_MENU_FEATURES_DISPLAYED : displayOffset;
displayOffset = (displayOffset < 0) ? 0 : displayOffset;
m_iFeatureCurDisplayOffset = displayOffset;
}
}
else
{
m_iActiveFeature = 0;
m_iFeatureCurDisplayOffset = 0;
}
return;
}
void settings::menuUp()
{
if(m_iActiveFeature - 1 >= 0)
{
m_iActiveFeature--;
if (m_iActiveFeature == m_iFeatureCurDisplayOffset + MENU_FEATURE_SCROLL_PADDING - 1)
{
int displayOffset = m_iActiveFeature - MENU_FEATURE_SCROLL_PADDING;
displayOffset = (displayOffset > m_nFeatureCur - MAX_MENU_FEATURES_DISPLAYED) ? m_nFeatureCur - MAX_MENU_FEATURES_DISPLAYED : displayOffset;
displayOffset = (displayOffset < 0) ? 0 : displayOffset;
m_iFeatureCurDisplayOffset = displayOffset;
}
}
else
{
m_iActiveFeature = m_nFeatureCur - 1;
int displayOffset = m_nFeatureCur - MAX_MENU_FEATURES_DISPLAYED;
displayOffset = (displayOffset < 0) ? 0 : displayOffset;
m_iFeatureCurDisplayOffset = displayOffset;
}
return;
}
void settings::menuRight()
{
return this->getFeatureCur(m_iActiveFeature)->inc();
}
void settings::menuLeft()
{
return this->getFeatureCur(m_iActiveFeature)->dec();
}
void settings::menuTabRight()
{
while(m_pFeatureCur[0]->m_iCat < 0)
this->menuBack();
m_pFeatureCat[m_iActiveCat]->m_iDisplayOffsetRet = m_iFeatureCurDisplayOffset;
m_pFeatureCat[m_iActiveCat]->m_iActiveFeatureRet = m_iActiveFeature;
if(m_iActiveCat + 1 < m_nFeatureCat)
this->setActiveCat(m_iActiveCat + 1);
else
this->setActiveCat(0);
m_iFeatureCurDisplayOffset = m_pFeatureCat[m_iActiveCat]->m_iDisplayOffsetRet;
m_iActiveFeature = m_pFeatureCat[m_iActiveCat]->m_iActiveFeatureRet;
return;
}
void settings::menuTabLeft()
{
while(m_pFeatureCur[0]->m_iCat < 0)
this->menuBack();
m_pFeatureCat[m_iActiveCat]->m_iDisplayOffsetRet = m_iFeatureCurDisplayOffset;
m_pFeatureCat[m_iActiveCat]->m_iActiveFeatureRet = m_iActiveFeature;
if(m_iActiveCat - 1 >= 0)
this->setActiveCat(m_iActiveCat - 1);
else
this->setActiveCat(m_nFeatureCat - 1);
m_iFeatureCurDisplayOffset = m_pFeatureCat[m_iActiveCat]->m_iDisplayOffsetRet;
m_iActiveFeature = m_pFeatureCat[m_iActiveCat]->m_iActiveFeatureRet;
return;
}
void settings::menuSelect()
{
feat* feat = this->getFeatureCur(m_iActiveFeature);
feat->toggle();
return;
}
void settings::menuBack()
{
if(m_pFeatureCur[0]->m_iParent >= 0) //if the buffer is filled with features that have a parent, not a category
{
featParent* parent = dynamic_cast<featParent*>(m_pFeature[m_pFeatureCur[0]->m_iParent]);
if(parent->m_iCat < 0)
this->fillFeatureCurBuffer(parent->m_iParent, FFB_PARENT);
else
this->fillFeatureCurBuffer(parent->m_iCat, FFB_CATEGORY);
m_iFeatureCurDisplayOffset = parent->m_iDisplayOffsetRet;
m_iActiveFeature = parent->m_iActiveFeatureRet;
}
else
{
toggleMenu();
}
return;
}
int settings::addFeatureCategory(std::wstring name)
{
if(m_nFeatureCat >= MAX_MENU_TABS) //prevent buffer overflow
return -1;
m_pFeatureCat[m_nFeatureCat] = new featCat;
m_pFeatureCat[m_nFeatureCat]->m_iId = m_nFeatureCat;
m_pFeatureCat[m_nFeatureCat]->m_szName = name;
m_nFeatureCat++;
return m_nFeatureCat - 1;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type)
{
if( m_nFeature >= MAX_MENU_FEATURES || //buffer overflow
(parent < 0 && m_pFeatureCat[cat] == nullptr) || //invalid cat
(cat < 0 && (m_pFeature[parent] == nullptr || m_pFeature[parent]->m_type != feat_parent)) || //invalid parent
(cat < 0 && parent < 0) || (cat > 0 && parent > 0)) //both cat and parent were provided
return -1;
switch(type)
{
case feat_toggle:
m_pFeature[m_nFeature] = new feat;
break;
case feat_btn:
m_pFeature[m_nFeature] = new featBtn;
break;
case feat_slider:
m_pFeature[m_nFeature] = new featSlider;
break;
case feat_teleport:
m_pFeature[m_nFeature] = new featTeleport;
break;
case feat_parent:
m_pFeature[m_nFeature] = new featParent;
break;
}
m_pFeature[m_nFeature]->m_iId = m_nFeature;
m_pFeature[m_nFeature]->m_iCat = cat;
m_pFeature[m_nFeature]->m_iParent = parent;
m_pFeature[m_nFeature]->m_type = type;
m_pFeature[m_nFeature]->m_szName = name;
m_nFeature++;
return m_nFeature - 1;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, int index, float arg)
{
int id = this->addFeature(cat, parent, name, type);
if (id < 0)
return id;
dynamic_cast<featBtn*>(m_pFeature[id])->m_iIndex = index;
dynamic_cast<featBtn*>(m_pFeature[id])->m_fArg = arg;
return id;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey)
{
int id = this->addFeature(cat, parent, name, type);
if(id < 0)
return id;
m_pFeature[id]->m_szIniKey = iniKey;
m_pFeature[id]->m_bOn = (bool) m_iniParser.getValue<bool>(iniKey, "FeatureToggle");
m_pFeature[id]->m_bRestored = (m_pFeature[id]->m_bOn) ? false : true;
return id;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey, float min, float max)
{
int id = this->addFeature(cat, parent, name, type, iniKey);
if(id < 0)
return id;
dynamic_cast<featSlider*>(m_pFeature[id])->m_fMin = min;
dynamic_cast<featSlider*>(m_pFeature[id])->m_fMax = max;
float v = m_iniParser.getValue<float>(iniKey, "FeatureValue");
if(v <= max && v >= min)
dynamic_cast<featSlider*>(m_pFeature[id])->m_fValue = v;
else
{
dynamic_cast<featSlider*>(m_pFeature[id])->m_fValue = min;
m_iniParser.setValue<float>(iniKey, min, "FeatureValue");
}
return id;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey, float min, float max, float mod)
{
int id = this->addFeature(cat, parent, name, type, iniKey, min, max);
if(id < 0)
return id;
dynamic_cast<featSlider*>(m_pFeature[id])->m_fMod = mod;
return id;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey, teleType tpType)
{
if(tpType != tp_saved)
return -1;
int id = this->addFeature(cat, parent, name, type, iniKey);
if(id < 0)
return id;
dynamic_cast<featTeleport*>(m_pFeature[id])->m_tpType = tpType;
dynamic_cast<featTeleport*>(m_pFeature[id])->m_v3Pos.x = m_iniParser.getValue<float>(iniKey + "_x", "Teleport");
dynamic_cast<featTeleport*>(m_pFeature[id])->m_v3Pos.y = m_iniParser.getValue<float>(iniKey + "_y", "Teleport");
dynamic_cast<featTeleport*>(m_pFeature[id])->m_v3Pos.z = m_iniParser.getValue<float>(iniKey + "_z", "Teleport");
dynamic_cast<featTeleport*>(m_pFeature[id])->m_szName += L" | " + StringToWString(m_iniParser.getValue<std::string>(iniKey + "_name", "Teleport"));
return id;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, teleType tpType)
{
if(tpType == tp_saved)
return -1;
int id = this->addFeature(cat, parent, name, type);
if(id < 0)
return id;
dynamic_cast<featTeleport*>(m_pFeature[id])->m_tpType = tpType;
return id;
}
int settings::addFeature(int cat, int parent, std::wstring name, featType type, teleType tpType, float x, float y, float z)
{
if(tpType == tp_saved)
return -1;
int id = this->addFeature(cat, parent, name, type, tpType);
if(id < 0)
return id;
dynamic_cast<featTeleport*>(m_pFeature[id])->m_v3Pos.x = x;
dynamic_cast<featTeleport*>(m_pFeature[id])->m_v3Pos.y = y;
dynamic_cast<featTeleport*>(m_pFeature[id])->m_v3Pos.z = z;
return id;
}
int settings::updataFeature(int id, int cat, int parent, std::wstring name, featType type)
{
if (id >= MAX_MENU_FEATURES || //buffer overflow
(parent < 0 && m_pFeatureCat[cat] == nullptr) || //invalid cat
(cat < 0 && (m_pFeature[parent] == nullptr || m_pFeature[parent]->m_type != feat_parent)) || //invalid parent
(cat < 0 && parent < 0) || (cat > 0 && parent > 0)) //both cat and parent were provided
return -1;
m_pFeature[id]->m_iId = id;
m_pFeature[id]->m_iCat = cat;
m_pFeature[id]->m_iParent = parent;
m_pFeature[id]->m_type = type;
m_pFeature[id]->m_szName = name;
return id;
}
int settings::updataFeature(int id, int cat, int parent, std::wstring name, featType type, teleType tpType, float x, float y, float z)
{
if (tpType == tp_saved)
return -1;
int ret = this->updataFeature(id, cat, parent, name, type);
if (ret < 0)
return ret;
dynamic_cast<featTeleport*>(m_pFeature[ret])->m_tpType = tpType;
dynamic_cast<featTeleport*>(m_pFeature[ret])->m_v3Pos.x = x;
dynamic_cast<featTeleport*>(m_pFeature[ret])->m_v3Pos.y = y;
dynamic_cast<featTeleport*>(m_pFeature[ret])->m_v3Pos.z = z;
return ret;
}
int settings::getFeatureCategoryCount()
{
return m_nFeatureCat;
}
featCat* settings::getFeatureCategory(int id)
{
if(id > m_nFeatureCat)
return 0;
return m_pFeatureCat[id];
}
int settings::getActiveCat()
{
return m_iActiveCat;
}
int settings::setActiveCat(int cat)
{
if(cat > m_nFeatureCat)
return 0;
m_iActiveCat = cat;
this->fillFeatureCurBuffer(cat, FFB_CATEGORY);
return 1;
}
bool settings::fillFeatureCurBuffer(int id, BYTE flag)
{
//prevent race conditions
while(!g_pSettings->lockFeatureCur())
Sleep(1);
ZeroMemory(&m_pFeatureCur, sizeof(feat*) * MAX_MENU_FEATURES); //clear buffer
m_nFeatureCur = 0;
m_iActiveFeature = 0;
m_iFeatureCurDisplayOffset = 0;
for(int i = 0; i < m_nFeature; i++) //create a list of features from current category
{
if( (m_pFeature[i]->m_iCat == id && flag & FFB_CATEGORY) ||
(m_pFeature[i]->m_iParent == id && flag & FFB_PARENT))
{
m_pFeatureCur[m_nFeatureCur] = m_pFeature[i];
m_nFeatureCur++;
}
}
this->unlockFeatureCur();
return 1;
}
int settings::getFeatureCurCount()
{
return m_nFeatureCur;
}
feat* settings::getFeatureCur(int i)
{
if(i > m_nFeatureCur)
return 0;
return m_pFeatureCur[i];
}
int settings::getFeatureCount()
{
return m_nFeature;
}
feat* settings::getFeature(int id)
{
if(id > m_nFeature)
return 0;
return m_pFeature[id];
}
int settings::getActiveFeature()
{
return m_iActiveFeature;
}
bool settings::getFeatureCurLock()
{
return m_bFeatureCurLock;
}
bool settings::lockFeatureCur()
{
if(m_bFeatureCurLock)
return false;
m_bFeatureCurLock = true;
return true;
}
bool settings::unlockFeatureCur()
{
m_bFeatureCurLock = false;
return true;
}
int settings::getDisplayOffset()
{
return m_iFeatureCurDisplayOffset;
}
/*
//FEATURE CLASSES
*/
feat::feat() {}
feat::~feat() {}
void feat::toggle()
{
m_bOn = !m_bOn;
if(m_bOn)
m_bRestored = false;
if(m_szIniKey != "")
g_pSettings->m_iniParser.setValue<bool>(m_szIniKey, (int) m_bOn, "FeatureToggle");
return;
}
void feat::inc() {}
void feat::dec() {}
featBtn::featBtn() {}
featBtn::~featBtn() {}
void featBtn::toggle()
{
(*g_pCBMap)[this->m_iIndex]->Exec(&this->m_fArg);
}
featSlider::featSlider() {}
featSlider::~featSlider() {}
void featSlider::inc()
{
float v = (m_fValue + ( (m_fMax - m_fMin) * m_fMod) );
if(v <= m_fMax)
m_fValue = v;
else
m_fValue = m_fMax;
g_pSettings->m_iniParser.setValue<float>(m_szIniKey, m_fValue, "FeatureValue");
return;
}
void featSlider::dec()
{
float v = (m_fValue - ( (m_fMax - m_fMin) * m_fMod) );
if(v >= m_fMin)
m_fValue = v;
else
m_fValue = m_fMin;
g_pSettings->m_iniParser.setValue<float>(m_szIniKey, m_fValue, "FeatureValue");
return;
}
featTeleport::featTeleport() {}
featTeleport::~featTeleport() {}
void featTeleport::toggle()
{
switch(m_tpType)
{
case tp_waypoint:
g_pHack->teleportWaypoint();
break;
case tp_objective:
g_pHack->teleportObjective();
break;
case tp_saved:
case tp_static:
g_pHack->teleport(m_v3Pos);
break;
}
}
featParent::featParent() {}
featParent::~featParent() {}
void featParent::toggle()
{
m_iActiveFeatureRet = g_pSettings->getActiveFeature();
m_iDisplayOffsetRet = g_pSettings->getDisplayOffset();
g_pSettings->fillFeatureCurBuffer(this->m_iId, FFB_PARENT);
return;
}
/*
//INI PARSER CLASS
*/
iniParser::iniParser(){};
iniParser::iniParser(std::string szFile) :
m_szFile(szFile)
{};
iniParser::~iniParser(){};
void iniParser::read()
{
std::ifstream file;
file.open(m_szFile, std::ios::in);
if (!file.is_open())
{
MessageBoxW(nullptr, L"未找到settings.ini配置文件请将压缩包中所有文件解压到同一目录!", L"subVersion加载失败", MB_OK | MB_ICONERROR);
g_bKillAttach = true;
killProgram();
return;
}
std::string szLine;
int iSection = -1;
std::regex regexSection("^\\[([A-Za-z0-9_]+)\\]$"),
regexKey ("^([A-Za-z0-9_]+)=([A-Za-z0-9_\\-*/+.\\s]+)$"),
regexComment("^(;|#)(.*)$");
while(std::getline(file, szLine, '\n'))
{
std::smatch regexMatch; //std::string match object
if(szLine == "")
continue;
else if(std::regex_search(szLine, regexMatch, regexComment) && regexMatch.size() > 1)
m_key.push_back({"__COMMENT__", regexMatch[2], iSection});
else if(std::regex_search(szLine, regexMatch, regexSection) && regexMatch.size() > 1)
{
iSection = (int) m_section.size();
m_section.push_back(regexMatch[1]);
}
else if(std::regex_search(szLine, regexMatch, regexKey) && regexMatch.size() > 1)
m_key.push_back({regexMatch.str(1), regexMatch[2], iSection});
}
return;
}
void iniParser::write()
{
std::ofstream file;
file.open(m_szFile, std::ios::out | std::ios::trunc);
if(!file.is_open())
return;
for(int j = 0; j <= m_section.size(); j++)
{
if(j > 0)
file << "[" << m_section[j - 1] << "]\n";
for(int i = 0; i < m_key.size(); i++)
{
if(m_key[i].section != j - 1)
continue;
if(m_key[i].key == "__COMMENT__")
file << ";" ;
else
file << m_key[i].key << "=";
file << m_key[i].value << "\n";
}
}
return;
}
int iniParser::findKey(std::string szKey, std::string szSection)
{
for(int i = 0; i < m_key.size(); i++)
if(m_key[i].key == szKey && (szSection == "" || szSection == m_section[m_key[i].section]))
return i;
return -1;
}
int iniParser::createKey(std::string szKey, std::string szSection)
{
int iSection = -1;
if(szSection != "")
{
for(int i = 0; i < m_section.size(); i++)
if(m_section[i] == szSection)
{
iSection = i;
break;
}
}
m_key.push_back({szKey, "", iSection});
return (int) m_key.size() - 1;
}

255
subVersion/settings.h Normal file
View File

@ -0,0 +1,255 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef SETTINGS_H
#define SETTINGS_H
#define MAX_SAVEDPOS 0x06 //max saved positions (to teleport to)
#define MAX_PROPERTIES 0x60 //max iniparser properties
#define MAX_KEYS 0x10 //max indexed keys (keybinds)
#define MAX_MENU_TABS 0x08 //max amount of overlay menu tabs
#define MAX_MENU_FEATURES 0xFFF //max amount of features
#define MAX_MENU_FEATURES_DISPLAYED 0x14 //max features displayed
#define MENU_FEATURE_SCROLL_PADDING 0x02
#define NAME_BUFFER_SIZE 0x20
#define FFB_CATEGORY 1 << 0
#define FFB_PARENT 1 << 1
//Required keys, loaded in settings::settings
#define keyExit 0x0
#define keyMenu 0x1
#define keyMenuUp 0x2
#define keyMenuDown 0x3
#define keyMenuLeft 0x4
#define keyMenuRight 0x5
#define keyMenuSelect 0x6
#define keyMenuTabNext 0x7
#define keyMenuTabPrev 0x8
#define keyMenuSave 0x9
#define keyHotTeleport 0xA
#define keyHotWanted 0xB
#define keyHotHealth 0xC
#define keyHotAmmo 0xD
#define keyMenuBack 0xE
class featCat
{
public:
int m_iId,
m_iActiveFeatureRet = 0,
m_iDisplayOffsetRet = 0;
std::wstring m_szName;
};
enum featType { feat_btn, feat_toggle, feat_slider, feat_teleport, feat_parent };
enum teleType { tp_saved, tp_waypoint, tp_static, tp_objective };
class feat
{
public:
int m_iId,
m_iCat,
m_iParent;
featType m_type;
std::wstring m_szName;
std::string m_szIniKey;
bool m_bOn = false,
m_bRestored = true;
feat();
virtual ~feat();
virtual void toggle();
virtual void inc();
virtual void dec();
};
class featBtn : public feat
{
public:
int m_iIndex;
float m_fArg;
featBtn();
~featBtn();
void toggle();
};
class featSlider : public feat
{
public:
float m_fValue,
m_fMin,
m_fMax,
m_fMod = .10f;
featSlider();
~featSlider();
void inc();
void dec();
};
class featTeleport : public feat
{
public:
teleType m_tpType;
v3 m_v3Pos;
featTeleport();
~featTeleport();
void toggle();
};
class featParent : public feat
{
public:
int m_iActiveFeatureRet = 0,
m_iDisplayOffsetRet = 0;
featParent();
~featParent();
void toggle();
};
typedef struct
{
std::string key,
value;
int section;
} iniProperty;
class iniParser
{
public:
std::string m_szFile;
iniParser();
iniParser(std::string szFile);
~iniParser();
void read();
void write();
int findKey(std::string szKey, std::string szSection = "");
int createKey(std::string szKey, std::string szSection = "");
template <typename rT>
rT getValue(std::string szKey, std::string szSection = "")
{
rT r{};
int i = this->findKey(szKey, szSection);
if(i == -1 || (szSection != "" && (m_key[i].section < 0 || m_section[m_key[i].section] != szSection)))
return r;
std::stringstream ss(m_key[i].value);
ss >> r;
return r;
}
template <>
std::string getValue(std::string szKey, std::string szSection)
{
std::string r{};
int i = this->findKey(szKey, szSection);
if(i == -1 || (szSection != "" && (m_key[i].section < 0 || m_section[m_key[i].section] != szSection)))
return r;
return m_key[i].value;
}
template <typename wT>
bool setValue(std::string szKey, wT value, std::string szSection = "")
{
int i = findKey(szKey, szSection);
if(i == -1 || (szSection != "" && (m_key[i].section < 0 || m_section[m_key[i].section] != szSection)))
i = createKey(szKey, szSection);
m_key[i].value = std::to_string(value);
return true;
}
protected:
std::vector<std::string> m_section;
std::vector<iniProperty> m_key;
};
class settings
{
public:
int m_iKeys[MAX_KEYS];
iniParser m_iniParser;
settings();
~settings();
void toggleMenu();
bool isMenuActive();
void menuUp(); //prev feature
void menuDown(); //next feature
void menuLeft(); //float value down
void menuRight(); //float value up
void menuSelect(); //toggle feature/teleport or w/e
void menuBack();
void menuTabLeft(); //prev tab
void menuTabRight(); //next tab
int addFeatureCategory(std::wstring name);
int getFeatureCategoryCount();
featCat* getFeatureCategory(int id);
int setActiveCat(int);
int getActiveCat();
bool fillFeatureCurBuffer(int i, BYTE flags);
int addFeature(int cat, int parent, std::wstring name, featType type);
int addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey);
int addFeature(int cat, int parent, std::wstring name, featType type, int index,float arg);
int addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey, float min, float max);
int addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey, float min, float max, float mod);
int addFeature(int cat, int parent, std::wstring name, featType type, std::string iniKey, teleType tpType);
int addFeature(int cat, int parent, std::wstring name, featType type, teleType tpType);
int addFeature(int cat, int parent, std::wstring name, featType type, teleType tpType, float x, float y, float z);
int updataFeature(int id, int cat, int parent, std::wstring name, featType type);
int updataFeature(int id, int cat, int parent, std::wstring name, featType type, teleType tpType, float x, float y, float z);
int getFeatureCurCount();
feat* getFeatureCur(int i);
int getFeatureCount();
feat* getFeature(int id);
int getActiveFeature();
int getDisplayOffset();
bool getFeatureCurLock();
bool lockFeatureCur();
bool unlockFeatureCur();
protected:
featCat* m_pFeatureCat[MAX_MENU_TABS];
int m_nFeatureCat = 0;
int m_iActiveCat = 0; //index for featureParent [should be the same as id]
feat* m_pFeature[MAX_MENU_FEATURES];
int m_nFeature = 0; //total amount of features
int m_iActiveFeature = 0; //index for featureCur [DOES NOT HOLD ID!]
feat* m_pFeatureCur[MAX_MENU_FEATURES]; //list of features from current category
bool m_bFeatureCurLock = false;
int m_nFeatureCur = 0; //amount of features in current tab
bool m_bMenuActive = false;
int m_iFeatureCurDisplayOffset = 0;
};
extern settings* g_pSettings;
#endif

112
subVersion/settings.ini Normal file
View File

@ -0,0 +1,112 @@
;
; Keys
; Full list of valid keys in KEYS.txt
;
[Keys]
Exit=F9
Menu=NUM-
MenuUp=NUM8
MenuDown=NUM2
MenuLeft=NUM4
MenuRight=NUM6
MenuSelect=NUM5
MenuBack=NUM0
MenuTabNext=NUM9
MenuTabPrev=NUM7
MenuSave=L
HotTeleport=F5
HotWanted=F6
HotHealth=F7
HotAmmo=F8
[Teleport]
pos0_name=Saved Position 1
pos0_x=0.00
pos0_y=0.00
pos1_name=Saved Position 2
pos1_x=0.00
pos1_y=0.00
pos2_name=Saved Position 3
pos2_x=0.00
pos2_y=0.00
pos3_name=Saved Position 4
pos3_x=0.00
pos3_y=0.00
pos4_name=Saved Position 5
pos4_x=0.00
pos4_y=0.00
pos5_name=Saved Position 6
pos5_x=0.00
pos5_y=0.00
[FeatureValue]
runSpd=1.000000
swimSpd=1.000000
quickReload=1.000000
bulletDamage=1.000000
weapRange=1.000000
bulletBatch=1.000000
muzzleVelo=1.000000
vehAccel=1.000000
vehUpShift=1.000000
vehBrakeForce=1.000000
vehTraction=1.000000
batchSpread=0.000000
wanted=0.000000
vehDeform=0.000000
vehGravity=0.000000
vehSuspensionForce=0.000000
vehDownShift=1.000000
vehRrchargeSpeed=0.500000
vehBuoyancy=1.000000
RP=1.000000
AP=1.000000
superPunch=0.000000
forceOnPed=1.000000
forceOnVeh=1.000000
forceOnHeli=1.000000
vehSuspensionHeigh=0.000000
[FeatureToggle]
trueGodMode=0
godMode=0
wanted=0
neverWanted=0
antiNpc=0
runSpd=0
swimSpd=0
superJump=0
explMelee=0
noRagdoll=0
infStam=0
noSpread=0
noRecoil=0
noReload=0
quickReload=0
bulletDamage=0
infAmmo=0
weapRange=0
weapSpin=0
explAmmo=0
fireAmmo=0
bulletBatch=0
batchSpread=0
muzzleVelo=0
vehTrueGodMode=0
vehGodMode=0
vehBulletproofTires=0
seatbelt=0
vehDeform=0
vehAccel=0
vehUpShift=0
vehBrakeForce=0
vehTraction=0
vehGravity=0
vehSuspensionForce=0
vehDownShift=0
superPunch=0
npcIgnore=0
bulletEdit=1
undeadOffradar=0
vehSuspensionHeigh=0
RP=0
vehRrchargeSpeed=0
OrbitalCannon=0
AntiIdleKick=1

118
subVersion/stdafx.cpp Normal file
View File

@ -0,0 +1,118 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
DWORD strToVk(std::string str)
{
for(auto& c : str)
c = toupper(c);
if(str == "BACKSPACE") return 0x08;
if(str == "TAB") return 0x09;
if(str == "RETURN") return 0x0D;
if(str == "SHIFT") return 0x10;
if(str == "CONTROL") return 0x11;
if(str == "ALT") return 0x12;
if(str == "PAUSE") return 0x13;
if(str == "CAPSLOCK") return 0x14;
if(str == "ESCAPE") return 0x1B;
if(str == "SPACE") return 0x20;
if(str == "PAGEUP") return 0x21;
if(str == "PAGEDOWN") return 0x22;
if(str == "END") return 0x23;
if(str == "HOME") return 0x24;
if(str == "LEFT") return 0x25;
if(str == "UP") return 0x26;
if(str == "RIGHT") return 0x27;
if(str == "DOWN") return 0x28;
if(str == "INSERT") return 0x2D;
if(str == "DELETE") return 0x2E;
if(str == "0") return 0x30;
if(str == "1") return 0x31;
if(str == "2") return 0x32;
if(str == "3") return 0x33;
if(str == "4") return 0x34;
if(str == "5") return 0x35;
if(str == "6") return 0x36;
if(str == "7") return 0x37;
if(str == "8") return 0x38;
if(str == "9") return 0x39;
if(str == "A") return 0x41;
if(str == "B") return 0x42;
if(str == "C") return 0x43;
if(str == "D") return 0x44;
if(str == "E") return 0x45;
if(str == "F") return 0x46;
if(str == "G") return 0x47;
if(str == "H") return 0x48;
if(str == "I") return 0x49;
if(str == "J") return 0x4A;
if(str == "K") return 0x4B;
if(str == "L") return 0x4C;
if(str == "M") return 0x4D;
if(str == "N") return 0x4E;
if(str == "O") return 0x4F;
if(str == "P") return 0x50;
if(str == "Q") return 0x51;
if(str == "R") return 0x52;
if(str == "S") return 0x53;
if(str == "T") return 0x54;
if(str == "U") return 0x55;
if(str == "V") return 0x56;
if(str == "W") return 0x57;
if(str == "X") return 0x58;
if(str == "Y") return 0x59;
if(str == "Z") return 0x5A;
if(str == "NUM0") return 0x60;
if(str == "NUM1") return 0x61;
if(str == "NUM2") return 0x62;
if(str == "NUM3") return 0x63;
if(str == "NUM4") return 0x64;
if(str == "NUM5") return 0x65;
if(str == "NUM6") return 0x66;
if(str == "NUM7") return 0x67;
if(str == "NUM8") return 0x68;
if(str == "NUM9") return 0x69;
if(str == "NUM*") return 0x6A;
if(str == "NUM+") return 0x6B;
if(str == "NUM-") return 0x6D;
if(str == "NUMDEL") return 0x6E;
if(str == "NUM/") return 0x6F;
if(str == "F1") return 0x70;
if(str == "F2") return 0x71;
if(str == "F3") return 0x72;
if(str == "F4") return 0x73;
if(str == "F5") return 0x74;
if(str == "F6") return 0x75;
if(str == "F7") return 0x76;
if(str == "F8") return 0x77;
if(str == "F9") return 0x78;
if(str == "F10") return 0x79;
if(str == "F11") return 0x7A;
if(str == "F12") return 0x7B;
if(str == "NUMLOCK") return 0x90;
if(str == "SCROLLLOCK") return 0x91;
if(str == "LSHIFT") return 0xA0;
if(str == "RSHIFT") return 0xA1;
if(str == "LCONTROL") return 0xA2;
if(str == "RCONTROL") return 0xA3;
if(str == "LALT") return 0xA4;
if(str == "RALT") return 0xA5;
return 0;
}

290
subVersion/stdafx.h Normal file
View File

@ -0,0 +1,290 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
//#define __SC_VERSION__
//#define __STEAM_VERSION__
#ifndef STDAFX_H
#define STDAFX_H
#include <windows.h>
#include <windowsx.h>
#include <string>
#include <sstream>
#include <fstream>
#include <ctime>
#include <psapi.h>
#include <vector>
#include <regex>
#include <string>
#include <map>
#include <thread>
#include <deque>
#include <cmath>
#include <tchar.h>
#include <Dwmapi.h>
#pragma comment(lib,"Dwmapi.lib")
#include "d3d9/d3d9.h"
#include "d3d9/d3dx9.h"
#pragma comment(lib,"d3d9/d3dx9.lib")
#pragma comment(lib,"d3d9/d3d9.lib")
#include "resource.h"
#include "vector.h"
#include "memManager.h"
#include "D3D9Render.h"
#include "settings.h"
#include "entity.h"
#include "hack.h"
#include "CallbackProxy.h"
#include "VehiclePreview.h"
//offset from WORLD
#define OFFSET_PLAYER 0x08 //playerbase
#define OFFSET_NET_PLAYER 0x1C8
//entity offsets
#define OFFSET_ENTITY_POSBASE 0x30 //base of a structure that contains entity coords
#define OFFSET_ENTITY_POSBASE_COS 0x20
#define OFFSET_ENTITY_POSBASE_SIN 0x30
#define OFFSET_ENTITY_POSBASE_POS 0x50 //vector3
#define OFFSET_ENTITY_POS 0x90 //vector3
#define OFFSET_ENTITY_GOD 0x189 //godmode; on = 1, off = 0; byte
#define OFFSET_ENTITY_HEALTH 0x280 //entity health (except for vehicles); float cur, float max
#define OFFSET_ENTITY_HEALTH_MAX 0x2A0 //they moved this away from curHealth in 1.36 :(
#define OFFSET_ENTITY_ATTACKER 0x2A8 //base to a list of the last 3 entities that attacked the current entity
//player (entity) offsets
#define OFFSET_PLAYER_VEHICLE 0xD28 //ptr to last used vehicle
#define OFFSET_NET_PLAYER_INFO 0xA8
#define OFFSET_PLAYER_INFO 0x10C8 //playerInfo struct
#define OFFSET_PLAYER_INFO_NAME 0x84
#define OFFSET_PLAYER_INFO_SWIM_SPD 0x150 //swim speed; def 1; float
#define OFFSET_PLAYER_INFO_RUN_SPD 0xCD0 //run speed; def 1; float
#define OFFSET_PLAYER_INFO_FRAMEFLAGS 0x1F9 //frame flags; DWORD
#define OFFSET_PLAYER_INFO_WANTED_CAN_CHANGE 0x71C //fWantedCanChange
#define OFFSET_PLAYER_INFO_NPC_IGNORE 0x850 //npc ignore; DWORD; everyone = 0x450000;
#define OFFSET_PLAYER_INFO_WANTED 0x868 //wanted level; DWORD
#define OFFSET_PLAYER_INFO_STAMINA 0xCD4 //fStamina, fStaminaMax
#define OFFSET_PLAYER_RAGDOLL 0x10B8 //byte; CPed.noRagdoll: 0x20 = off; 0x00/0x01 = on
#define OFFSET_PLAYER_SEATBELT 0xC00 //byte; CPed.seatBelt: 0xC8 = off; 0xC9 = on
#define OFFSET_PLAYER_INVEHICLE 0x1477
#define OFFSET_PLAYER_ARMOR 0x14E0 //armour
#define OFFSET_PLAYER_WATER_PROOF 0x188 //water proof; DWORD; +0x1000000 = on
#define OFFSET_PLAYER_VEHICLE_DAMAGE_MP 0xCFC //super punck/kick;float;
//vehicle offsets
#define OFFSET_VEHICLE_HEALTH 0x908 //vehicle health; 0.f-1000.f
#define OFFSET_VEHICLE_HEALTH2 0x844 //vehicle health2; 0.f-1000.f
#define OFFSET_VEHICLE_HANDLING 0x938
#define OFFSET_VEHICLE_HANDLING_MASS 0xC //fMass
#define OFFSET_VEHICLE_HANDLING_BUOYANCY 0x40 //fBuoyancy
#define OFFSET_VEHICLE_HANDLING_ACCELERATION 0x4C
#define OFFSET_VEHICLE_HANDLING_UPSHIFT 0x58
#define OFFSET_VEHICLE_HANDLING_DOWNSHIFT 0x5C
#define OFFSET_VEHICLE_HANDLING_BRAKEFORCE 0x6C
#define OFFSET_VEHICLE_HANDLING_HANDBRAKEFORCE 0x7C //fHandbrakeForce
#define OFFSET_VEHICLE_HANDLING_TRACTION_CURVE_MIN 0x90 //fTractionCurveMin
#define OFFSET_VEHICLE_HANDLING_SUSPENSION_FORCE 0xBC //fSuspensionForce
#define OFFSET_VEHICLE_HANDLING_SUSPENSION_HEIGH 0xD0 //fSuspensionHeight
#define OFFSET_VEHICLE_HANDLING_COLISION_DAMAGE_MP 0xF0 //fColisionDamageMult
#define OFFSET_VEHICLE_HANDLING_WEAPON_DAMAGE_MP 0xF4 //fWeaponDamageMult
#define OFFSET_VEHICLE_HANDLING_DEFORM_MULTIPLIER 0xF8 //fDeformationDamageMult
#define OFFSET_VEHICLE_HANDLING_ENGINE_DAMAGE_MP 0xFC //fEngineDamageMult
#define OFFSET_VEHICLE_BULLETPROOF_TIRES 0x943 //btBulletproofTires; (btBulletproofTires & 0x20) ? true : false
#define OFFSET_VEHICLE_GRAVITY 0xC5C //fGravity
#define OFFSET_VEHICLE_BOOST 0x320 //fBoost
#define OFFSET_VEHICLE_RECHARGE_SPEED 0x324 //fRocketRechargeSpeed
#define OFFSET_VEHICLE_MISSLES 0x1280 //btVehicleMissles
#define OFFSET_VEHICLE_BOMBS 0x1294 //btAircraftBombs
#define OFFSET_VEHICLE_COUNTERMEASURES 0x1298 //btAircraftCountermeasures
#define OFFSET_VEHICLE_MK2_MISSLES 0x1284 //btOppressorMK2Misseles
#define OFFSET_VEHICLE_TAMPA_MISSLES 0x127C //btTampaMissles
#define OFFSET_VEHICLE_CUSTOM 0x48
#define OFFSET_VEHICLE_CUSTOM_EMS 0x3D6 //btEngineManagementSystem; 0x3 = max
#define OFFSET_VEHICLE_CUSTOM_BRAKES 0x3D7 //btBrakes; 0x6 = max
#define OFFSET_VEHICLE_CUSTOM_TRANSMISSION 0x3D8 //btTransmission; 0x8 = max
#define OFFSET_VEHICLE_CUSTOM_SUSPENSION 0x3DA //btSuspension; 0x1B = max
#define OFFSET_VEHICLE_CUSTOM_ARMOR 0x3DB //btArmor; 0x1B = max
#define OFFSET_VEHICLE_CUSTOM_TURBO_TUNING 0x3DD //btTurboTuning; 0x1 = on
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHT_R 0x3A2 //btNeonLightRed
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHT_G 0x3A1 //btNeonLightGreen
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHT_B 0x3A0 //btNeonLightBlue
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHTS_L 0x402 //btNeonLightLeft; 0x0 = off; 0x1 = on
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHTS_R 0x403 //btNeonLightRight; 0x0 = off; 0x1 = on
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHTS_F 0x404 //btNeonLightFront; 0x0 = off; 0x1 = on
#define OFFSET_VEHICLE_CUSTOM_NEON_LIGHTS_B 0x405 //btNeonLightBack; 0x0 = off; 0x1 = on
#define OFFSET_VEHICLE_CUSTOM_TYRE_SMOKE 0x3DF //btTyreSmoke; 0x1 = on
#define OFFSET_VEHICLE_CUSTOM_TYRE_SMOKE_R 0x3FC //btTyreSmokeRed
#define OFFSET_VEHICLE_CUSTOM_TYRE_SMOKE_G 0x3FD //btTyreSmokeGreen
#define OFFSET_VEHICLE_CUSTOM_TYRE_SMOKE_B 0x3FE //btTyreSmokeBlue
#define OFFSET_VEHICLE_CUSTOM_LIMO_WINDOWS 0x3FF //btLimoWindows; 0x1 = on
//weapon offsets
#define OFFSET_WEAPON_MANAGER 0x10D8 //from playerbase
#define OFFSET_WEAPON_CURRENT 0x20 //from weapon manager
#define OFFSET_WEAPON_AMMOINFO 0x60 //from weaponbase
#define OFFSET_WEAPON_AMMOINFO_MAX 0x28 //ammoinfo
#define OFFSET_WEAPON_AMMOINFO_CUR_1 0x08 //ptr lvl 1, ptr 1
#define OFFSET_WEAPON_AMMOINFO_CUR_2 0x00 //ptr tr lvl 2, ptr 1
#define OFFSET_WEAPON_AMMOINFO_CURAMMO 0x18 //offset to cur ammo
#define OFFSET_WEAPON_AMMOINFO_TYPE 0x0C //offset to projectile type?
#define OFFSET_WEAPON_SPREAD 0x7C //float set to 0
#define OFFSET_WEAPON_BULLET_DMG 0xBC //float times 10 (so when 0, it will stay 0)
#define OFFSET_WEAPON_RELOAD_MULTIPLIER 0x134 //float times 10
#define OFFSET_WEAPON_RECOIL 0x2F4 //float set to 0
#define OFFSET_WEAPON_MODEL_HASH 0x14
#define OFFSET_WEAPON_NAME_HASH 0x10
#define OFFSET_WEAPON_RELOAD_VEHICLE 0x130
#define OFFSET_WEAPON_RANGE 0x28C
#define OFFSET_WEAPON_SPINUP 0x144
#define OFFSET_WEAPON_SPIN 0x148
#define OFFSET_WEAPON_BULLET_BATCH 0x124 //dwBulletInBatch
#define OFFSET_WEAPON_MUZZLE_VELOCITY 0x11C //fMuzzleVelocity
#define OFFSET_WEAPON_IMPACT_TYPE 0x20 //dwImpactType; 1: Fists,3; Bullets,5: Explosives
#define OFFSET_WEAPON_IMPACT_EXPLOSION 0x24 //dwImpactExplosion
#define OFFSET_WEAPON_PENETRATION 0x110 //fPenetration
#define OFFSET_WEAPON_FORCE_ON_PED 0xDC //fForceOnPed
#define OFFSET_WEAPON_FORCE_ON_VEHICLE 0xE0 //fForceOnVehicle(Bullet Mass)
#define OFFSET_WEAPON_FORCE_ON_HELI 0xE4 //fForceOnHeli
//tunable offsets
#define OFFSET_TUNABLE_RP_MULTIPLIER 0x10
#define OFFSET_TUNABLE_AP_MULTIPLIER 0x30F80
#define OFFSET_TUNABLE_MIN_MISSION_PAYOUT 0x4BC8 //fMinMissionPayout
#define OFFSET_TUNABLE_ANTI_IDLE_KICK1 0x2C0 //AFK;DWORD;2000000000 = Anti idle kick
#define OFFSET_TUNABLE_ANTI_IDLE_KICK2 0x2C8
#define OFFSET_TUNABLE_ANTI_IDLE_KICK3 0x2D0
#define OFFSET_TUNABLE_ANTI_IDLE_KICK4 0x2D8
#define OFFSET_TUNABLE_ORBITAL_CANNON_COOLDOWN 0x2C188 //OrbitalCannonCooldown;DWORD
#define OFFSET_TUNABLE_BUNKER_RESEARCH 0x29BB8 //UnlockAllBunkerResearch;DWORD
#define OFFSET_ATTACKER_DISTANCE 0x18 //changed to 0x18, from 0x10
//replay interface offsets
#define OFFSET_REPLAY_PED_INTERFACE 0x18
#define OFFSET_PED_INTERFACE_PED_LIST 0x100
#define OFFSET_PED_INTERFACE_CUR_PEDS 0x110
//global offsets
#define OFFSET_GLOBAL_VEHICLE_HASH 2460715
//feature indexing
#define FEATURE_P_GOD 0x00
#define FEATURE_P_NEVERWANTED 0x01
#define FEATURE_P_ANTINPC 0x02
#define FEATURE_V_GOD 0x03
#define FEATURE_W_SPREAD 0x04
#define FEATURE_W_RECOIL 0x05
#define FEATURE_W_RELOAD 0x06
#define FEATURE_W_DAMAGE 0x07
#define FEATURE_W_AMMO 0x08
#define FEATURE_W_RANGE 0x09
#define FEATURE_W_SPINUP 0x0A
#define FEATURE_P_RUNSPD 0x0B
#define FEATURE_P_SWIMSPD 0x0C
#define FEATURE_P_TRUEGOD 0x0D
#define FEATURE_P_SUPERJUMP 0x0E
#define FEATURE_P_EXPLOSIVEMELEE 0x0F
#define FEATURE_W_EXPLOSIVEAMMO 0x10
#define FEATURE_W_FIREAMMO 0x11
#define FEATURE_V_TRUEGOD 0x12
#define FEATURE_P_NORAGDOLL 0x13
#define FEATURE_V_SEATBELT 0x14
#define FEATURE_W_NORELOAD 0x15
#define FEATURE_V_ACCELERATION 0x16
#define FEATURE_V_BRAKEFORCE 0x17
#define FEATURE_V_TRACTION 0x18
#define FEATURE_V_GRAVITY 0x19
#define FEATURE_V_BULLETPROOFTIRES 0x1A
#define FEATURE_P_WANTED 0x1B
#define FEATURE_W_BULLET_BATCH 0x1C
#define FEATURE_W_MUZZLE_VELOCITY 0x1D
#define FEATURE_V_DEFORMATION 0x1E
#define FEATURE_V_UPSHIFT 0x1F
#define FEATURE_V_SUSPENSION_FORCE 0x21
#define FEATURE_P_STAMINA 0x22
#define FEATURE_V_DOWNSHIFT 0x24
#define FEATURE_P_SUICIDE 0x25
#define FEATURE_W_FILL_AMMO 0x26
#define FEATURE_P_WATER_PROOF 0x27
#define FEATURE_P_HEAL 0x28
#define FEATURE_P_UNDEAD_OFFRADAR 0x29
#define FEATURE_P_SUPER_PUNCH 0x2A
#define FEATURE_V_MASS 0x2B
#define FEATURE_V_BUOYANCY 0x2C
#define FEATURE_V_HANDBRAKEFORCE 0x2D
#define FEATURE_V_SUSPENSION_HEIGH 0x2E
#define FEATURE_V_COLISION_DAMAGE_MP 0x2F
#define FEATURE_V_WEAPON_DAMAGE_MP 0x30
#define FEATURE_V_ENGINE_DAMAGE_MP 0x31
#define FEATURE_V_BOOST 0x32
#define FEATURE_V_RECHARGE_SPEED 0x33
#define FEATURE_V_HEAL 0x34
#define FEATURE_T_RP_MP 0x35
#define FEATURE_T_AP_MP 0x36
#define FEATURE_T_MISSION_PAYOUT 0x37
#define FEATURE_W_FILL_ALL_AMMO 0x38
#define FEATURE_W_FORCE_ON_PED 0x39
#define FEATURE_W_FORCE_ON_VEHICLE 0x3A
#define FEATURE_W_FORCE_ON_HELI 0x3B
#define FEATURE_W_BULLET_EDIT 0x3C
#define FEATURE_P_NPC_IGNORE 0x3D
#define FEATURE_T_ORBITAL_CANNON 0x3E
#define FEATURE_T_BUNKER_RESEARCH 0x3F
#define FEATURE_T_ANTI_IDLE_KICK 0x40
#define FEATURE_P_PLAYER_LIST 0x41
#define FEATURE_P_MONERY_DROP 0x42
static std::wstring StringToWString(const std::string& str) {
int num = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);
wchar_t* wide = new wchar_t[num];
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, wide, num);
std::wstring w_str(wide);
delete[] wide;
return w_str;
}
void killProgram ();
DWORD strToVk(std::string str);
extern HWND g_hWnd;
extern int g_iFeature[MAX_MENU_FEATURES];
extern bool g_bKillSwitch;
extern bool g_bKillRender;
extern bool g_bKillAttach;
extern bool g_bKillHack;
//Addresses from GTAV.exe module
extern long ADDRESS_WORLD; //48 8B 05 ? ? ? ? 45 ? ? ? ? 48 8B 48 08 48 85 C9 74 07
extern long ADDRESS_BLIP; //4C 8D 05 ? ? ? ? 0F B7 C1
extern long ADDRESS_AMMO; //Ammo dec code; 41 2B D1 E8; 90 90 90 E8
extern long ADDRESS_MAGAZINE; //Magazine dec code; 41 2B C9 3B C8 0F; 90 90 90 3B C8 0F
extern long ADDRESS_TUNABLE;
extern long ADDRESS_WEAPON;
extern long ADDRESS_GLOBAL; //4C 8D 05 ? ? ? ? 4D 8B 08 4D 85 C9 74 11
extern long ADDRESS_PLAYER_LIST; //48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B C8 E8 ? ? ? ? 48 8B CF
extern long ADDRESS_REPLAY_INTERFACE; //48 8D 0D ? ? ? ? 48 8B D7 E8 ? ? ? ? 48 8D 0D ? ? ? ? 8A D8 E8 ? ? ? ? 84 DB 75 13 48 8D 0D ? ? ? ?
#endif

View File

@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="D3D9Render.cpp" />
<ClCompile Include="entity.cpp" />
<ClCompile Include="hack.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="memManager.cpp" />
<ClCompile Include="settings.cpp" />
<ClCompile Include="stdafx.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CallbackProxy.h" />
<ClInclude Include="ColorDef.h" />
<ClInclude Include="D3D9Render.h" />
<ClInclude Include="entity.h" />
<ClInclude Include="hack.h" />
<ClInclude Include="memManager.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="settings.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="vector.h" />
<ClInclude Include="VehiclePreview.h" />
</ItemGroup>
<ItemGroup>
<Image Include="mask.ico" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="GTA d3d9.rc" />
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{14bdf4df-a71b-489a-9077-ea112711cb28}</ProjectGuid>
<RootNamespace>subVersion</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="D3D9Render.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="entity.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="hack.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="main.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="memManager.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="settings.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="stdafx.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="D3D9Render.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="entity.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="hack.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="memManager.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="settings.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="stdafx.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="vector.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CallbackProxy.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="ColorDef.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="resource.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="VehiclePreview.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="mask.ico">
<Filter>资源文件</Filter>
</Image>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="GTA d3d9.rc">
<Filter>资源文件</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

44
subVersion/vector.h Normal file
View File

@ -0,0 +1,44 @@
/*
Copyright 2016-2017 sub1to
This file is part of subVersion GTA:O SC External Hack.
subVersion GTA:O SC External Hack 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.
subVersion GTA:O SC External Hack 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 subVersion GTA:O SC External Hack. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef VECTOR_H
#define VECTOR_H
struct v2
{
float x = 0,
y = 0;
};
struct v3
{
float x = 0,
y = 0,
z = 0;
v3(){}
v3(float x, float y, float z)
{
this->x = x;
this->y = y;
this->z = z;
}
};
#endif