Files
rmbgame 798355e342 更新目录结构
新增反代脚本只对Steam内置浏览器生效的选项
2021-01-06 04:30:56 +08:00

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();
}
}
}