[Aportes] Sistema de seguimiento de Stats

CUICUI

Inmortal Lvl 8
Explicación:
El comando /SEGUIMIENTO Usuario lo que hará es mostrar un formulario al GM donde muestre la vida y maná del usuario.
Este sistema se puede complementar con muchas cosas, en fin, depende de ustedes.

El formulario no lo dejo porque no tengo los códigos en mano, pero copien los Shapes y Labels del frmMain y ponganlo como quieran.

CLIENTE

Agregan dos paquetes en el ServerPacketID
Código:
UpdateSeguimiento
ShowPanelSeguimiento

Y en el eGmCommands
Código:
Seguimiento

(Hagan el resto ustedes)

Buscan
Código:
Case comando

Debajo ponen:

Código:
Case "/SEGUIMIENTO"
if notnullarguments then
   call writeseguimiento(argumentosraw)
end if

Al final del módulo Protocol ponen:

Código:
Public Sub WriteSeguimiento(ByVal Nick As String)

' @@ CuiCui

   Call outgoingData.WriteByte(ClientPacketID.GMCommands)
   Call outgoingData.WriteByte(eGMCommands.Seguimiento)
   Call outgoingData.WriteASCIIString(Nick)

End Sub

Private Sub HandleShowPanelSeguimiento()

' @@ CuiCui
      
   ' @@ Remove packet ID
   Call incomingData.ReadByte
  
   Dim Formulario As Boolean
  
   Formulario = incomingData.ReadBoolean
  
   ' @@ Simple
   If Formulario Then
  
       frmPanelSeguimiento.Show vbModeless, FrmMain
  
   Else
  
       Unload frmPanelSeguimiento
  
   End If

End Sub

Private Sub HandleUpdateSeguimiento()

' @@ CuiCui
  
   ' @@ Remove packet ID
   Call incomingData.ReadByte
  
   Dim tMaxHP As Integer, tMinHP As Integer, tMaxMAN As Integer, tMinMAN As Integer
  
   tMaxHP = incomingData.ReadInteger()
   tMinHP = incomingData.ReadInteger()
   tMaxMAN = incomingData.ReadInteger()
   tMinMAN = incomingData.ReadInteger()
  
   frmPanelSeguimiento.lblMana = tMinMAN & "/" & tMaxMAN
   frmPanelSeguimiento.lblVida = tMinHP & "/" & tMaxHP
  
   If tMinMAN <> 0 Then
       frmPanelSeguimiento.ImgMana.Width = (((tMinMAN / 100) / (tMaxMAN / 100)) * 1400)
   End If

   If tMinHP <> 0 Then
       frmPanelSeguimiento.ImgVida.Width = (((tMinHP / 100) / (tMaxHP / 100)) * 1400)
   End If

End Sub

SERVER

En el Public Type UserFlags declaran:
Código:
ElPedidorSeguimiento as Integer

En el Enum eGMCommands agrega el Seguimiento

y el case sería:

Código:
Case eGMCommands.Seguimiento
           Call HandleSeguimiento(UserIndex)


En el ServerPacketID iría :
Código:
UpdateSeguimiento
ShowPanelSeguimiento

(Lo demás haganlo ustedes)

Ahora en cada WriteUpdateHP

pone

Call WriteUpdateFollow

En el Sub CloseSocket agregar:

Código:
   ' @@ Si un GM me tiene fichado entonces..

   If .flags.ElPedidorSeguimiento > 0 Then

       Call WriteConsoleMsg(.flags.ElPedidorSeguimiento, "El usuario que estás siguiendo se desconectó, re putin", FontTypeNames.fonttype_dios)
      
       Call Protocol.WriteShowPanelSeguimiento(.flags.ElPedidorSeguimiento, 2)

      
   End If

En el Sub ResetUserFlags:

Código:
With UserList(UserIndex).flags
       .ElPedidorSeguimiento = 0

Al final del módulo Protocol:

Código:
Private Sub HandleSeguimiento(ByVal UserIndex As Integer)

