Merge branch 'master' of https://github.com/nullifiedcat/cathook
This commit is contained in:
commit
0961afc3f6
256
.gitignore
vendored
256
.gitignore
vendored
@ -1,9 +1,253 @@
|
|||||||
*.d
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
[Xx]64/
|
||||||
|
[Xx]86/
|
||||||
|
[Bb]uild/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
|
||||||
|
# Visual Studio 2015 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# DNX
|
||||||
|
project.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# TODO: Un-comment the next line if you do not want to checkin
|
||||||
|
# your web deploy settings because they may include unencrypted
|
||||||
|
# passwords
|
||||||
|
#*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/packages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/packages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/packages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignoreable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directory
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
|
||||||
|
# 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/
|
||||||
|
[Ss]tyle[Cc]op.*
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
node_modules/
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# LightSwitch generated files
|
||||||
|
GeneratedArtifacts/
|
||||||
|
ModelManifest.xml
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
|
||||||
|
## Ignore .o and .d files (objects and dependencies)
|
||||||
*.o
|
*.o
|
||||||
/bin/*
|
*.d
|
||||||
|
|
||||||
|
# Don't ignore binary resource files
|
||||||
!res/bin/*
|
!res/bin/*
|
||||||
/core
|
|
||||||
Debug/
|
## Ignore Data Folder symlink
|
||||||
.vs/cathook/v15/Browse.VC.db
|
|
||||||
TFLOC
|
|
||||||
Data Folder
|
Data Folder
|
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"CurrentProjectSetting": null
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"ExpandedNodes": [
|
|
||||||
"",
|
|
||||||
"\\src",
|
|
||||||
"\\src\\hacks"
|
|
||||||
],
|
|
||||||
"PreviewInSolutionExplorer": false
|
|
||||||
}
|
|
Binary file not shown.
BIN
.vs/slnx.sqlite
BIN
.vs/slnx.sqlite
Binary file not shown.
@ -33,7 +33,7 @@ sudo apt update && sudo apt install build-essential software-properties-common -
|
|||||||
|
|
||||||
Arch dependencies installation::
|
Arch dependencies installation::
|
||||||
```bash
|
```bash
|
||||||
sudo pacman -Syu && sudo pacman -S gdb gdb-common glew1.10 lib32-glew1.10 --noconfirm && yes | sudo pacman -U https://archive.archlinux.org/packages/g/gcc-multilib/gcc-multilib-6.3.1-2-x86_64.pkg.tar.xz https://archive.archlinux.org/packages/g/gcc-libs-multilib/gcc-libs-multilib-6.3.1-2-x86_64.pkg.tar.xz https://archive.archlinux.org/packages/l/lib32-gcc-libs/lib32-gcc-libs-6.3.1-2-x86_64.pkg.tar.xz
|
sudo pacman -Syu && sudo pacman -S gdb gdb-common glew1.10 lib32-glew1.10 rsync --noconfirm && yes | sudo pacman -U https://archive.archlinux.org/packages/g/gcc-multilib/gcc-multilib-6.3.1-2-x86_64.pkg.tar.xz https://archive.archlinux.org/packages/g/gcc-libs-multilib/gcc-libs-multilib-6.3.1-2-x86_64.pkg.tar.xz https://archive.archlinux.org/packages/l/lib32-gcc-libs/lib32-gcc-libs-6.3.1-2-x86_64.pkg.tar.xz
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ShowAllFiles>true</ShowAllFiles>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
@ -255,7 +255,7 @@ inline void CondBitSet(condition_data_s& data) {
|
|||||||
template<condition cond>
|
template<condition cond>
|
||||||
inline bool HasCondition(CachedEntity* ent) {
|
inline bool HasCondition(CachedEntity* ent) {
|
||||||
IF_GAME (!IsTF()) return false;
|
IF_GAME (!IsTF()) return false;
|
||||||
IF_GAME (IsTF2()) {
|
IF_GAME (IsTF2() && cond < condition(96)) {
|
||||||
if (CondBitCheck<cond>(CE_VAR(ent, netvar._condition_bits, condition_data_s))) return true;
|
if (CondBitCheck<cond>(CE_VAR(ent, netvar._condition_bits, condition_data_s))) return true;
|
||||||
}
|
}
|
||||||
return CondBitCheck<cond>(CE_VAR(ent, netvar.iCond, condition_data_s));
|
return CondBitCheck<cond>(CE_VAR(ent, netvar.iCond, condition_data_s));
|
||||||
|
@ -26,6 +26,7 @@ CatVar item_health_packs(CV_SWITCH, "esp_item_health", "1", "Health packs", "Sho
|
|||||||
CatVar item_powerups(CV_SWITCH, "esp_item_powerups", "1", "Powerups", "Show powerups");
|
CatVar item_powerups(CV_SWITCH, "esp_item_powerups", "1", "Powerups", "Show powerups");
|
||||||
CatVar item_money(CV_SWITCH, "esp_money", "1", "MvM money", "Show MvM money");
|
CatVar item_money(CV_SWITCH, "esp_money", "1", "MvM money", "Show MvM money");
|
||||||
CatVar item_money_red(CV_SWITCH, "esp_money_red", "1", "Red MvM money", "Show red MvM money");
|
CatVar item_money_red(CV_SWITCH, "esp_money_red", "1", "Red MvM money", "Show red MvM money");
|
||||||
|
CatVar item_spellbooks(CV_SWITCH, "esp_spellbooks", "1", "Spellbooks", "Spell Books");
|
||||||
CatVar entity_id(CV_SWITCH, "esp_entity_id", "1", "Entity ID", "Used with Entity ESP. Shows entityID");
|
CatVar entity_id(CV_SWITCH, "esp_entity_id", "1", "Entity ID", "Used with Entity ESP. Shows entityID");
|
||||||
CatVar tank(CV_SWITCH, "esp_show_tank", "1", "Show tank", "Show tank");
|
CatVar tank(CV_SWITCH, "esp_show_tank", "1", "Show tank", "Show tank");
|
||||||
CatVar box_esp(CV_SWITCH, "esp_box", "1", "Box", "Draw 2D box with healthbar. fancy.");
|
CatVar box_esp(CV_SWITCH, "esp_box", "1", "Box", "Draw 2D box with healthbar. fancy.");
|
||||||
@ -367,6 +368,12 @@ void _FASTCALL ProcessEntity(CachedEntity* ent) {
|
|||||||
} else if (item_weapon_spawners && ent->m_ItemType >= ITEM_TF2C_W_FIRST && ent->m_ItemType <= ITEM_TF2C_W_LAST) {
|
} else if (item_weapon_spawners && ent->m_ItemType >= ITEM_TF2C_W_FIRST && ent->m_ItemType <= ITEM_TF2C_W_LAST) {
|
||||||
AddEntityString(ent, format(tf2c_weapon_names[ent->m_ItemType - ITEM_TF2C_W_FIRST], " SPAWNER"));
|
AddEntityString(ent, format(tf2c_weapon_names[ent->m_ItemType - ITEM_TF2C_W_FIRST], " SPAWNER"));
|
||||||
if (CE_BYTE(ent, netvar.bRespawning)) AddEntityString(ent, "-- RESPAWNING --");
|
if (CE_BYTE(ent, netvar.bRespawning)) AddEntityString(ent, "-- RESPAWNING --");
|
||||||
|
} else if (item_spellbooks && (ent->m_ItemType == ITEM_SPELL || ent->m_ItemType == ITEM_SPELL_RARE)) {
|
||||||
|
if (ent->m_ItemType == ITEM_SPELL) {
|
||||||
|
AddEntityString(ent, "Spell", colors::green);
|
||||||
|
} else {
|
||||||
|
AddEntityString(ent, "Rare Spell", colors::FromRGBA8(139, 31, 221, 255));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (ent->m_Type == ENTITY_BUILDING && buildings) {
|
} else if (ent->m_Type == ENTITY_BUILDING && buildings) {
|
||||||
if (!ent->m_bEnemy && !teammates) return;
|
if (!ent->m_bEnemy && !teammates) return;
|
||||||
|
@ -58,6 +58,7 @@ bool ExploitActive() {
|
|||||||
|
|
||||||
static CatVar mini_lag_exploit(CV_INT, "lagexploit_mini", "0", "Mini Lag Exploit");
|
static CatVar mini_lag_exploit(CV_INT, "lagexploit_mini", "0", "Mini Lag Exploit");
|
||||||
static CatVar instant_weapon_switch(CV_SWITCH, "instant_weapon_switch", "0", "Instant weapon switch");
|
static CatVar instant_weapon_switch(CV_SWITCH, "instant_weapon_switch", "0", "Instant weapon switch");
|
||||||
|
static CatVar infinite_packs(CV_SWITCH, "infinite_healthpacks", "0", "Infinite Healthpacks", "Activate removecond when standing on healthpack while having not full HP");
|
||||||
|
|
||||||
void CreateMove() {
|
void CreateMove() {
|
||||||
if (CE_BAD(LOCAL_E)) return;
|
if (CE_BAD(LOCAL_E)) return;
|
||||||
@ -145,6 +146,31 @@ void CreateMove() {
|
|||||||
if (!ExploitActive()) {
|
if (!ExploitActive()) {
|
||||||
amount = int(mini_lag_exploit);
|
amount = int(mini_lag_exploit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Infinite healthpacks (I'll probably have to move this somewhere else)
|
||||||
|
if (infinite_packs && CE_GOOD(LOCAL_E) && LOCAL_E->m_iHealth != LOCAL_E->m_iMaxHealth) {
|
||||||
|
ICollideable* p = RAW_ENT(LOCAL_E)->GetCollideable();
|
||||||
|
const Vector& max1 = p->OBBMaxs();
|
||||||
|
const Vector& min1 = p->OBBMins();
|
||||||
|
for (int i = 1; i < entity_cache::max; i++) {
|
||||||
|
CachedEntity* e = ENTITY(i);
|
||||||
|
if (e->m_iClassID != CL_CLASS(CBaseAnimating)) continue;
|
||||||
|
if (e->m_ItemType != ITEM_HEALTH_SMALL && e->m_ItemType != ITEM_HEALTH_MEDIUM && e->m_ItemType != ITEM_HEALTH_LARGE) continue;
|
||||||
|
if (e->m_flDistance < 54.0f) amount = 900;
|
||||||
|
// Not working for some reason?
|
||||||
|
/*ICollideable* c = RAW_ENT(e)->GetCollideable();
|
||||||
|
const Vector& max2 = c->OBBMaxs();
|
||||||
|
const Vector& min2 = c->OBBMins();
|
||||||
|
if ( (min1.x <= max2.x && max1.x >= min2.x) &&
|
||||||
|
(min1.y <= max2.y && max1.y >= min2.y) &&
|
||||||
|
(min1.z <= max2.z && max1.z >= min2.z) ) {
|
||||||
|
logging::Info("Collision with %d", i);
|
||||||
|
amount = 900;
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!amount) return;
|
if (!amount) return;
|
||||||
// Modifying command_number and lastoutgoingcommand turned out to be useless
|
// Modifying command_number and lastoutgoingcommand turned out to be useless
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
|
|||||||
if (CE_GOOD(g_pLocalPlayer->entity)) {
|
if (CE_GOOD(g_pLocalPlayer->entity)) {
|
||||||
static int fakelag_queue = 0;
|
static int fakelag_queue = 0;
|
||||||
if (fakelag_amount) {
|
if (fakelag_amount) {
|
||||||
if (fakelag_queue == int(fakelag_amount)) {
|
if (fakelag_queue == int(fakelag_amount) || (g_pUserCmd->buttons & IN_ATTACK)) {
|
||||||
*bSendPackets = true;
|
*bSendPackets = true;
|
||||||
} else if (fakelag_queue < int(fakelag_amount)) {
|
} else if (fakelag_queue < int(fakelag_amount)) {
|
||||||
*bSendPackets = false;
|
*bSendPackets = false;
|
||||||
|
@ -169,15 +169,15 @@ bool SendNetMsg_hook(void* _this, INetMessage& msg, bool bForceReliable = false,
|
|||||||
}
|
}
|
||||||
static ConVar* sv_player_usercommand_timeout = g_ICvar->FindVar("sv_player_usercommand_timeout");
|
static ConVar* sv_player_usercommand_timeout = g_ICvar->FindVar("sv_player_usercommand_timeout");
|
||||||
static float lastcmd = 0.0f;
|
static float lastcmd = 0.0f;
|
||||||
if (lastcmd > g_GlobalVars->curtime) {
|
if (lastcmd > g_GlobalVars->absoluteframetime) {
|
||||||
lastcmd = g_GlobalVars->curtime;
|
lastcmd = g_GlobalVars->absoluteframetime;
|
||||||
}
|
}
|
||||||
if (airstuck.KeyDown() && !g_Settings.bInvalid) {
|
if (airstuck.KeyDown() && !g_Settings.bInvalid) {
|
||||||
if (CE_GOOD(LOCAL_E)) {
|
if (CE_GOOD(LOCAL_E)) {
|
||||||
if (lastcmd + sv_player_usercommand_timeout->GetFloat() - 0.05f < g_GlobalVars->curtime) {
|
if (lastcmd + sv_player_usercommand_timeout->GetFloat() - 0.1f < g_GlobalVars->curtime) {
|
||||||
if (msg.GetType() == clc_Move) return false;
|
if (msg.GetType() == clc_Move) return false;
|
||||||
} else {
|
} else {
|
||||||
lastcmd = g_GlobalVars->curtime;
|
lastcmd = g_GlobalVars->absoluteframetime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,10 @@ ItemManager::ItemManager() : mapper() {
|
|||||||
RegisterModelMapping("models/items/healthkit.mdl", ITEM_HEALTH_MEDIUM);
|
RegisterModelMapping("models/items/healthkit.mdl", ITEM_HEALTH_MEDIUM);
|
||||||
//RegisterModelMapping("models/pickups/pickup_powerup_reflect.mdl", ITEM_POWERUP_REFLECT);
|
//RegisterModelMapping("models/pickups/pickup_powerup_reflect.mdl", ITEM_POWERUP_REFLECT);
|
||||||
|
|
||||||
|
// Spellbooks
|
||||||
|
RegisterModelMapping("models/props_halloween/hwn_spellbook_upright.mdl", ITEM_SPELL);
|
||||||
|
RegisterModelMapping("models/props_halloween/hwn_spellbook_upright_major.mdl", ITEM_SPELL_RARE);
|
||||||
|
|
||||||
RegisterSpecialMapping([](CachedEntity* ent) -> bool {
|
RegisterSpecialMapping([](CachedEntity* ent) -> bool {
|
||||||
return ent->m_iClassID == CL_CLASS(CTFAmmoPack);
|
return ent->m_iClassID == CL_CLASS(CTFAmmoPack);
|
||||||
}, ITEM_AMMO_MEDIUM);
|
}, ITEM_AMMO_MEDIUM);
|
||||||
|
@ -144,6 +144,9 @@ enum k_EItemType {
|
|||||||
|
|
||||||
ITEM_HL_BATTERY,
|
ITEM_HL_BATTERY,
|
||||||
|
|
||||||
|
ITEM_SPELL,
|
||||||
|
ITEM_SPELL_RARE,
|
||||||
|
|
||||||
ITEM_COUNT
|
ITEM_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user