mirror of
https://github.com/BeyondDimension/SteamTools.git
synced 2026-10-18 14:41:26 +08:00
798355e342
新增反代脚本只对Steam内置浏览器生效的选项
250 lines
7.0 KiB
C#
250 lines
7.0 KiB
C#
using System;
|
|
|
|
namespace Steam4NET
|
|
{
|
|
public class CSteamID
|
|
{
|
|
private InteropHelp.BitVector64 steamid;
|
|
|
|
public CSteamID()
|
|
: this( 0 )
|
|
{
|
|
}
|
|
|
|
public CSteamID( UInt32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
|
|
: this()
|
|
{
|
|
Set( unAccountID, eUniverse, eAccountType );
|
|
}
|
|
|
|
public CSteamID( UInt32 unAccountID, UInt32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
|
|
: this()
|
|
{
|
|
InstancedSet( unAccountID, unInstance, eUniverse, eAccountType );
|
|
}
|
|
|
|
public CSteamID( UInt64 id )
|
|
{
|
|
this.steamid = new InteropHelp.BitVector64( id );
|
|
}
|
|
|
|
public CSteamID(SteamID_t sid)
|
|
: this(sid.low32Bits, sid.high32Bits & 0xFFFFF, (EUniverse)(sid.high32Bits >> 24), (EAccountType)((sid.high32Bits >> 20) & 0xF))
|
|
{
|
|
}
|
|
|
|
public static implicit operator UInt64( CSteamID sid )
|
|
{
|
|
return sid.steamid.Data;
|
|
}
|
|
|
|
public static implicit operator CSteamID( UInt64 id )
|
|
{
|
|
return new CSteamID( id );
|
|
}
|
|
|
|
public static implicit operator CSteamID(SteamID_t sid)
|
|
{
|
|
return new CSteamID(sid);
|
|
}
|
|
|
|
public void Set( UInt32 unAccountID, EUniverse eUniverse, EAccountType eAccountType )
|
|
{
|
|
this.AccountID = unAccountID;
|
|
this.AccountUniverse = eUniverse;
|
|
this.AccountType = eAccountType;
|
|
|
|
if ( eAccountType == EAccountType.k_EAccountTypeClan )
|
|
{
|
|
this.AccountInstance = 0;
|
|
}
|
|
else
|
|
{
|
|
this.AccountInstance = 1;
|
|
}
|
|
}
|
|
|
|
public void InstancedSet( UInt32 unAccountID, UInt32 unInstance, EUniverse eUniverse, EAccountType eAccountType )
|
|
{
|
|
this.AccountID = unAccountID;
|
|
this.AccountUniverse = eUniverse;
|
|
this.AccountType = eAccountType;
|
|
this.AccountInstance = unInstance;
|
|
}
|
|
|
|
public void SetFromUint64( UInt64 ulSteamID )
|
|
{
|
|
this.steamid.Data = ulSteamID;
|
|
}
|
|
|
|
public UInt64 ConvertToUint64()
|
|
{
|
|
return this.steamid.Data;
|
|
}
|
|
|
|
public bool BBlankAnonAccount()
|
|
{
|
|
return this.AccountID == 0 && BAnonAccount() && this.AccountInstance == 0;
|
|
}
|
|
public bool BGameServerAccount()
|
|
{
|
|
return this.AccountType == EAccountType.k_EAccountTypeGameServer || this.AccountType == EAccountType.k_EAccountTypeAnonGameServer;
|
|
}
|
|
public bool BContentServerAccount()
|
|
{
|
|
return this.AccountType == EAccountType.k_EAccountTypeContentServer;
|
|
}
|
|
public bool BClanAccount()
|
|
{
|
|
return this.AccountType == EAccountType.k_EAccountTypeClan;
|
|
}
|
|
public bool BChatAccount()
|
|
{
|
|
return this.AccountType == EAccountType.k_EAccountTypeChat;
|
|
}
|
|
public bool IsLobby()
|
|
{
|
|
return ( this.AccountType == EAccountType.k_EAccountTypeChat ) && ( ( this.AccountInstance & ( 0x000FFFFF + 1 ) >> 2 ) != 0 );
|
|
}
|
|
public bool BAnonAccount()
|
|
{
|
|
return this.AccountType == EAccountType.k_EAccountTypeAnonUser || this.AccountType == EAccountType.k_EAccountTypeAnonGameServer;
|
|
}
|
|
public bool BAnonUserAccount()
|
|
{
|
|
return this.AccountType == EAccountType.k_EAccountTypeAnonUser;
|
|
}
|
|
|
|
public bool IsValid()
|
|
{
|
|
if ( this.AccountType <= EAccountType.k_EAccountTypeInvalid || this.AccountType >= EAccountType.k_EAccountTypeMax )
|
|
return false;
|
|
|
|
if ( this.AccountUniverse <= EUniverse.k_EUniverseInvalid || this.AccountUniverse >= EUniverse.k_EUniverseMax )
|
|
return false;
|
|
|
|
if ( this.AccountType == EAccountType.k_EAccountTypeIndividual )
|
|
{
|
|
if ( this.AccountID == 0 || this.AccountInstance != 1 )
|
|
return false;
|
|
}
|
|
|
|
if ( this.AccountType == EAccountType.k_EAccountTypeClan )
|
|
{
|
|
if ( this.AccountID == 0 || this.AccountInstance != 0 )
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public UInt32 AccountID
|
|
{
|
|
get
|
|
{
|
|
return ( UInt32 )steamid[ 0, 0xFFFFFFFF ];
|
|
}
|
|
set
|
|
{
|
|
steamid[ 0, 0xFFFFFFFF ] = value;
|
|
}
|
|
}
|
|
|
|
public UInt32 AccountInstance
|
|
{
|
|
get
|
|
{
|
|
return ( UInt32 )steamid[ 32, 0xFFFFF ];
|
|
}
|
|
set
|
|
{
|
|
steamid[ 32, 0xFFFFF ] = ( UInt64 )value;
|
|
}
|
|
}
|
|
|
|
public EAccountType AccountType
|
|
{
|
|
get
|
|
{
|
|
return ( EAccountType )steamid[ 52, 0xF ];
|
|
}
|
|
set
|
|
{
|
|
steamid[ 52, 0xF ] = ( UInt64 )value;
|
|
}
|
|
}
|
|
|
|
public EUniverse AccountUniverse
|
|
{
|
|
get
|
|
{
|
|
return ( EUniverse )steamid[ 56, 0xFF ];
|
|
}
|
|
set
|
|
{
|
|
steamid[ 56, 0xFF ] = ( UInt64 )value;
|
|
}
|
|
}
|
|
|
|
public string Render()
|
|
{
|
|
switch ( AccountType )
|
|
{
|
|
case EAccountType.k_EAccountTypeInvalid:
|
|
case EAccountType.k_EAccountTypeIndividual:
|
|
if ( AccountUniverse <= EUniverse.k_EUniversePublic )
|
|
return String.Format( "STEAM_0:{0}:{1}", AccountID & 1, AccountID >> 1 );
|
|
else
|
|
return String.Format( "STEAM_{2}:{0}:{1}", AccountID & 1, AccountID >> 1, ( int )AccountUniverse );
|
|
default:
|
|
return Convert.ToString( this );
|
|
}
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Render();
|
|
}
|
|
|
|
public override bool Equals( System.Object obj )
|
|
{
|
|
if ( obj == null )
|
|
return false;
|
|
|
|
if (!(obj is CSteamID sid))
|
|
return false;
|
|
|
|
return steamid.Data == sid.steamid.Data;
|
|
}
|
|
|
|
public bool Equals( CSteamID sid )
|
|
{
|
|
if ( ( object )sid == null )
|
|
return false;
|
|
|
|
return steamid.Data == sid.steamid.Data;
|
|
}
|
|
|
|
public static bool operator ==( CSteamID a, CSteamID b )
|
|
{
|
|
if ( System.Object.ReferenceEquals( a, b ) )
|
|
return true;
|
|
|
|
if ( ( ( object )a == null ) || ( ( object )b == null ) )
|
|
return false;
|
|
|
|
return a.steamid.Data == b.steamid.Data;
|
|
}
|
|
|
|
public static bool operator !=( CSteamID a, CSteamID b )
|
|
{
|
|
return !( a == b );
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return steamid.Data.GetHashCode();
|
|
}
|
|
|
|
}
|
|
} |