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>
263 lines
9.2 KiB
Plaintext
263 lines
9.2 KiB
Plaintext
VERSION 5.00
|
|
Begin VB.Form frmChat
|
|
BorderStyle = 3 'Fixed Dialog
|
|
Caption = "vbDirectPlay Chat"
|
|
ClientHeight = 5085
|
|
ClientLeft = 45
|
|
ClientTop = 330
|
|
ClientWidth = 7710
|
|
Icon = "frmChat.frx":0000
|
|
LinkTopic = "Form1"
|
|
MaxButton = 0 'False
|
|
MinButton = 0 'False
|
|
ScaleHeight = 5085
|
|
ScaleWidth = 7710
|
|
StartUpPosition = 3 'Windows Default
|
|
Begin VB.CommandButton cmdWhisper
|
|
Caption = "Whisper"
|
|
Height = 255
|
|
Left = 5820
|
|
TabIndex = 3
|
|
Top = 4740
|
|
Width = 1695
|
|
End
|
|
Begin VB.Timer tmrUpdate
|
|
Enabled = 0 'False
|
|
Interval = 50
|
|
Left = 10200
|
|
Top = 120
|
|
End
|
|
Begin VB.TextBox txtSend
|
|
Height = 285
|
|
Left = 60
|
|
TabIndex = 0
|
|
Top = 4740
|
|
Width = 5655
|
|
End
|
|
Begin VB.ListBox lstUsers
|
|
Height = 4545
|
|
Left = 5760
|
|
TabIndex = 2
|
|
Top = 120
|
|
Width = 1815
|
|
End
|
|
Begin VB.TextBox txtChat
|
|
Height = 4635
|
|
Left = 60
|
|
Locked = -1 'True
|
|
MultiLine = -1 'True
|
|
ScrollBars = 2 'Vertical
|
|
TabIndex = 1
|
|
TabStop = 0 'False
|
|
Top = 60
|
|
Width = 5595
|
|
End
|
|
End
|
|
Attribute VB_Name = "frmChat"
|
|
Attribute VB_GlobalNameSpace = False
|
|
Attribute VB_Creatable = False
|
|
Attribute VB_PredeclaredId = True
|
|
Attribute VB_Exposed = False
|
|
Option Explicit
|
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
'
|
|
' Copyright (C) 1999-2001 Microsoft Corporation. All Rights Reserved.
|
|
'
|
|
' File: frmChat.frm
|
|
'
|
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
Implements DirectPlay8Event
|
|
|
|
Private Sub cmdWhisper_Click()
|
|
Dim lMsg As Long, lOffset As Long
|
|
Dim sChatMsg As String
|
|
Dim oBuf() As Byte
|
|
|
|
If lstUsers.ListIndex < 0 Then
|
|
MsgBox "You must select a user in the list before you can whisper to that person.", vbOKOnly Or vbInformation, "Select someone"
|
|
Exit Sub
|
|
End If
|
|
|
|
If lstUsers.ItemData(lstUsers.ListIndex) = 0 Then
|
|
MsgBox "Why are you whispering to yourself?", vbOKOnly Or vbInformation, "Select someone else"
|
|
Exit Sub
|
|
End If
|
|
|
|
If txtSend.Text = vbNullString Then
|
|
MsgBox "What's the point of whispering if you have nothing to say..", vbOKOnly Or vbInformation, "Enter text"
|
|
Exit Sub
|
|
End If
|
|
|
|
'Send this message to the person you are whispering to
|
|
lMsg = MsgWhisper
|
|
lOffset = NewBuffer(oBuf)
|
|
AddDataToBuffer oBuf, lMsg, LenB(lMsg), lOffset
|
|
sChatMsg = txtSend.Text
|
|
AddStringToBuffer oBuf, sChatMsg, lOffset
|
|
txtSend.Text = vbNullString
|
|
dpp.SendTo lstUsers.ItemData(lstUsers.ListIndex), oBuf, 0, DPNSEND_NOLOOPBACK
|
|
UpdateChat "**<" & gsUserName & ">** " & sChatMsg
|
|
|
|
End Sub
|
|
|
|
Private Sub Form_Load()
|
|
'load all of the players into our list
|
|
LoadAllPlayers
|
|
End Sub
|
|
|
|
Private Sub UpdateChat(ByVal sString As String)
|
|
'Update the chat window first
|
|
txtChat.Text = txtChat.Text & sString & vbCrLf
|
|
'Now limit the text in the window to be 16k
|
|
If Len(txtChat.Text) > 16384 Then
|
|
txtChat.Text = Right$(txtChat.Text, 16384)
|
|
End If
|
|
'Autoscroll the text
|
|
txtChat.SelStart = Len(txtChat.Text)
|
|
End Sub
|
|
|
|
Private Sub txtSend_KeyPress(KeyAscii As Integer)
|
|
Dim lMsg As Long, lOffset As Long
|
|
Dim sChatMsg As String
|
|
Dim oBuf() As Byte
|
|
|
|
If KeyAscii = vbKeyReturn Then
|
|
KeyAscii = 0
|
|
If txtSend.Text = vbNullString Then Exit Sub
|
|
'Send this message to everyone
|
|
lMsg = MsgChat
|
|
lOffset = NewBuffer(oBuf)
|
|
AddDataToBuffer oBuf, lMsg, LenB(lMsg), lOffset
|
|
sChatMsg = txtSend.Text
|
|
AddStringToBuffer oBuf, sChatMsg, lOffset
|
|
txtSend.Text = vbNullString
|
|
dpp.SendTo DPNID_ALL_PLAYERS_GROUP, oBuf, 0, DPNSEND_NOLOOPBACK
|
|
UpdateChat "<" & gsUserName & ">" & sChatMsg
|
|
End If
|
|
End Sub
|
|
|
|
Private Function GetName(ByVal lID As Long) As String
|
|
Dim lCount As Long
|
|
|
|
GetName = vbNullString
|
|
For lCount = 0 To lstUsers.ListCount - 1
|
|
If lstUsers.ItemData(lCount) = lID Then 'This is the player
|
|
GetName = lstUsers.List(lCount)
|
|
Exit For
|
|
End If
|
|
Next
|
|
End Function
|
|
|
|
Public Sub LoadAllPlayers()
|
|
Dim lCount As Long
|
|
Dim dpPlayer As DPN_PLAYER_INFO
|
|
|
|
lstUsers.Clear
|
|
For lCount = 1 To dpp.GetCountPlayersAndGroups(DPNENUM_PLAYERS)
|
|
dpPlayer = dpp.GetPeerInfo(dpp.GetPlayerOrGroup(lCount))
|
|
lstUsers.AddItem dpPlayer.Name
|
|
If ((dpPlayer.lPlayerFlags And DPNPLAYER_LOCAL) <> DPNPLAYER_LOCAL) Then
|
|
'Do not add a ItemData key for myself
|
|
lstUsers.ItemData(lstUsers.ListCount - 1) = dpp.GetPlayerOrGroup(lCount)
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_AddRemovePlayerGroup(ByVal lMsgID As Long, ByVal lPlayerID As Long, ByVal lGroupID As Long, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_AppDesc(fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_AsyncOpComplete(dpnotify As DxVBLibA.DPNMSG_ASYNC_OP_COMPLETE, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_ConnectComplete(dpnotify As DxVBLibA.DPNMSG_CONNECT_COMPLETE, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_CreateGroup(ByVal lGroupID As Long, ByVal lOwnerID As Long, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_CreatePlayer(ByVal lPlayerID As Long, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_DestroyGroup(ByVal lGroupID As Long, ByVal lReason As Long, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_DestroyPlayer(ByVal lPlayerID As Long, ByVal lReason As Long, fRejectMsg As Boolean)
|
|
Dim lCount As Long
|
|
|
|
'We only care when someone leaves. When they join we will receive a 'MSGJoin'
|
|
'Remove this player from our list
|
|
For lCount = 0 To lstUsers.ListCount - 1
|
|
If lstUsers.ItemData(lCount) = lPlayerID Then 'This is the player
|
|
UpdateChat "---- " & lstUsers.List(lCount) & " has left the chat."
|
|
lstUsers.RemoveItem lCount
|
|
Exit For
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_EnumHostsQuery(dpnotify As DxVBLibA.DPNMSG_ENUM_HOSTS_QUERY, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_EnumHostsResponse(dpnotify As DxVBLibA.DPNMSG_ENUM_HOSTS_RESPONSE, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_HostMigrate(ByVal lNewHostID As Long, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_IndicateConnect(dpnotify As DxVBLibA.DPNMSG_INDICATE_CONNECT, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_IndicatedConnectAborted(fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_InfoNotify(ByVal lMsgID As Long, ByVal lNotifyID As Long, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_Receive(dpnotify As DxVBLibA.DPNMSG_RECEIVE, fRejectMsg As Boolean)
|
|
'process what msgs we receive.
|
|
'All we care about in this form is what msgs we receive.
|
|
Dim lMsg As Long, lOffset As Long
|
|
Dim dpPeer As DPN_PLAYER_INFO, sName As String
|
|
Dim sChat As String
|
|
|
|
With dpnotify
|
|
GetDataFromBuffer .ReceivedData, lMsg, LenB(lMsg), lOffset
|
|
Select Case lMsg
|
|
Case MsgChat
|
|
sName = GetName(.idSender)
|
|
sChat = GetStringFromBuffer(.ReceivedData, lOffset)
|
|
UpdateChat "<" & sName & "> " & sChat
|
|
Case MsgWhisper
|
|
sName = GetName(.idSender)
|
|
sChat = GetStringFromBuffer(.ReceivedData, lOffset)
|
|
UpdateChat "**<" & sName & ">** " & sChat
|
|
End Select
|
|
End With
|
|
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_SendComplete(dpnotify As DxVBLibA.DPNMSG_SEND_COMPLETE, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|
|
Private Sub DirectPlay8Event_TerminateSession(dpnotify As DxVBLibA.DPNMSG_TERMINATE_SESSION, fRejectMsg As Boolean)
|
|
'VB requires that we must implement *every* member of this interface
|
|
End Sub
|
|
|