Convertible Structure

  • Thread starter Thread starter Lersubem
  • Start date Start date
L

Lersubem

Guest
Hello everyone,

I am creating a structure, and here is the code

Imports System.Text.RegularExpressions
Namespace Steamworks
Public Structure SteamID : Implements IDisposable

Shared ReadOnly TypeChrs As String = "IUMGAPCgTLca"
Shared ReadOnly Steam2Regex As Regex = New Regex("STEAM_(?<Universe>[0-4]):(?<AuthServer>[0-1]):(?<AuthID>[1-9][0-9]{0,9}$|^2147483647)", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
Shared ReadOnly Steam3Regex As Regex = New Regex("(?<Type>[IUMGAPCgTLca]):(?<Universe>[0-4]):(?<ID>[1-9][0-9]{0,9})(?::(?<Instance>[0-9]{1,10}))?", RegexOptions.Compiled)

#Region "Properties"
Public Property TypeChr As Char
Public Property AuthID As UInteger
Public Property AuthServer As Boolean
Public Property Instance As UInteger
Public Property Universe As EAccountUniverse
Public Property Type As EAccountType
Get
Return TypeChrToEnum(Me.TypeChr)
End Get
Set(value As EAccountType)
Me.TypeChr = EnumToTypeChr(value, 1)
End Set
End Property
#End Region
#Region "Main"
Public Sub New(ByVal Value As String) 'SteamID2 SteamID3 SteamID64
If Steam2Regex.IsMatch(Value) Then
Dim Match = Steam2Regex.Match(Value)
Me.Universe = CType(Match.Groups("Universe").Value, Integer)
Me.AuthServer = CType(Match.Groups("AuthServer").Value, Integer)
Me.AuthID = CType(Match.Groups("AuthID").Value, Integer)
Me.TypeChr = "U"
Me.Instance = 1
ElseIf Steam3Regex.IsMatch(Value) Then
Dim Match = Steam3Regex.Match(Value)
Me.TypeChr = Match.Groups("Type").Value
Me.Universe = CType(Match.Groups("Universe").Value, Integer)
Me.AuthID = CType(Match.Groups("ID").Value, Integer) / 2
If Not String.IsNullOrWhiteSpace(Match.Groups("Instance").Value) Then Me.Instance = CType(Match.Groups("Instance").Value, Integer)

Select Case Me.TypeChr
Case "c"
Me.Instance = CUInt((CType(Instance, EChatInstanceFlag) Or EChatInstanceFlag.Clan))
Case "L"
Instance = CUInt((CType(Instance, EChatInstanceFlag) Or EChatInstanceFlag.Lobby))
Case Else
Instance = 1
End Select
ElseIf Regex.IsMatch(Value, "^[0-9 ]+$") AndAlso Value >= 76561197960265728 Then
Dim Hex = Kit.Utilities.DataConverter.DecimalToHexadecimal(Value, 16)
Select Case Hex.Last
Case "1", "3", "5", "7", "9", "B", "D", "F"
Me.AuthServer = True
Case Else
Me.AuthServer = False
End Select
Me.AuthID = (Kit.Utilities.DataConverter.HexadecimalToDecimal(Hex.Remove(0, 8)) - Me.AuthServer) / 2
Me.Instance = Kit.Utilities.DataConverter.HexadecimalToDecimal(Hex.Remove(0, 3).Remove(5))
Me.Type = Kit.Utilities.DataConverter.HexadecimalToDecimal(Hex.Remove(0, 2).Remove(1))
Me.Universe = Kit.Utilities.DataConverter.HexadecimalToDecimal(Hex.Remove(2))
Else
Me.Dispose()
End If
End Sub

Public Shadows Sub Dispose() Implements IDisposable.Dispose
Me.Finalize()
End Sub
#End Region
#Region "Methods"
Public Shadows Function ToString() As String
Return Me.ToSteamID64
End Function
Public Function ToSteamID2() As String
If Me.AuthID < 1 OrElse Me.Universe < 0 OrElse Not Me.Type = EAccountType.Individual Then Return Nothing

Dim UniverseDigit = If((Universe <= EAccountUniverse.[Public]), "0", [Enum].Format(GetType(EAccountUniverse), Me.Universe, "D"))
Return $"STEAM_{CInt(UniverseDigit)}:{If(Me.AuthServer, "1", "0")}:{Me.AuthID}"
End Function
Public Function ToSteamID32() As UInteger
If Me.AuthID < 1 Then Return Nothing

Return Me.AuthID * 2 + Me.AuthServer
End Function
Public Function ToSteamID3() As String
If Me.AuthID < 1 OrElse Me.Universe < 0 Then Return Nothing

Dim renderInstance As Boolean = False
Select Case Type
Case EAccountType.AnonGameServer, EAccountType.Multiseat
renderInstance = True
Case EAccountType.Individual
renderInstance = (Instance <> EInstanceType.Desktop)
Case EAccountType.Invalid, EAccountType.Unknown
Return Nothing
End Select

Dim UniverseDigit = If((Me.Universe <= EAccountUniverse.[Public]), "1", [Enum].Format(GetType(EAccountUniverse), Me.Universe, "D"))

Return $"[{Me.TypeChr}:{CUInt(UniverseDigit)}:{Me.AuthID * 2 + Me.AuthServer }" & If(renderInstance, $":{Me.Instance}", "") & "]"
End Function
Public Function ToSteamID64() As ULong
If Me.AuthID < 1 OrElse Me.Type <= 0 OrElse Me.Universe < 0 Then Return Nothing

Dim Hex As String = ""
If Type = EAccountType.Individual AndAlso Me.Universe = EAccountUniverse.Individual Then
Hex &= Kit.Utilities.DataConverter.DecimalToHexadecimal(EAccountUniverse.Public, 2)
Else
Hex &= Kit.Utilities.DataConverter.DecimalToHexadecimal(Me.Universe, 2)
End If
Hex = Hex.Insert(Hex.Length, Kit.Utilities.DataConverter.DecimalToHexadecimal(Me.Type, 1))
Hex = Hex.Insert(Hex.Length, Kit.Utilities.DataConverter.DecimalToHexadecimal(Me.Instance, 5))
Hex = Hex.Insert(Hex.Length, Kit.Utilities.DataConverter.DecimalToHexadecimal(Me.AuthID * 2 + Me.AuthServer, 8))
Return Kit.Utilities.DataConverter.HexadecimalToDecimal(Hex)
End Function
#End Region

End Structure
End Namespace

When i check

If not SteamID "=" or "is" Nothing Then
Return ProfileResponse
End If

It gives me an error that the operator "=","is" is not defined

and when i set a variable like the following

Dim Test As New SteamID
If Test = 4124125125236411231231 Then
'do something
End If

It also return an error.

So my question is, how can i check if my structure equals a ULong, UInteger or string with just the operator "=", and how can i check if it's nothing.


Thanks in advance

Continue reading...
 
Back
Top