Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
487 lines
16 KiB
Plaintext
487 lines
16 KiB
Plaintext
VERSION 5.00
|
|
Begin VB.Form frmRemoteServerDetails
|
|
BorderStyle = 3 'Fixed Dialog
|
|
Caption = "#"
|
|
ClientHeight = 4545
|
|
ClientLeft = 3195
|
|
ClientTop = 2400
|
|
ClientWidth = 7800
|
|
ClipControls = 0 'False
|
|
ControlBox = 0 'False
|
|
HasDC = 0 'False
|
|
Icon = "serverdt.frx":0000
|
|
MaxButton = 0 'False
|
|
MinButton = 0 'False
|
|
NegotiateMenus = 0 'False
|
|
ScaleHeight = 4545
|
|
ScaleWidth = 7800
|
|
ShowInTaskbar = 0 'False
|
|
Begin VB.CommandButton cmdCancel
|
|
Caption = "#"
|
|
Height = 375
|
|
Left = 5580
|
|
MaskColor = &H00000000&
|
|
TabIndex = 5
|
|
Top = 3930
|
|
Width = 1935
|
|
End
|
|
Begin VB.CommandButton cmdOK
|
|
Caption = "#"
|
|
Default = -1 'True
|
|
Enabled = 0 'False
|
|
Height = 375
|
|
Left = 3540
|
|
MaskColor = &H00000000&
|
|
TabIndex = 4
|
|
Top = 3930
|
|
Width = 1935
|
|
End
|
|
Begin VB.ComboBox cboNetworkProtocol
|
|
Height = 300
|
|
Left = 2400
|
|
Style = 2 'Dropdown List
|
|
TabIndex = 3
|
|
Top = 3165
|
|
Width = 5100
|
|
End
|
|
Begin VB.TextBox txtNetworkAddress
|
|
Height = 300
|
|
Left = 2400
|
|
MaxLength = 128
|
|
TabIndex = 1
|
|
Top = 2535
|
|
Width = 5100
|
|
End
|
|
Begin VB.Frame Frame1
|
|
Height = 555
|
|
Left = 225
|
|
TabIndex = 7
|
|
Top = 1395
|
|
Width = 7290
|
|
Begin VB.Label lblServerName
|
|
Alignment = 2 'Center
|
|
AutoSize = -1 'True
|
|
Caption = "#"
|
|
BeginProperty Font
|
|
Name = "MS Sans Serif"
|
|
Size = 8.25
|
|
Charset = 0
|
|
Weight = 700
|
|
Underline = 0 'False
|
|
Italic = 0 'False
|
|
Strikethrough = 0 'False
|
|
EndProperty
|
|
Height = 195
|
|
Left = 135
|
|
TabIndex = 8
|
|
Top = 240
|
|
Width = 7020
|
|
WordWrap = -1 'True
|
|
End
|
|
End
|
|
Begin VB.Label lblNetworkProtocol
|
|
AutoSize = -1 'True
|
|
Caption = "#"
|
|
Height = 195
|
|
Left = 210
|
|
TabIndex = 2
|
|
Top = 3165
|
|
Width = 2100
|
|
WordWrap = -1 'True
|
|
End
|
|
Begin VB.Label lblNetworkAddress
|
|
AutoSize = -1 'True
|
|
Caption = "#"
|
|
Height = 195
|
|
Left = 225
|
|
TabIndex = 0
|
|
Top = 2535
|
|
Width = 2100
|
|
WordWrap = -1 'True
|
|
End
|
|
Begin VB.Label lblRemoteServerDetails
|
|
AutoSize = -1 'True
|
|
Caption = "#"
|
|
BeginProperty Font
|
|
Name = "MS Sans Serif"
|
|
Size = 9.75
|
|
Charset = 0
|
|
Weight = 400
|
|
Underline = 0 'False
|
|
Italic = 0 'False
|
|
Strikethrough = 0 'False
|
|
EndProperty
|
|
Height = 240
|
|
Left = 360
|
|
TabIndex = 6
|
|
Top = 360
|
|
Width = 7020
|
|
WordWrap = -1 'True
|
|
End
|
|
End
|
|
Attribute VB_Name = "frmRemoteServerDetails"
|
|
Attribute VB_GlobalNameSpace = False
|
|
Attribute VB_Creatable = False
|
|
Attribute VB_PredeclaredId = True
|
|
Attribute VB_Exposed = False
|
|
Option Explicit
|
|
|
|
Private mfNetworkAddressSpecified As Boolean
|
|
Private mfNetworkProtocolSpecified As Boolean
|
|
Private mfDCOM As Boolean
|
|
|
|
Private Declare Function RpcNetworkIsProtseqValid Lib "rpcrt4.dll" Alias "RpcNetworkIsProtseqValidA" (ByVal strProtseq As String) As Long
|
|
|
|
'Determines whether a given protocol sequence is supported and available on this machine
|
|
Private Function fIsProtocolSeqSupported(ByVal strProto As String, ByVal strProtoFriendlyName) As Boolean
|
|
Const RPC_S_OK = 0&
|
|
Const RPC_S_PROTSEQ_NOT_SUPPORTED = 1703&
|
|
Const RPC_S_INVALID_RPC_PROTSEQ = 1704&
|
|
|
|
Dim rcps As Long
|
|
Static fUnexpectedErr As Boolean
|
|
|
|
On Error Resume Next
|
|
|
|
rcps = RpcNetworkIsProtseqValid(strProto)
|
|
|
|
Select Case rcps
|
|
Case RPC_S_OK
|
|
fIsProtocolSeqSupported = True
|
|
Case RPC_S_PROTSEQ_NOT_SUPPORTED
|
|
LogNote ResolveResString(resNOTEPROTOSEQNOTSUPPORTED, gstrPIPE1, strProto, gstrPIPE2, strProtoFriendlyName)
|
|
Case RPC_S_INVALID_RPC_PROTSEQ
|
|
LogWarning ResolveResString(resNOTEPROTOSEQINVALID, gstrPIPE1, strProto, gstrPIPE2, strProtoFriendlyName)
|
|
Case Else
|
|
If Not fUnexpectedErr Then
|
|
MsgWarning ResolveResString(resPROTOSEQUNEXPECTEDERR), vbOKOnly Or vbInformation, gstrTitle
|
|
If gfNoUserInput Then
|
|
'
|
|
' This is probably redundant since this form should never
|
|
' be shown if we are running in silent or SMS mode.
|
|
'
|
|
ExitSetup frmRemoteServerDetails, gintRET_FATAL
|
|
End If
|
|
fUnexpectedErr = True
|
|
End If
|
|
End Select
|
|
End Function
|
|
|
|
Private Sub cboNetworkProtocol_Click()
|
|
cmdOK.Enabled = fValid()
|
|
End Sub
|
|
|
|
Private Sub cmdCancel_Click()
|
|
ExitSetup frmRemoteServerDetails, gintRET_EXIT
|
|
End Sub
|
|
|
|
Private Sub cmdOK_Click()
|
|
Hide
|
|
End Sub
|
|
|
|
Private Sub Form_Load()
|
|
Dim fMoveControlsUp As Boolean 'Whether or not to move controls up to fill in an empty space
|
|
Dim yTopCutoff As Integer 'We will move all controls lower down than this y value
|
|
Dim yDiff As Integer
|
|
Dim c As Control
|
|
|
|
SetFormFont Me
|
|
Caption = ResolveResString(resREMOTESERVERDETAILSTITLE)
|
|
lblRemoteServerDetails.Caption = ResolveResString(resREMOTESERVERDETAILSLBL)
|
|
lblNetworkAddress.Caption = ResolveResString(resNETWORKADDRESS)
|
|
lblNetworkProtocol.Caption = ResolveResString(resNETWORKPROTOCOL)
|
|
cmdOK.Caption = ResolveResString(resOK)
|
|
cmdCancel.Caption = ResolveResString(resCANCEL)
|
|
'
|
|
' We don't care about protocols if this is DCOM.
|
|
'
|
|
If Not mfDCOM Then
|
|
FillInProtocols
|
|
End If
|
|
|
|
'Now we selectively turn on/off the available controls depending on how
|
|
' much information we need from the user.
|
|
If mfNetworkAddressSpecified Then
|
|
'The network address has already been filled in, so we can hide this
|
|
' control and move all the other controls up
|
|
txtNetworkAddress.Visible = False
|
|
lblNetworkAddress.Visible = False
|
|
fMoveControlsUp = True
|
|
yTopCutoff = txtNetworkAddress.Top
|
|
ElseIf mfNetworkProtocolSpecified Or mfDCOM Then
|
|
'The network protocol has already been filled in, so we can hide this
|
|
' control and move all the other controls up
|
|
cboNetworkProtocol.Visible = False
|
|
lblNetworkProtocol.Visible = False
|
|
fMoveControlsUp = True
|
|
yTopCutoff = cboNetworkProtocol.Top
|
|
End If
|
|
|
|
If fMoveControlsUp Then
|
|
'Find out how much to move the controls up
|
|
yDiff = cboNetworkProtocol.Top - txtNetworkAddress.Top
|
|
|
|
For Each c In Controls
|
|
If c.Top > yTopCutoff Then
|
|
c.Top = c.Top - yDiff
|
|
End If
|
|
Next c
|
|
|
|
'Finally, shrink the form
|
|
Height = Height - yDiff
|
|
End If
|
|
|
|
'Center the form
|
|
Top = (Screen.Height - Height) \ 2
|
|
Left = (Screen.Width - Width) \ 2
|
|
End Sub
|
|
|
|
'-----------------------------------------------------------
|
|
' SUB: GetServerDetails
|
|
'
|
|
' Requests any missing information about a remote server from
|
|
' the user.
|
|
'
|
|
' Input:
|
|
' [strRegFile] - the name of the remote registration file
|
|
' [strNetworkAddress] - the network address, if known
|
|
' [strNetworkProtocol] - the network protocol, if known
|
|
' [fDCOM] - if true, this component is being accessed via
|
|
' distributed com and not Remote automation. In
|
|
' this case, we don't need the network protocol or
|
|
' Authentication level.
|
|
'
|
|
' Ouput:
|
|
' [strNetworkAddress] - the network address either passed
|
|
' in or obtained from the user
|
|
' [strNetworkProtocol] - the network protocol either passed
|
|
' in or obtained from the user
|
|
'-----------------------------------------------------------
|
|
'
|
|
Public Sub GetServerDetails( _
|
|
ByVal strRegFile As String, _
|
|
strNetworkAddress As String, _
|
|
strNetworkProtocol As String, _
|
|
fDCOM As Boolean _
|
|
)
|
|
Dim i As Integer
|
|
Dim strServerName As String
|
|
|
|
'See if anything is missing
|
|
mfNetworkAddressSpecified = (Len(strNetworkAddress) > 0)
|
|
mfNetworkProtocolSpecified = (Len(strNetworkProtocol) > 0)
|
|
mfDCOM = fDCOM
|
|
|
|
If mfNetworkAddressSpecified And (mfNetworkProtocolSpecified Or mfDCOM) Then
|
|
'Both the network address and protocol sequence have already
|
|
'been specified in SETUP.LST. There is no need to ask the
|
|
'user for more information.
|
|
|
|
'However, we do need to check that the protocol sequence specified
|
|
'in SETUP.LST is actually installed and available on this machine
|
|
'(Remote Automation only).
|
|
'
|
|
If Not mfDCOM Then
|
|
CheckSpecifiedProtocolSequence strNetworkProtocol, strGetServerName(strRegFile)
|
|
End If
|
|
|
|
Exit Sub
|
|
End If
|
|
|
|
strServerName = strGetServerName(strRegFile)
|
|
Load Me
|
|
lblServerName.Caption = strServerName
|
|
|
|
If Not gfNoUserInput Then
|
|
'
|
|
' Show the form and extract necessary information from the user
|
|
'
|
|
Show vbModal
|
|
Else
|
|
'
|
|
' Since this is silent, simply accept the first one on
|
|
' the list.
|
|
'
|
|
' Note that we know there is at least 1 protocol in the
|
|
' list or else the program would have aborted in
|
|
' the Form_Load code when it called FillInProtocols().
|
|
'
|
|
cboNetworkProtocol.ListIndex = 0
|
|
End If
|
|
|
|
If mfNetworkProtocolSpecified And Not mfDCOM Then
|
|
'The network protocol sequence had already been specified
|
|
'in SETUP.LST. We need to check that the protocol sequence specified
|
|
'in SETUP.LST is actually installed and available on this machine
|
|
'(32-bit only).
|
|
CheckSpecifiedProtocolSequence strNetworkProtocol, strGetServerName(strRegFile)
|
|
End If
|
|
|
|
If Not mfNetworkAddressSpecified Then
|
|
strNetworkAddress = txtNetworkAddress
|
|
End If
|
|
If Not mfNetworkProtocolSpecified And Not mfDCOM Then
|
|
strNetworkProtocol = gProtocol(cboNetworkProtocol.ListIndex + 1).strName
|
|
End If
|
|
|
|
Unload Me
|
|
End Sub
|
|
|
|
'-----------------------------------------------------------
|
|
' SUB: FillInProtocols
|
|
'
|
|
' Fills in the protocol combo with the available protocols from
|
|
' setup.lst
|
|
'-----------------------------------------------------------
|
|
Private Sub FillInProtocols()
|
|
Dim i As Integer
|
|
Dim fSuccessReading As Boolean
|
|
Dim strMsg As String
|
|
|
|
cboNetworkProtocol.Clear
|
|
fSuccessReading = ReadProtocols(gstrSetupInfoFile, gstrINI_SETUP)
|
|
If Not fSuccessReading Or gcProtocols <= 0 Then
|
|
MsgError ResolveResString(resNOPROTOCOLSINSETUPLST), vbExclamation Or vbOKOnly, gstrTitle
|
|
ExitSetup frmRemoteServerDetails, gintRET_FATAL
|
|
End If
|
|
|
|
For i = 1 To gcProtocols
|
|
If fIsProtocolSeqSupported(gProtocol(i).strName, gProtocol(i).strFriendlyName) Then
|
|
cboNetworkProtocol.AddItem gProtocol(i).strFriendlyName
|
|
End If
|
|
Next i
|
|
|
|
If cboNetworkProtocol.ListCount > 0 Then
|
|
'We were successful in finding at least one protocol available on this machine
|
|
Exit Sub
|
|
End If
|
|
|
|
'None of the protocols specified in SETUP.LST are available on this machine. We need
|
|
'to let the user know what's wrong, including which protocol(s) were expected.
|
|
MsgError ResolveResString(resNOPROTOCOLSSUPPORTED1), vbExclamation Or vbOKOnly, gstrTitle
|
|
'
|
|
' Don't log the rest if this in SMS. Ok for silent mode since
|
|
' silent can take more than 255 characters.
|
|
'
|
|
#If SMS Then
|
|
If Not gfSMS Then
|
|
#End If
|
|
strMsg = ResolveResString(resNOPROTOCOLSSUPPORTED2) & vbLf
|
|
|
|
For i = 1 To gcProtocols
|
|
strMsg = strMsg & vbLf & vbTab & gProtocol(i).strFriendlyName
|
|
Next i
|
|
|
|
MsgError strMsg, vbExclamation Or vbOKOnly, gstrTitle
|
|
#If SMS Then
|
|
End If
|
|
#End If
|
|
ExitSetup frmRemoteServerDetails, gintRET_FATAL
|
|
End Sub
|
|
|
|
'-----------------------------------------------------------
|
|
' SUB: strGetServerName
|
|
'
|
|
' Given a remote server registration file, retrieves the
|
|
' friendly name of the server
|
|
'-----------------------------------------------------------
|
|
Private Function strGetServerName(ByVal strRegFilename As String) As String
|
|
Const strKey = "AppDescription="
|
|
Dim strLine As String
|
|
Dim iFile As Integer
|
|
Dim strName As String
|
|
|
|
On Error GoTo DoErr
|
|
|
|
'This will have to do if we can't find the friendly name
|
|
SeparatePathAndFileName strRegFilename, , strGetServerName
|
|
|
|
iFile = FreeFile
|
|
Open strRegFilename For Input Access Read Lock Read Write As #iFile
|
|
Do Until EOF(iFile)
|
|
Line Input #iFile, strLine
|
|
If InStr(1, UCase$(strLine), UCase$(strKey)) = 1 Then
|
|
'We've found the line with the friendly server name
|
|
strName = Mid$(strLine, Len(strKey) + 1)
|
|
If Len(strName) > 0 Then
|
|
strGetServerName = strName
|
|
End If
|
|
Exit Do
|
|
End If
|
|
Loop
|
|
Close iFile
|
|
|
|
Exit Function
|
|
DoErr:
|
|
strGetServerName = vbNullString
|
|
End Function
|
|
|
|
Private Sub txtNetworkAddress_Change()
|
|
cmdOK.Enabled = fValid()
|
|
End Sub
|
|
|
|
'Returns True iff the inputs are valid
|
|
Private Function fValid() As Boolean
|
|
fValid = True
|
|
'
|
|
' If this is dcom, we don't care about the network protocol.
|
|
'
|
|
If Not mfDCOM Then
|
|
If Not mfNetworkProtocolSpecified Then
|
|
If cboNetworkProtocol.ListIndex < 0 Then
|
|
fValid = False
|
|
Exit Function
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If Not mfNetworkAddressSpecified Then
|
|
If Len(txtNetworkAddress.Text) = 0 Then
|
|
fValid = False
|
|
End If
|
|
End If
|
|
End Function
|
|
|
|
Private Sub CheckSpecifiedProtocolSequence(ByVal strNetworkProtocol As String, ByVal strFriendlyServerName As String)
|
|
'Attempt to find the friendly name of this protocol from the list in SETUP.LST
|
|
Dim fSuccessReading As Boolean
|
|
Dim strFriendlyName As String
|
|
Dim i As Integer
|
|
|
|
strFriendlyName = strNetworkProtocol 'This will have to do if we can't find anything better
|
|
|
|
fSuccessReading = ReadProtocols(gstrSetupInfoFile, gstrINI_SETUP)
|
|
If fSuccessReading And gcProtocols > 0 Then
|
|
For i = 1 To gcProtocols
|
|
If UCase$(gProtocol(i).strName) = UCase$(strNetworkProtocol) Then
|
|
strFriendlyName = gProtocol(i).strFriendlyName
|
|
Exit For
|
|
End If
|
|
Next i
|
|
End If
|
|
|
|
'Now check to see if this protocol is available
|
|
If fIsProtocolSeqSupported(strNetworkProtocol, strFriendlyName) Then
|
|
'OK
|
|
Exit Sub
|
|
Else
|
|
'Nope, not supported. Give an informational message about what to do, then continue with setup.
|
|
Retry:
|
|
If gfNoUserInput Or MsgError( _
|
|
ResolveResString(resSELECTEDPROTONOTSUPPORTED, gstrPIPE1, strFriendlyServerName, gstrPIPE2, strFriendlyName), _
|
|
vbInformation Or vbOKCancel, _
|
|
gstrTitle) _
|
|
= vbCancel Then
|
|
'
|
|
' The user chose cancel. Give them a chance to exit (if this isn't a silent or sms install;
|
|
' otherwise any call to ExitSetup is deemed fatal.
|
|
'
|
|
ExitSetup frmRemoteServerDetails, gintRET_EXIT
|
|
GoTo Retry
|
|
Else
|
|
'The user chose OK. Continue with setup.
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
End Sub
|