' @@ Cuicui

   With userList(UserIndex)

        Dim ShakGato As New clsByteQueue
        Call ShakGato.CopyBuffer(.incomingData)
       
       ' @@ Remove packet ID
       Call ShakGato.incomingData.ReadByte
       
       Dim TargetIndex As Integer, Nick As String
       
       Nick = ShakGato.incomingData.ReadASCIIString

       If Not EsGm(UserIndex) Then Call ShakGato.CopyBuffer(.incomingData): Exit Sub
       
       ' @@ Para dejar de seguir
       If Nick = "1" Then
           
           userList(.flags.Siguiendo).flags.ElPedidorSeguimiento = 0
           Call ShakGato.CopyBuffer(.incomingData)
           Exit Sub
       
       End If
       
       TargetIndex = NameIndex(Nick)
       
       If TargetIndex > 0 Then
       
   ' @@ Necesito un ErrHandler acá
   If userlist(targetindex).flags.ElPedidorSeguimiento > 0 then

      Call WriteConsoleMsg(Userlist(targetindex).flags.elpedidorseguimiento, "El GM " & .name & " ha comenzado a seguir al usuario que estás siguiendo.", fonttypenames.fonttype_Info)      
      call WriteShowPanelSeguimiento(userlist(targetindex).flags.elpedidorseguimiento,0)

   end if

           userList(TargetIndex).flags.ElPedidorSeguimiento = UserIndex
           'userList(UserIndex).flags.Siguiendo = TargetIndex
           Call WriteUpdateFollow(TargetIndex)
           Call WriteShowPanelSeguimiento(UserIndex, 1)
       
       End If

   Call ShakGato.CopyBuffer(.incomingData)
   
   End With

End Sub

Public Sub WriteShowPanelSeguimiento(ByVal UserIndex As Integer, ByVal Formulario As Byte)

' @@ Cuicui
   
   Call userList(UserIndex).outgoingData.WriteByte(ServerPacketID.ShowPanelSeguimiento)
   Call userList(UserIndex).outgoingData.WriteByte(Formulario)

End Sub

Public Sub WriteUpdateFollow(ByVal UserIndex As Integer)
   
' @@ Cuicui
   
   On Error GoTo Errhandler
   If userList(UserIndex).flags.ElPedidorSeguimiento > 0 Then
       With userList(userList(UserIndex).flags.ElPedidorSeguimiento).outgoingData
       
           ' @@ Cui: Podria enviarse de otra forma pero np
           Call .WriteByte(ServerPacketID.UpdateSeguimiento)
           Call .WriteInteger(userList(UserIndex).Stats.MaxHp)
           Call .WriteInteger(userList(UserIndex).Stats.MinHp)
           Call .WriteInteger(userList(UserIndex).Stats.MaxMAN)
           Call .WriteInteger(userList(UserIndex).Stats.MinMAN)
       
       End With
   
   End If
   
   Exit Sub
   
Errhandler:
   If Err.Number = userList(UserIndex).outgoingData.NotEnoughSpaceErrCode Then
       Call FlushBuffer(UserIndex)
       Resume
   End If

End Sub

Si falta algo o no les anda avisen y lo vemos, saludos.
 
Última edición:

ArgentumGame

Dragón Ancestral Lvl 5
Miembro del equipo
Colaborador
Developer
Moderador de AO
Moderador

  1. With userList(UserIndex)
  2. ' @@ Remove packet ID
  3. Call .incomingData.ReadByte
  4. Dim TargetIndex As Integer, Nick As String
  5. Nick = .incomingData.ReadASCIIString

  6. If Not EsGm(UserIndex) Then Exit Sub
Ahi si no es gm el user, le va a saltar bug de clones


@Cuicui te acordas que en mi sv vos ponias /Foto, o ponias /PROCESOS o algo asi, y con el user te quedaba el clon? Weno eso es lo que te puede pasar a vos haciendolo de esta forma

@miqueas150 Y si , vaa saltar error, y se va a clonar el pj, ademas de quedar la conexion bugueada, entre otros errores que puede ocasionar. Asi me paso en tu super base marcos
 

CUICUI

Inmortal Lvl 8
Listo Lauta, ahí lo dejé. Cualquier referencia a tu persona es pura coincidencia

@Cuicui te acordas que en mi sv vos ponias /Foto, o ponias /PROCESOS o algo asi, y con el user te quedaba el clon? Weno eso es lo que te puede pasar a vos haciendolo de esta forma
si jajajaja
 

Luciano Ayanz

Un simple newbie
Che el frm no detecta cuando alguien sube la vida o mana, solo cuando se le baja, por ejemplo "PEPITO TIENE 300 de vida y le pegan 10 se le baja 290, pero no saltá que al tomar la poción se le aumento la vida, hasta que vuelvo a reabrir el form. Que será? puse todos los UpdateHP y eso bien.... es más ya los pusé en otros AOS y me funcionó siempre :S
 
Arriba