Missão por Botão
A pedido de um membro fiz esse sistema super básico onde o jogador pode solicitar um nova missão a partir de um botão sem precisar interagir com algum NPC, é um sistema razoavelmente simples e requer o sistema de quests do alatar(Link do Sistema). Bom vamos ao sistema!
Client-Side
Primeiro vamos adicionar em modEnumerations, procure por:
- Código:
' Make sure CMSG_COUNT is below everything else
CMSG_COUNT
Acima adicione:
- Código:
CQuestID
Agora em modClientTCP, no final adicione:
- Código:
' Função que solicita ao servidor a missão
Sub SendPlayerQuest(ByVal QuestId As Long)
Dim Buffer As clsBuffer
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Set Buffer = New clsBuffer
Buffer.WriteLong CQuestID ' Identificador do pacote
Buffer.WriteLong QuestId ' Identificador da missão
SendData Buffer.ToArray() ' Envia para o servidor o pacote
Set Buffer = Nothing
' Error handler
Exit Sub
errorhandler:
HandleError "SendPlayerQuest", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Cliente finalizado!
Sempre que quiser solicitar uma nova missão, dentro do botão ou label adicione:
- Código:
SendPlayerQuest QuestId
onde esse QuestId será o índice da missão la no editor, tipo, caso queira colocar a primeira missão, você usar
SendPlayerQuest 1
__________________________________________________________________________________
Server-Side
Em modEnumerations, procure por:
- Código:
' Make sure CMSG_COUNT is below everything else
CMSG_COUNT
Acima adicione:
- Código:
CQuestID
Em modHandleData, procure por:
- Código:
HandleDataSub(CQuestLogUpdate) = GetAddress(AddressOf HandleQuestLogUpdate)
Abaixo adicione:
- Código:
HandleDataSub(CQuestID) = GetAddress(AddressOf HandlePlayerQuest)
Agora no final de modHandleData, adicione:
- Código:
' Função que recebe os dados do cliente
Sub HandlePlayerQuest(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim Buffer As clsBuffer
Dim QuestId As Long
Set Buffer = New clsBuffer ' Cria um novo objeto do tipo pacote buffer
Buffer.WriteBytes Data() ' Grava o dados do pacote no buffer
QuestId = Buffer.ReadLong ' Recebe o indice da missão
' Verifica se a missão pode ser iniciada
If CanStartQuest(index, QuestId) Then
' Envia para o cliente que a nova missão
QuestMessage index, QuestId, Trim$(Quest(QuestId).Chat(1)), QuestId
Exit Sub
End If
' Verificar se a missão está em progresso
If QuestInProgress(index, QuestId) Then
' Envia uma mensagem para o jogador
QuestMessage index, QuestId, Trim$(Quest(QuestId).Chat(2)), 0
Exit Sub
End If
End Sub
Pronto, agora só testar!
Última edição por Dooolly em Qua Ago 29, 2018 1:36 am, editado 2 vez(es)