added, changed and corrected stuff (#1165)

* added, changed and corrected stuff

* Add files via upload

* reset time should only be displayed on flags

apparently carts also have a reset timer that goes to negative values

* added flask style to magic spells esp

* added "hide invisible" to prevent drawing on invis players

* oops these should be aligned

* added edibles/lunchboxes support to healthpack esp

* gets rid of unneded stuff

* changed reset time code to make it look neater

* Added more checks to auto strafer

Makes it so we don't strafe when we're noclipping, double jumping as scout or in water. This closes https://github.com/nullworks/cathook/issues/1126 and a part of https://github.com/nullworks/cathook/issues/998.

* Corrected a small typo in auto pyro

* Revert "Add files via upload"

This reverts commit f3786b527cd0e8f972091c0960e600786088febc.

* spec list attempt #2

hello does this work its my first time using gitkraken

* small sandviches, stuff off by default, only 1st person spec is colored

ye

* yes now objective esp is off by default

* Some fixes

* Update data/menu/nullifiedcat/visuals/esp.xml

* Change colours

Co-authored-by: NotAnUser <zhr9z9oc53@inscriptio.in>
Co-authored-by: TotallyNotElite <1yourexperiment@protonmail.com>
Co-authored-by: TotallyNotElite <38938720+TotallyNotElite@users.noreply.github.com>
This commit is contained in:
NotAnUser1 2020-11-25 23:20:16 +03:00 committed by GitHub
parent e4f196866d
commit 68829d1178
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 170 additions and 36 deletions

View File

@ -5,7 +5,7 @@
<AutoVariable width="fill" target="autoreflect.button" label="Reflect button"/>
<AutoVariable width="fill" target="autoreflect.idle-only" label="Only reflect when able" tooltip="Don't try to reflect when using primary fire."/>
<AutoVariable width="fill" target="autoreflect.teammate" label="Teammate projectiles" tooltip="Attempt to reflect teammate projectiles."/>
<AutoVariable width="fill" target="autoreflect.dodgeball" label="Dodgeball mode" tooltip="Disasble vischeck"/>
<AutoVariable width="fill" target="autoreflect.dodgeball" label="Dodgeball mode" tooltip="Disable vischeck"/>
<AutoVariable width="fill" target="autoreflect.legit" label="Legit mode" tooltip="Don't move the mouse to reflect. Spectator safe."/>
</List>
<Box padding="12 6 6 6" name="Targets" width="content" height="content" y="100">

View File

@ -12,6 +12,7 @@
<AutoVariable width="fill" target="esp.show.teammates" label="Teammate ESP"/>
<AutoVariable width="fill" target="esp.show.local" label="ESP on local player" tooltip="Toggles ESP on self."/>
<AutoVariable width="fill" target="esp.show.buildings" label="Building ESP"/>
<AutoVariable width="fill" target="esp.show.team-buildings" label="Teammate Building ESP"/>
<AutoVariable width="fill" target="esp.item.health" label="Health packs"/>
<AutoVariable width="fill" target="esp.item.ammo" label="Ammo packs"/>
<AutoVariable width="fill" target="esp.item.enable" label="Enable item ESP"/>
@ -22,6 +23,7 @@
<AutoVariable width="fill" target="esp.item.money-red" label="MvM red money" tooltip="Red money is automatically collected."/>
<AutoVariable width="fill" target="esp.item.powerup" label="Mannpower powerups"/>
<AutoVariable width="fill" target="esp.item.spellbook" label="Spellbooks"/>
<AutoVariable width="fill" target="esp.item.objectives" label="Objectives" tooltip="Intel, carts and mvm bombs"/>
<AutoVariable width="fill" target="esp.item.explosive" label="Explosives" tooltip="Environmental hazards like bombs"/>
<AutoVariable width="fill" target="esp.item.crumpkin" label="Crumpkin" tooltip="Ammo box that also gives crits"/>
<AutoVariable width="fill" target="esp.item.gargoyle" label="Gargoyle" tooltip="Soul gargoyle pickup on halloween maps"/>
@ -102,6 +104,7 @@
<Option name="Vertical" value="3"/>
</Select>
</LabeledObject>
<AutoVariable width="fill" target="esp.hide-invis" label="Hide invisible"/>
</List>
</Box>
<Box padding="12 6 6 6" width="content" height="content" name="Strings" x="340">

View File

@ -26,6 +26,7 @@
<AutoVariable width="fill" target="radar.show.health" label="Health packs"/>
<AutoVariable width="fill" target="radar.show.teammates" label="Teammates"/>
<AutoVariable width="fill" target="radar.show.team.buildings" label="Team buildings"/>
<AutoVariable width="fill" target="radar.hide-invis" label="Hide invisible"/>
</List>
</Box>
</Tab>

View File

@ -1,4 +1,4 @@
/*
/*
* entity.h
*
* Created on: Oct 6, 2016
@ -47,11 +47,11 @@ public:
offset_t iHealth;
// sentry
offset_t m_iAmmoShells; // sentry shells
offset_t m_iAmmoRockets; // use only with if (GetLevel() == 3)
offset_t m_iSentryState; // sentry state
offset_t m_iAmmoShells; // sentry shells
offset_t m_iAmmoRockets; // use only with if (GetLevel() == 3)
offset_t m_iSentryState; // sentry state
offset_t m_bPlayerControlled; // controlled via wrangler and sort
offset_t m_bDisabled; // this should be sentry only, not sure
offset_t m_bDisabled; // this should be sentry only, not sure
// dispenser
offset_t m_iAmmoMetal; // dispenser metal reserve
@ -101,7 +101,6 @@ public:
offset_t iHitboxSet;
offset_t vVelocity;
offset_t bGlowEnabled;
offset_t movetype;
offset_t iGlowIndex;
offset_t iReloadMode;
offset_t res_iMaxHealth;
@ -207,6 +206,7 @@ public:
offset_t m_iPlayerIndex;
offset_t m_hTargetPlayer;
offset_t m_flResetTime;
};
extern NetVars netvar;

View File

@ -20,6 +20,8 @@ enum k_EItemType
ITEM_HEALTH_SMALL,
ITEM_HEALTH_MEDIUM,
ITEM_HEALTH_LARGE,
EDIBLE_MEDIUM,
EDIBLE_SMALL,
ITEM_AMMO_SMALL,
ITEM_AMMO_MEDIUM,
@ -51,6 +53,16 @@ enum k_EItemType
BOMB_WOODENBARREL,
BOMB_WALKEREXPLODE,
FLAG_ATOMBOMB,
FLAG_SKULLPICKUP,
FLAG_GIBBUCKET,
FLAG_BOTTLEPICKUP,
FLAG_AUSSIECONTAINER,
FLAG_TICKETCASE,
CART_BOMBCART,
CART_BOMBCART_RED,
ITEM_TF2C_PILL,
ITEM_TF2C_CRITS,

View File

@ -21,7 +21,6 @@ void NetVars::Init()
this->hMyWeapons = gNetvars.get_offset("DT_BaseCombatCharacter", "m_hMyWeapons");
this->iHitboxSet = gNetvars.get_offset("DT_BaseAnimating", "m_nHitboxSet");
this->vVelocity = gNetvars.get_offset("DT_BasePlayer", "localdata", "m_vecVelocity[0]");
this->movetype = gNetvars.get_offset("DT_BaseEntity", "movetype");
this->m_iAmmo = gNetvars.get_offset("DT_BasePlayer", "localdata", "m_iAmmo");
this->m_iPrimaryAmmoType = gNetvars.get_offset("DT_BaseCombatWeapon", "LocalWeaponData", "m_iPrimaryAmmoType");
this->m_iSecondaryAmmoType = gNetvars.get_offset("DT_BaseCombatWeapon", "LocalWeaponData", "m_iSecondaryAmmoType");
@ -154,6 +153,9 @@ void NetVars::Init()
// Gargoyle
this->m_hTargetPlayer = gNetvars.get_offset("DT_CHalloweenGiftPickup", "m_hTargetPlayer");
// Flag
this->m_flResetTime = gNetvars.get_offset("DT_CaptureFlag", "m_flResetTime");
}
IF_GAME(IsTF2C())
{

View File

@ -35,10 +35,12 @@ static settings::Int sightlines{ "esp.sightlines", "0" };
static settings::Int esp_text_position{ "esp.text-position", "0" };
static settings::Int esp_expand{ "esp.expand", "0" };
static settings::Boolean vischeck{ "esp.vischeck", "true" };
static settings::Boolean hide_invis{ "esp.hide-invis", "false" };
static settings::Boolean legit{ "esp.legit", "false" };
static settings::Boolean local_esp{ "esp.show.local", "true" };
static settings::Boolean buildings{ "esp.show.buildings", "true" };
static settings::Boolean team_buildings{ "esp.show.team-buildings", "false" };
static settings::Boolean teammates{ "esp.show.teammates", "true" };
static settings::Boolean npc{ "esp.show.npc", "true" };
@ -63,6 +65,7 @@ static settings::Boolean item_spellbooks{ "esp.item.spellbook", "true" };
static settings::Boolean item_explosive{ "esp.item.explosive", "true" };
static settings::Boolean item_crumpkin{ "esp.item.crumpkin", "true" };
static settings::Boolean item_gargoyle{ "esp.item.gargoyle", "true" };
static settings::Boolean item_objectives{ "esp.item.objectives", "false" };
// TF2C
static settings::Boolean item_weapon_spawners{ "esp.item.weapon-spawner", "true" };
static settings::Boolean item_adrenaline{ "esp.item.adrenaline", "true" };
@ -258,15 +261,26 @@ const std::string slowed_str = "*Slow*";
const std::string zooming_str = "*Zoom*";
const std::string crit_str = "*Crits*";
const std::string blast_p_str = "*Blast Passive*";
const std::string blast_a_str = "*Blast Vaccinator*";
const std::string blast_a_str = "*Blast-Resist*";
const std::string fire_p_str = "*Fire Passive*";
const std::string fire_a_str = "*Fire Vaccinator*";
const std::string fire_a_str = "*Fire-Resist*";
const std::string bullet_p_str = "*Bullet Passive*";
const std::string bullet_a_str = "*Bullet Vaccinator*";
const std::string bullet_a_str = "*Bullet-Resist*";
const std::string invulnerable_str = "*Invulnerable*";
const std::string ready_ringer_str = "*Dead Ringer Out*";
const std::string cloaked_str = "*Cloak*";
const std::string in_ringer_str = "*Dead Ringer*";
const std::string disguised_str = "*Disguise*";
const std::string intel_str = "Intel";
const std::string atombomb_str = "Atom Bomb";
const std::string soulpickup_str = "Soul Pickup";
const std::string bodyparts_str = "Body Parts";
const std::string beerbottle_str = "Beer Bottle";
const std::string aussiecontainer_str = "Australium Container";
const std::string ticketcase_str = "Tickets";
const std::string mediumhealth_str = "Medium Health";
const std::string smallhealth_str = "Small Health";
const std::string cart_str = "Cart";
const std::string botname_str = "Bot #";
const std::string tp_ready_str = "Ready";
const std::string sapped_str = "*Sapped*";
@ -658,7 +672,7 @@ void _FASTCALL ProcessEntityPT(CachedEntity *ent)
Draw3DBox(ent, fg);
break;
case ENTITY_BUILDING:
if (CE_INT(ent, netvar.iTeamNum) == g_pLocalPlayer->team && !teammates)
if (CE_INT(ent, netvar.iTeamNum) == g_pLocalPlayer->team && !team_buildings)
break;
if (!fg)
fg = colors::EntityF(ent);
@ -1197,7 +1211,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
}
}
// Explosive/Environmental hazard esp
else if (item_explosive && (classid == CL_CLASS(CTFPumpkinBomb) || itemtype == BOMB_BALLOONBOMB || itemtype == BOMB_WOODENBARREL || itemtype == BOMB_WALKEREXPLODE))
else if (item_explosive && (classid == CL_CLASS(CTFPumpkinBomb) || itemtype >= BOMB_BALLOONBOMB && itemtype <= BOMB_WALKEREXPLODE))
{
if (classid == CL_CLASS(CTFPumpkinBomb))
AddEntityString(ent, pumpkinbomb_str, colors::FromRGBA8(255, 162, 0, 255));
@ -1217,21 +1231,75 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
}
}
}
if (item_objectives && (classid == CL_CLASS(CCaptureFlag) || itemtype >= FLAG_ATOMBOMB && itemtype <= CART_BOMBCART_RED))
{
rgba_t color = ent->m_iTeam() == TEAM_BLU ? colors::blu : (ent->m_iTeam() == TEAM_RED ? colors::red : colors::white);
switch (itemtype)
{
case FLAG_ATOMBOMB:
AddEntityString(ent, atombomb_str, color);
break;
case FLAG_SKULLPICKUP:
AddEntityString(ent, soulpickup_str, color);
break;
case FLAG_GIBBUCKET:
AddEntityString(ent, bodyparts_str, color);
break;
case FLAG_BOTTLEPICKUP:
AddEntityString(ent, beerbottle_str, color);
break;
case FLAG_AUSSIECONTAINER:
AddEntityString(ent, aussiecontainer_str, color);
break;
case FLAG_TICKETCASE:
AddEntityString(ent, ticketcase_str, color);
break;
case CART_BOMBCART:
AddEntityString(ent, cart_str, colors::blu);
break;
case CART_BOMBCART_RED:
AddEntityString(ent, cart_str, colors::red);
break;
default:
AddEntityString(ent, intel_str, color);
break;
}
auto resettime = CE_FLOAT(ent, netvar.m_flResetTime);
std::string time = std::to_string(int(resettime - g_GlobalVars->curtime));
time.append("s");
if (resettime && classid == CL_CLASS(CCaptureFlag))
AddEntityString(ent, time, colors::FromRGBA8(98, 163, 213, 255));
}
// Other item esp
else if (itemtype != ITEM_NONE)
{
// Health pack esp
if (item_health_packs && (itemtype >= ITEM_HEALTH_SMALL && itemtype <= ITEM_HEALTH_LARGE || itemtype == ITEM_HL_BATTERY))
if (item_health_packs && (itemtype >= ITEM_HEALTH_SMALL && itemtype <= EDIBLE_MEDIUM || itemtype == ITEM_HL_BATTERY))
{
if (itemtype == ITEM_HEALTH_SMALL)
switch (itemtype)
{
case ITEM_HEALTH_SMALL:
AddEntityString(ent, health_small_str);
if (itemtype == ITEM_HEALTH_MEDIUM)
break;
case ITEM_HEALTH_MEDIUM:
AddEntityString(ent, health_medium_str);
if (itemtype == ITEM_HEALTH_LARGE)
break;
case ITEM_HEALTH_LARGE:
AddEntityString(ent, health_big_str);
if (itemtype == ITEM_HL_BATTERY)
break;
case ITEM_HL_BATTERY:
AddEntityString(ent, hl_battery_str);
break;
case EDIBLE_MEDIUM:
AddEntityString(ent, mediumhealth_str, colors::green);
break;
case EDIBLE_SMALL:
AddEntityString(ent, smallhealth_str, colors::green);
break;
}
// TF2C Adrenaline esp
}
else if (item_adrenaline && itemtype == ITEM_TF2C_PILL)
@ -1242,13 +1310,18 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
}
else if (item_ammo_packs && itemtype >= ITEM_AMMO_SMALL && itemtype <= ITEM_AMMO_LARGE)
{
if (itemtype == ITEM_AMMO_SMALL)
switch (itemtype)
{
case ITEM_AMMO_SMALL:
AddEntityString(ent, ammo_small_str);
if (itemtype == ITEM_AMMO_MEDIUM)
break;
case ITEM_AMMO_MEDIUM:
AddEntityString(ent, ammo_medium_str);
if (itemtype == ITEM_AMMO_LARGE)
break;
case ITEM_AMMO_LARGE:
AddEntityString(ent, ammo_big_str);
break;
}
// Powerup esp
}
else if (item_powerups && itemtype >= ITEM_POWERUP_FIRST && itemtype <= ITEM_POWERUP_LAST)
@ -1302,7 +1375,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
{
// Check if enemy building
if (!ent->m_bEnemy() && !teammates)
if (!ent->m_bEnemy() && !team_buildings)
return;
// TODO maybe...
@ -1318,6 +1391,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
const std::string &name = (classid == CL_CLASS(CObjectTeleporter) ? teleporter_str : (classid == CL_CLASS(CObjectSentrygun) ? sentry_str : dispenser_str));
int level = CE_INT(ent, netvar.iUpgradeLevel);
bool IsMini = CE_BYTE(ent, netvar.m_bMiniBuilding);
if (!IsMini)
AddEntityString(ent, format("Level ", level, ' ', name));
else
@ -1384,7 +1458,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
{
float next_teleport = CE_FLOAT(ent, netvar.m_flTeleRechargeTime);
float yaw_to_exit = CE_FLOAT(ent, netvar.m_flTeleYawToExit);
std::string time = std::to_string((int) floor((next_teleport - g_GlobalVars->curtime) * 100) / 100);
std::string time = std::to_string(int(next_teleport - g_GlobalVars->curtime));
time.append("s");
if (yaw_to_exit)
@ -1417,6 +1491,8 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
// Local player handling
if (!(local_esp && g_IInput->CAM_IsThirdPerson()) && ent->m_IDX == g_IEngine->GetLocalPlayer())
return;
if (hide_invis && IsPlayerInvisible(ent))
return;
// Get player class
int pclass = CE_INT(ent, netvar.iClass);
@ -1499,14 +1575,14 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
CachedEntity *weapon = ENTITY(eid);
if (!CE_INVALID(weapon) && weapon->m_iClassID() == CL_CLASS(CWeaponMedigun) && weapon)
{
std::string charge = std::to_string((int) floor(CE_FLOAT(weapon, netvar.m_flChargeLevel) * 100));
std::string charge = std::to_string(int(CE_FLOAT(weapon, netvar.m_flChargeLevel) * 100));
if (CE_INT(weapon, netvar.iItemDefinitionIndex) != 998)
{
AddEntityString(ent, charge + "% Uber", colors::Health(floor(CE_FLOAT(weapon, netvar.m_flChargeLevel) * 100), 100));
AddEntityString(ent, charge + "% Uber", colors::Health(CE_FLOAT(weapon, netvar.m_flChargeLevel) * 100, 100));
}
else
AddEntityString(ent, charge + "% Uber | Charges: " + std::to_string(floor(CE_FLOAT(weapon, netvar.m_flChargeLevel) / 0.25f)), colors::Health((CE_FLOAT(weapon, netvar.m_flChargeLevel) * 100), 100));
AddEntityString(ent, charge + "% Uber | Charges: " + std::to_string(int(CE_FLOAT(weapon, netvar.m_flChargeLevel) / 0.25f)), colors::Health((CE_FLOAT(weapon, netvar.m_flChargeLevel) * 100), 100));
break;
}
}
@ -1533,6 +1609,8 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
}
if (CE_BYTE(ent, netvar.m_bFeignDeathReady))
AddEntityString(ent, ready_ringer_str, colors::FromRGBA8(178.0f, 0.0f, 255.0f, 255.0f));
if (HasCondition<TFCond_Disguised>(ent))
AddEntityString(ent, disguised_str, colors::FromRGBA8(220, 220, 220, 255));
// Uber/Bonk
if (IsPlayerInvulnerable(ent))
AddEntityString(ent, invulnerable_str);

View File

@ -207,17 +207,21 @@ void CreateMove()
if (anti_afk)
updateAntiAfk();
// Automaticly airstrafes in the air
if (auto_strafe)
// Automatically strafes in the air
if (auto_strafe && CE_GOOD(LOCAL_E) && !g_pLocalPlayer->life_state)
{
auto ground = (bool) (CE_INT(g_pLocalPlayer->entity, netvar.iFlags) & FL_ONGROUND);
if (!ground)
static bool was_jumping = false;
auto flags = CE_INT(LOCAL_E, netvar.iFlags);
bool is_jumping = current_user_cmd->buttons & IN_JUMP;
if (!(flags & FL_ONGROUND) && !(flags & FL_INWATER) && (!is_jumping || was_jumping))
{
if (current_user_cmd->mousedx)
{
current_user_cmd->sidemove = current_user_cmd->mousedx > 1 ? 450.f : -450.f;
}
}
was_jumping = is_jumping;
}
// TF2c Tauntslide
@ -372,19 +376,22 @@ void Draw()
if (!CE_BAD(ent) && ent != LOCAL_E && ent->m_Type() == ENTITY_PLAYER && (CE_INT(ent, netvar.hObserverTarget) & 0xFFF) == LOCAL_E->m_IDX && CE_INT(ent, netvar.iObserverMode) >= 4 && g_IEngine->GetPlayerInfo(i, &info))
{
auto observermode = "N/A";
rgba_t color = colors::green;
switch (CE_INT(ent, netvar.iObserverMode))
{
case 4:
observermode = "Firstperson";
observermode = "1st Person";
color = colors::red_b;
break;
case 5:
observermode = "Thirdperson";
observermode = "3rd Person";
break;
case 7:
observermode = "Freecam";
break;
}
AddSideString(format(info.name, " ", observermode));
AddSideString(format(info.name, " - (", observermode, ")"), color);
}
}
}

View File

@ -28,6 +28,7 @@ static settings::Boolean show_teammates{ "radar.show.teammates", "true" };
static settings::Boolean show_teambuildings{ "radar.show.team.buildings", "true" };
static settings::Boolean show_healthpacks{ "radar.show.health", "true" };
static settings::Boolean show_ammopacks{ "radar.show.ammo", "true" };
static settings::Boolean hide_invis{ "radar.hide-invis", "false" };
static Timer invalid{};
@ -105,8 +106,10 @@ void DrawEntity(int x, int y, CachedEntity *ent)
{
if (ent->m_Type() == ENTITY_PLAYER)
{
if (CE_BYTE(ent, netvar.iLifeState))
if (ent->m_bAlivePlayer())
return; // DEAD. not big surprise.
if (hide_invis && IsPlayerInvisible(ent))
return;
const int &clazz = CE_INT(ent, netvar.iClass);
const int &team = CE_INT(ent, netvar.iTeamNum);
idx = team - 2;

View File

@ -24,6 +24,14 @@ ItemManager::ItemManager() : mapper()
RegisterModelMapping("models/items/medkit_large_bday.mdl", ITEM_HEALTH_LARGE);
// Medieval
RegisterModelMapping("models/props_medieval/medieval_meat.mdl", ITEM_HEALTH_MEDIUM);
// Edibles / Lunchboxes
RegisterModelMapping("models/items/plate.mdl", EDIBLE_MEDIUM);
RegisterModelMapping("models/items/plate_sandwich_xmas.mdl", EDIBLE_MEDIUM);
RegisterModelMapping("models/items/plate_robo_sandwich.mdl", EDIBLE_MEDIUM);
RegisterModelMapping("models/workshop/weapons/c_models/c_fishcake/plate_fishcake.mdl", EDIBLE_SMALL);
RegisterModelMapping("models/workshop/weapons/c_models/c_buffalo_steak/plate_buffalo_steak.mdl", EDIBLE_SMALL);
RegisterModelMapping("models/workshop/weapons/c_models/c_chocolate/plate_chocolate.mdl", EDIBLE_SMALL);
RegisterModelMapping("models/items/banana/plate_banana.mdl", EDIBLE_SMALL);
// == AMMOPACKS
// Normal
@ -70,8 +78,10 @@ ItemManager::ItemManager() : mapper()
// Spellbooks
RegisterModelMapping("models/props_halloween/hwn_spellbook_upright.mdl", ITEM_SPELL);
RegisterModelMapping("models/items/crystal_ball_pickup.mdl", ITEM_SPELL);
RegisterModelMapping("models/props_monster_mash/flask_vial_green.mdl", ITEM_SPELL);
RegisterModelMapping("models/props_halloween/hwn_spellbook_upright_major.mdl", ITEM_SPELL_RARE);
RegisterModelMapping("models/items/crystal_ball_pickup_major.mdl", ITEM_SPELL_RARE);
RegisterModelMapping("models/props_monster_mash/flask_vial_purple.mdl", ITEM_SPELL_RARE);
// == GHOSTS
RegisterModelMapping("models/props_halloween/ghost.mdl", HALLOWEEN_GHOST);
@ -83,6 +93,24 @@ ItemManager::ItemManager() : mapper()
RegisterModelMapping("models/props_coast/wooden_barrel.mdl", BOMB_WOODENBARREL);
RegisterModelMapping("models/props_invasion/props_alien/walker_explode.mdl", BOMB_WALKEREXPLODE);
// == FLAGS
RegisterModelMapping("models/props_td/atom_bomb.mdl", FLAG_ATOMBOMB);
RegisterModelMapping("models/props_pirate/pd_skull_pickup.mdl", FLAG_SKULLPICKUP);
RegisterModelMapping("models/effects/playersoul.mdl", FLAG_SKULLPICKUP);
RegisterModelMapping("models/props_monster_mash/gib_bucket.mdl", FLAG_GIBBUCKET);
RegisterModelMapping("models/props_watergate/bottle_pickup.mdl", FLAG_BOTTLEPICKUP);
RegisterModelMapping("models/props_doomsday/australium_container.mdl", FLAG_AUSSIECONTAINER);
RegisterModelMapping("models/flag/ticket_case.mdl", FLAG_TICKETCASE);
// == BOMB CARTS
RegisterModelMapping("models/props_trainyard/bomb_cart.mdl", CART_BOMBCART);
RegisterModelMapping("models/custom/dirty_bomb_cart.mdl", CART_BOMBCART);
RegisterModelMapping("models/lilchewchew/lilchewchew_v3.mdl", CART_BOMBCART);
RegisterModelMapping("models/props_trainyard/bomb_redmond.mdl", CART_BOMBCART);
RegisterModelMapping("models/props_snowycoast/gasoline_bomb_cart.mdl", CART_BOMBCART);
RegisterModelMapping("models/props_trainyard/bomb_blutarch.mdl", CART_BOMBCART_RED);
RegisterModelMapping("models/props_trainyard/bomb_cart_red.mdl", CART_BOMBCART_RED);
RegisterSpecialMapping([](CachedEntity *ent) -> bool { return ent->m_iClassID() == CL_CLASS(CTFAmmoPack) && g_ItemManager.mapper.GetItemType(ent) != ITEM_CRUMPKIN; }, ITEM_AMMO_MEDIUM);
RegisterModelMapping("models/items/medkit_overheal.mdl", ITEM_TF2C_PILL);