upload
This commit is contained in:
@@ -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
@@ -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
@@ -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>.
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
# subVerison_GTAV_Hack
|
||||||
|
subVerison重置版——GTAV线上外置修改器
|
||||||
|
|
||||||
|
[](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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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) // 纯黑
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -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__
|
||||||
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -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__
|
||||||
|
|
||||||
@@ -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__
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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__
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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__ )
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 200 KiB |
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
Binary file not shown.
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user