Raised This Month: $ Target: $400
 0% 

[:3] TF2_CTFWeaponInfo


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Wazz
SourceMod Donor
Join Date: Mar 2009
Old 08-30-2010 , 14:36   [:3] TF2_CTFWeaponInfo
Reply With Quote #1

Rawr moar stuff. This allows you to change weapon information that you would find in the ctx files.
PHP Code:
class CTFWeaponInfo :                                //  2884
    
public FileWeaponInfo_t                            // +0
{
public :
    
int m_nDamage;                                    // +1704
    
int m_nBulletsPerShot;                            // +1708
    
float m_fRange;                                    // +1712
    
float m_fSpread;                                // +1716
    
float m_fPunchAngle;                            // +1720
    
float m_fTimeFireDelay;                            // +1724
    
float m_fTimeIdle;                                // +1728
    
float m_fTimeIdleEmpty;                            // +1732
    
float m_fTimeReloadStart;                        // +1736
    
float m_fTimeReload;                            // +1740
    
bool m_bDrawCrosshair;                            // +1744
    
int m_nProjectileType;                            // +1748
    
int m_nAmmoPerShot;                                // +1752
    
float m_fProjectileSpeed;                        // +1756
    
float m_fSmackDelay;                            // +1760
    
bool m_bUseRapidFireCrits;                        // +1764
    
int m_nSecondary_Damage;                        // +1768
    
int m_nSecondary_BulletsPerShot;                // +1772
    
float m_fSecondary_Range;                        // +1776
    
float m_fSecondary_Spread;                        // +1780
    
float m_fSecondary_PunchAngle;                    // +1784
    
float m_fSecondary_TimeFireDelay;                // +1788
    
float m_fSecondary_TimeIdle;                    // +1792
    
float m_fSecondary_TimeIdleEmpty;                // +1796
    
float m_fSecondary_TimeReloadStart;                // +1800
    
float m_fSecondary_TimeReload;                    // +1804
    
bool m_bSecondary_DrawCrosshair;                // +1808
    
int m_nSecondary_ProjectileTyp;                    // +1812
    
int m_nSecondary_AmmoPerShot;                    // +1816
    
int m_nUnknown1;                                // +1820
    
float m_fSecondary_SmackDelay;                    // +1824
    
bool m_bSecondary_UseRapidFireCrits;            // +1828
    
int m_nWeaponType;                                // +1832
    
bool m_bGrenade;                                // +1836
    
float m_fDamageRadius;                            // +1840
    
float m_fPrimerTimer;                            // +1844
    
bool m_bLowerMainWeapon;                        // +1848
    
bool m_bPlayGrenTimer;                            // +1849
    
bool m_bHasTeamSkins;                            // +1850
    
bool m_bHasTeamSkins_Worldmodel;                // +1851
    
char m_achMuzzleFlashModel[128];                // +1852
    
float m_fMuzzleFlashModelDuration;                // +1980
    
char m_achMuzzleFlashParticleEffect[128];        // +1984
    
char m_achTracerEffect[128];                    // +2112
    
bool m_bDoInstantEjectBrass;                    // +2240
    
char m_achBrassModel[128];                        // +2241
    
char m_achExplosionSound[128];                    // +2369
    
char m_achExplosionEffect[128];                    // +2497
    
char m_achExplosionPlayerEffect[128];            // +2625
    
char m_achExplosionWaterEffect[128];            // +2753
    
bool m_bDontDrop;                                // +2881
};

typedef CUtlDictCTFWeaponInfo *, unsigned short WeaponDatabase;

WeaponDatabase *g_pWeaponInfoDatabase;

CON_COMMAND(wazz_weapon"Wazz Environment :: Weapon info hacks")
{
    if (
args.ArgC() == 1)
    {
        
META_CONPRINTF("Wazz Environment :: Weapon info hacks\n");
        return;
    }

    static 
bool bInit false;

    if (!
bInit)
    {
#ifdef _WIN32
        
void *addr;
        
int offset;
/*
            "ReadWeaponDataFromFileForSlot_SubCall_01"
            {
                "library"        "server"
                "windows"        "\x83\xEC\x08\x85\xF6\x74\x2A\x8D\x04\x24\x50\xB9"
            }
*/
        
if (!g_pGameConf->GetMemSig("ReadWeaponDataFromFileForSlot_SubCall_01", &addr) || !addr)
        {
            
META_CONPRINTF("NULL 1\n");
            return;
        }
/*
            "WeaponDatabase_Offset"
            {
                "windows"        "12"
            }
*/
        
if (!g_pGameConf->GetOffset("WeaponDatabase_Offset", &offset))
        {
            
META_CONPRINTF("NULL 2\n");
            return;
        }
        
        
g_pWeaponInfoDatabase = *(WeaponDatabase **)((uint32)addr offset);
#else
/*
            "m_WeaponInfoDatabase"
            {
                "library"        "server"
                "linux"            "@m_WeaponInfoDatabase"                
            }
*/
        
void *addr;
        if (!
g_pGameConf->GetMemSig("m_WeaponInfoDatabase", &addr) || !addr)
        {
            
META_CONPRINTF("NULL 1\n");
            return;
        }
        
        
g_pWeaponInfoDatabase = (WeaponDatabase *)addr;
#endif
        
        
META_CONPRINTF("Address: %p\n"g_pWeaponInfoDatabase);
        
META_CONPRINTF("Count: %i\n"g_pWeaponInfoDatabase->Count());

        
bInit true;
    }
    
    if (
args.ArgC() != 3)
    {
        
META_CONPRINTF("Wrong number of args u slag\n");

        return;
    }

    const 
char *pszName args.Arg(1);

    
int iIndex g_pWeaponInfoDatabase->Find(pszName);

    if (!
g_pWeaponInfoDatabase->IsValidIndex(iIndex))
    {
        
META_CONPRINTF("Invalid Name: %s\n"pszName);

        return;
    }

    
CTFWeaponInfo *pInfo g_pWeaponInfoDatabase->Element(iIndex);
    
    
pInfo->m_nProjectileType atoi(args.Arg(2));

    
META_CONPRINTF("Done\n");

    return;

The CONCOMMAND is just an example, if you were to use it and do wazz_weapons tf_weapon_minigun 2 you would have a minigun that shoots rockets. Changes are instant but this method effects all weapons of that type. To have a per-weapon setup you should detour `CTFWeaponBase::GetTFWpnData(void)const` and return your own instance of CTFWeaponInfo... I guess.

Edit: Include weapon_parse.h from the HL SDK for the FileWeaponInfo_t class.

Last edited by Wazz; 09-01-2010 at 12:14. Reason: zombie ghosts compelled me to
Wazz is offline
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 22:53.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode