O que é o sistema de atendimento On e Off?
Bom , a pedido de um amigo eu desenvolvi este sistema, ele funciona da seguinte forma, com o comando "/atendimentoon" , você ativa o atendimento e aparece uma mensagem global falando que o suporte está ativo, assim o player digitando "/atendimento" ele irá para a sala de atendimento onde será atendido pela staff, e digitando "/atendimentooff" aparece uma mensagem global falando que o atendimento foi finalizado, caso o player digite "/atendimento" ele será informado que não tem suporte ativo no momento.
Então, vamos ao tutorial !

Client~Side

No modEnumerations procure por

Código:

CPartyLeave


Abaixo adicione

Código:

 CAtendimento
    CPAtendimento


no modInput procure por

Código:

Case "/debug"
                    If GetPlayerAccess(MyIndex) < ADMIN_CREATOR Then GoTo Continue

                    DEBUG_MODE = (Not DEBUG_MODE)


abaixo adicione

Código:

 Case "/atendimentoon"
                    If GetPlayerAccess(MyIndex) > 0 Then
                        SendAtendimento (1)
                       
                    Else
                        AddText "Você não tem permissão para ativar o atendimento", HelpColor
                    End If
                    Case "/atendimentooff"
                    If GetPlayerAccess(MyIndex) > 0 Then
                        SendAtendimento (0)
                        Else
                        AddText "Você não tem permissão para desativar o atendimento", HelpColor
                    End If
                   
                       
                    Case "/atendimento"
                    SendPAtendimento (1)


no final do modclientTCP adicione

Código:

Sub SendAtendimento(ByVal valor 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 CAtendimento
    Buffer.WriteByte valor
    SendData Buffer.ToArray()
    Set Buffer = Nothing

    ' Error handler
    Exit Sub
errorhandler:
    HandleError "SendAtendimento", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub


Sub SendPAtendimento(ByVal valor As String)
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 CPAtendimento
    Buffer.WriteByte valor
    SendData Buffer.ToArray()
    Set Buffer = Nothing

    ' Error handler
    Exit Sub
errorhandler:
    HandleError "SendPAtendimento", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub


Fim do client~side.

Server~Side

no modEnumerations procure por

Código:

CPartyLeave


abaixo adicione

Código:

CAtendimento
    CPAtendimento


no final da modPlayer adicione

Código:

Function GetPlayerAtendimento(ByVal index As Long) As String
    GetPlayerAtendimento = Trim$(Player(index).SAtendimento)
End Function
 
Sub SetPlayerAtendimento(ByVal index As Long, ByVal SAtendimento As String)
 Dim i As Long
For i = 1 To MAX_PLAYERS

  Player(i).SAtendimento = SAtendimento
Next
End Sub


no modHandleData procure por

Código:

 HandleDataSub(CPartyLeave) = GetAddress(AddressOf HandlePartyLeave)


Abaixo adicione

Código:

 HandleDataSub(CAtendimento) = GetAddress(AddressOf HandleAtendimento)
    HandleDataSub(CPAtendimento) = GetAddress(AddressOf HandlePAtendimento)


no final da ModHandleData adicione

Código:

Sub HandleAtendimento(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
  Dim Buffer As clsBuffer
  Dim Valor As String
 
Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()
   
Valor = Buffer.ReadByte

    If Valor = 1 Then
        Call GlobalMsg("O atendimento foi ativado, apartir de agora os GM estarão atendendo, para obter suporte digite /atendimento.", Yellow)
        Call SetPlayerAtendimento(index, 1)
    End If

    If Valor = 0 Then
        Call GlobalMsg("O atendimento foi desativado, apartir de agora os GM não estarão atendendo.", Yellow)
        Call SetPlayerAtendimento(index, 0)
    End If

End Sub

Sub HandlePAtendimento(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
  Dim Buffer As clsBuffer
  Dim verifica As String
 
Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()
   
verifica = Buffer.ReadByte

        If verifica = 1 Then

            If GetPlayerAtendimento(index) = 1 Then
            Call PlayerWarp(index, 100, 5, 6, False) 'dê as cordenadas 100 = mapa, 5 = x , 6 = y
            Call SendPlayerData(index)
            Else
            PlayerMsg index, "Nenhum GM disponível no momento.", BrightCyan
            End If

        End If

End Sub

Atenção: para mudar o mapa e o local que o player nasce edite essa parte Call PlayerWarp(index, 100, 5, 6, False) 'dê as cordenadas 100 = mapa, 5 = x , 6 = y

no modTypes
procure por

Código:

Private Type PlayerRec


Antes do End type adicione

Código:

Atendimento As Byte
  SAtendimento As Byte


Fim!

Créditos: Lincoln