[Aporte] Ranking TOP15 de usuarios (Level,oro,Crimis,ciudas,demas)

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
La verdad que esta medio desordenado ,pero el funcionamiento es bueno y anda x

Código:
Option Explicit
''''''''''RANKING DE USUARIOS BY SHAK''''''''''''''''''
Type tRanking
    LvlName As String
    Lvl As Byte
  
    OroName As String
    Oro As Long
  
    CriminalesName As String
    Criminales As Integer
  
    CiudadanosName As String
    Ciudadanos As Integer

    TorneosName As String
    Torneos As Integer
  
    DuelosName As String
    Duelos As Integer
End Type

Public RankingLevel() As tRanking
Public RankingOro() As tRanking
Public RankingCriminales() As tRanking
Public RankingCiudadanos() As tRanking
Public DuelosGanados() As tRanking

Private Top_Rank As Byte

'//Organización
Public Enum eRanking
    Lvl = 1
    Oro
    Criminales
    Ciudadanos
    Torneos
    Duelos
End Enum



Public Sub LoadRankingUsuarios()
'Carga el archivo que guarda el rank de los users
'Last modified: 28/06
Dim Reader As clsIniManager
Dim tmpStr As String
Dim i As Integer
Dim j As Integer
    'Cargamos el clsIniReader en memoria
    Set Reader = New clsIniManager
    'Lo inicializamos
    Call Reader.Initialize(DatPath & "RANKING.DAT")
    'Redimensionamos el array
    Top_Rank = Reader.GetValue("INIT", "TopCuanto")
    ReDim RankingLevel(1 To Top_Rank)
    ReDim RankingOro(1 To Top_Rank)
    ReDim RankingCriminales(1 To Top_Rank)
    ReDim RankingCiudadanos(1 To Top_Rank)
    ReDim DuelosGanados(1 To Top_Rank)
  
    'Cargamos los datos
    For i = 1 To Top_Rank
      
            With RankingLevel(i)
                '/Ranking de level
                tmpStr = Reader.GetValue("TOPLVL", "lvl" & i)
                .LvlName = ReadField(1, tmpStr, 45)
                .Lvl = val(ReadField(2, tmpStr, 45))
            End With
          
            With RankingOro(i)
                '/Ranking de oro
                tmpStr = Reader.GetValue("TOPORO", "Oro" & i)
                .OroName = ReadField(1, tmpStr, 45)
                .Oro = val(ReadField(2, tmpStr, 45))
            End With

            With RankingCriminales(i)
                '/Ranking de criminales matados
                tmpStr = Reader.GetValue("TOPCRIMINALES", "Criminal" & i)
                .CriminalesName = ReadField(1, tmpStr, 45)
                .Criminales = val(ReadField(2, tmpStr, 45))
            End With
          
            With RankingCiudadanos(i)
                '/Ranking de ciudadanos matados
                tmpStr = Reader.GetValue("TOPCRIMINALES", "Ciudadano" & i)
                .CiudadanosName = ReadField(1, tmpStr, 45)
                .Ciudadanos = val(ReadField(2, tmpStr, 45))
            End With
          
            With DuelosGanados(i)
                '/Ranking de ciudadanos matados
                tmpStr = Reader.GetValue("TOPDUELOS", "Duelo" & i)
                .DuelosName = ReadField(1, tmpStr, 45)
                .Duelos = val(ReadField(2, tmpStr, 45))
            End With
    Next i
    'Eliminamos la clase
    Set Reader = Nothing
Exit Sub
                
End Sub
Public Sub SaveRanking()
    Dim Manager As clsIniManager
    Dim i As Long
  
    Set Manager = New clsIniManager
    Call Manager.Initialize(DatPath & "RANKING.DAT")
  
    ReDim Preserve RankingLevel(1 To Top_Rank)
    ReDim Preserve RankingOro(1 To Top_Rank)
    ReDim Preserve RankingCriminales(1 To Top_Rank)
    ReDim Preserve RankingCiudadanos(1 To Top_Rank)
  
    Dim N As Integer
    N = 15
    Dim aux As Long
    Dim j As Long
    '//Ordenamos por nivel
    For i = 1 To N
        For j = 1 To N - i
            If RankingLevel(j).Lvl < RankingLevel(j + 1).Lvl Then
                aux = RankingLevel(j).Lvl
                RankingLevel(j).Lvl = RankingLevel(j + 1).Lvl
                RankingLevel(j + 1).Lvl = aux
              
            End If
        Next j
    Next i
  
    '//Ordenamos por oro
    For i = 1 To N
        For j = 1 To N - i
            If RankingOro(j).Oro < RankingOro(j + 1).Oro Then
                aux = RankingOro(j).Oro
                RankingOro(j).Oro = RankingOro(j + 1).Oro
                RankingOro(j + 1).Lvl = aux
              
            End If
        Next j
    Next i
  
    '//Ordenamos por ciudadanos
    For i = 1 To N
        For j = 1 To N - i
            If RankingCiudadanos(j).Ciudadanos < RankingCiudadanos(j + 1).Ciudadanos Then
                aux = RankingCiudadanos(j).Ciudadanos
                RankingCiudadanos(j).Ciudadanos = RankingCiudadanos(j + 1).Ciudadanos
                RankingCiudadanos(j + 1).Ciudadanos = aux
            End If
        Next j
    Next i
  
    '//Ordenamos por criminales
    For i = 1 To N
        For j = 1 To N - i
            If RankingCriminales(j).Criminales < RankingCriminales(j + 1).Criminales Then
                aux = RankingCriminales(j).Criminales
                RankingCriminales(j).Criminales = RankingCriminales(j + 1).Criminales
                RankingCriminales(j + 1).Criminales = aux
            End If
        Next j
    Next i
    
    For i = 1 To Top_Rank
        Call Manager.ChangeValue("TOPLVL", "LVL" & i, RankingLevel(i).LvlName & "-" & RankingLevel(i).Lvl)
        Call Manager.ChangeValue("TOPORO", "ORO" & i, RankingOro(i).OroName & "-" & RankingOro(i).Oro)
        Call Manager.ChangeValue("TOPCRIMINALES", "CRIMINAL" & i, RankingCriminales(i).CriminalesName & "-" & RankingCriminales(i).Criminales)
        Call Manager.ChangeValue("TOPCIUDADANOS", "CIUDADANO" & i, RankingCiudadanos(i).CiudadanosName & "-" & RankingCiudadanos(i).Ciudadanos)
        Call Manager.ChangeValue("TOPDUELOS", "DUELO" & i, DuelosGanados(i).DuelosName & "-" & DuelosGanados(i).Duelos)
        'Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking: " & RankingLevel(i).LvlName & "-" & RankingLevel(i).Lvl & ".", FontTypeNames.FONTTYPE_INFO))
    Next i

    Call Manager.DumpFile(DatPath & "RANKING.DAT")

End Sub

Public Function EstaRankingUser(ByVal UserIndex As Integer, ByVal Rank As eRanking) As Byte
'Author: Lautaro Marino
'Creada 02-07
'Establecemos si el personaje está en el ranking
    With UserList(UserIndex)
        EstaRankingUser = 0
        Dim i As Integer
      
        Select Case Rank
            Case eRanking.Lvl
                For i = 1 To 15
                    If RankingLevel(i).LvlName = .name Then
                        EstaRankingUser = i
                        RankingLevel(i).Lvl = .Stats.ELV
                        Exit Function
                    End If
                Next i
      
            Case eRanking.Oro
                For i = 1 To 15
                    If RankingOro(i).OroName = .name Then
                        EstaRankingUser = i
                        RankingOro(i).Oro = .Stats.GLD
                        Exit Function
                    End If
                Next i
              
            Case eRanking.Ciudadanos
                For i = 1 To 15
                    If RankingCiudadanos(i).CiudadanosName = .name Then
                        EstaRankingUser = i
                        RankingCiudadanos(i).Ciudadanos = .Faccion.CiudadanosMatados
                        Exit Function
                    End If
                Next i
              
            Case eRanking.Criminales
                For i = 1 To 15
                    If RankingCriminales(i).CriminalesName = .name Then
                        EstaRankingUser = i
                        RankingCriminales(i).Criminales = .Faccion.CriminalesMatados
                    End If
                Next i
              
            Case eRanking.Duelos
                For i = 1 To 15
                    If DuelosGanados(i).DuelosName = .name Then
                        EstaRankingUser = i
                        DuelosGanados(i).Duelos = .Stats.DuelosGanados
                    End If
                Next i
                  
        End Select
      
    End With
End Function

Public Sub CheckIngresoRanking(ByVal UserIndex As Integer)
'Author: Lautaro Marino
'Creado el 02/07/2016
    Dim i As Long
    Dim EstaRankin As Byte
    Dim RIndex As Byte
    With UserList(UserIndex)
  
        '/RANKING DE LEVEL
        EstaRankin = EstaRankingUser(UserIndex, eRanking.Lvl)
        For i = 1 To Top_Rank
                If .Stats.ELV > RankingLevel(i).Lvl Then
                    If EstaRankin <> i And EstaRankin > i Then
                        RIndex = i
                        Call ActualizarRanking(RIndex, UserIndex, eRanking.Lvl)
                        Exit Sub
                     End If
                End If
        Next i
      
        '/RANKING DE ORO
        EstaRankin = EstaRankingUser(UserIndex, eRanking.Oro)
        For i = 1 To Top_Rank
                If .Stats.GLD > RankingOro(i).Oro Then
                    If EstaRankin <> i And EstaRankin > i Then
                        RIndex = i
                        Call ActualizarRanking(RIndex, UserIndex, eRanking.Oro)
                        Exit Sub
                     End If
                End If
        Next i
      
        '/RANKING DE CRIUDADANOS MATADOS
        EstaRankin = EstaRankingUser(UserIndex, eRanking.Ciudadanos)
        For i = 1 To Top_Rank
            If .Faccion.CiudadanosMatados > RankingCiudadanos(i).Ciudadanos Then
                If EstaRankin <> i And EstaRankin > i Then
                    RIndex = i
                    Call ActualizarRanking(RIndex, UserIndex, eRanking.Ciudadanos)
                    Exit Sub
                End If
            End If
        Next i
      
        '/RANKING DE CRIMINALES MATADOS
        EstaRankin = EstaRankingUser(UserIndex, eRanking.Criminales)
        For i = 1 To Top_Rank
            If .Faccion.CriminalesMatados > RankingCriminales(i).Criminales Then
                If EstaRankin <> i And EstaRankin > i Then
                    RIndex = i
                    Call ActualizarRanking(RIndex, UserIndex, eRanking.Criminales)
                    Exit Sub
                End If
            End If
        Next i
      
    End With
End Sub
Sub ActualizarRanking(ByVal RankingIndex As Byte, ByVal UserIndex As Integer, ByVal eRank As eRanking)
'//Actualizamos el ranking
    Dim LoopC            As Long
    ReDim TmpRank(1 To Top_Rank) As tRanking
  

    With UserList(UserIndex)
        Select Case eRank
            Case eRanking.Lvl
                'Hacemos una copia del array.
                For LoopC = 1 To Top_Rank
                    TmpRank(LoopC) = RankingLevel(LoopC)
                Next LoopC
                
                'Ahora corremos + 1 las posiciones.
                For LoopC = RankingIndex To Top_Rank - 1
                    RankingLevel(LoopC + 1) = TmpRank(LoopC)
                Next LoopC
              
                RankingLevel(RankingIndex).Lvl = UserList(UserIndex).Stats.ELV
                RankingLevel(RankingIndex).LvlName = UserList(UserIndex).name
                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking de nivel> El personaje " & .name & _
                    " ha subido a la posición " & RankingIndex & ".", FontTypeNames.FONTTYPE_GUILD))
                  
            Case eRanking.Oro
                'Hacemos una copia del array.
                For LoopC = 1 To Top_Rank
                    TmpRank(LoopC) = RankingOro(LoopC)
                Next LoopC
                
                'Ahora corremos + 1 las posiciones.
                For LoopC = RankingIndex To Top_Rank - 1
                    RankingOro(LoopC + 1) = TmpRank(LoopC)
                Next LoopC
              
                RankingOro(RankingIndex).Oro = UserList(UserIndex).Stats.GLD
                RankingOro(RankingIndex).OroName = UserList(UserIndex).name
                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking de oro> El personaje " & .name & _
                    " ha subido a la posición " & RankingIndex & ".", FontTypeNames.FONTTYPE_GUILD))
          
            Case eRanking.Ciudadanos
                'Hacemos una copia del array.
                For LoopC = 1 To Top_Rank
                    TmpRank(LoopC) = RankingCiudadanos(LoopC)
                Next LoopC
                
                'Ahora corremos + 1 las posiciones.
                For LoopC = RankingIndex To Top_Rank - 1
                    RankingCiudadanos(LoopC + 1) = TmpRank(LoopC)
                Next LoopC
              
                RankingCiudadanos(RankingIndex).Ciudadanos = UserList(UserIndex).Faccion.CiudadanosMatados
                RankingCiudadanos(RankingIndex).CiudadanosName = UserList(UserIndex).name
                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking de ciudadanos> El personaje " & .name & _
                    " ha subido a la posición " & RankingIndex & " con " & UserList(UserIndex).Faccion.CiudadanosMatados & " ciudadanos matados.", FontTypeNames.FONTTYPE_GUILD))
      
            Case eRanking.Criminales
                'Hacemos una copia del array.
                For LoopC = 1 To Top_Rank
                    TmpRank(LoopC) = RankingCriminales(LoopC)
                Next LoopC
                
                'Ahora corremos + 1 las posiciones.
                For LoopC = RankingIndex To Top_Rank - 1
                    RankingCriminales(LoopC + 1) = TmpRank(LoopC)
                Next LoopC
              
                RankingCriminales(RankingIndex).Criminales = UserList(UserIndex).Faccion.CriminalesMatados
                RankingCriminales(RankingIndex).CriminalesName = UserList(UserIndex).name
                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking de criminales> El personaje " & .name & _
                    " ha subido a la posición " & RankingIndex & " con " & UserList(UserIndex).Faccion.CriminalesMatados & " criminales matados.", FontTypeNames.FONTTYPE_GUILD))

        End Select
    
    End With
End Sub

Saque algunas cosas del de matih.-, pero al final terminaron siendo pocas porque lo hice de vuelta xD

Es facil el uso

Con este chequeamos el ingreso del personaje (connectuser)
Código:
CheckIngresoRanking UserIndex
Despues para guardar el archivo (Ls dejo como lo tenia yo para que se den cuenta)

Código:
If Minutos = 30 Then
    Call SaveRanking
    Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking de Personajes> Actualizado.", FontTypeNames.FONTTYPE_VENENO))
ElseIf Minutos = 45 Then
    Call SaveRankingClan
    Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Ranking de Clanes> Actualizado.", FontTypeNames.FONTTYPE_VENENO))
    TimeLimpieza = 6
End If

Y con este lo cargamos. (Sub main)

Código:
LoadRankingUsuarios


Despues si en algn momento necesito, haré otro mejor jaja pero este lo libero porque no lo uso mas ;P




edit:

Para enviar el ranking

Código:
Public Sub WriteEnviarRankingUsers(ByVal UserIndex As Integer)
'Author: Lautaro Marino
'Enviamos la lista del ranking optimizada :D
'
'
Dim i As Long
Dim tmpStr As String
Dim tmpStr2 As String

On Error GoTo Errhandler

    With UserList(UserIndex)
        .outgoingData.WriteByte ServerPacketID.enviarrankingusers
       
        tmpStr = "-"
        tmpStr2 = "-"
       
        'top15 de lvl
        For i = 1 To 15
            tmpStr = tmpStr & RankingLevel(i).LvlName & "-"
            tmpStr2 = tmpStr2 & RankingLevel(i).Lvl & "-"
        Next i
       
        'top15 de oro
        For i = 1 To 15
            tmpStr = tmpStr & RankingOro(i).OroName & "-"
            tmpStr2 = tmpStr2 & RankingOro(i).Oro & "-"
        Next i
       
        'top15 de ciudas
        For i = 1 To 15
            tmpStr = tmpStr & RankingCiudadanos(i).CiudadanosName & "-"
            tmpStr2 = tmpStr2 & RankingCiudadanos(i).Ciudadanos & "-"
        Next i
       
        For i = 1 To 15
            tmpStr = tmpStr & RankingCriminales(i).CriminalesName & "-"
            tmpStr2 = tmpStr2 & RankingCriminales(i).Criminales & "-"
        Next i


        Call .outgoingData.WriteASCIIString(Left$(tmpStr, Len(tmpStr) - 1))
        Call .outgoingData.WriteASCIIString(Left$(tmpStr2, Len(tmpStr2) - 1))
    End With
Exit Sub

Errhandler:
    If Err.Number = UserList(UserIndex).outgoingData.NotEnoughSpaceErrCode Then
        Call FlushBuffer(UserIndex)
        Resume
    End If
End Sub

Lo recibimos en el cliente:

Código:
Public Sub HandleEnviarRankingUsers()
'Author: Shak
'Recibimos el ranking
'
'
    If incomingData.length < 3 Then
        Err.Raise incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
   
On Error GoTo ErrHandler
    Dim Buffer As New clsByteQueue
    Call Buffer.CopyBuffer(incomingData)
   
       
       
    Dim lista() As String
    Dim lista2() As String
    Dim asd() As String
    Dim asd2() As String
    Dim asdfg As Long
    Dim Mensaje As String
    Dim i As Integer
   
    Dim tmpStr As String
    Dim tmpStr2 As String
   
    'Leemos el id del paquete
    Call Buffer.ReadByte

    'Leemos el string
    tmpStr = Buffer.ReadASCIIString
    tmpStr2 = Buffer.ReadASCIIString
   
    asd = Split(tmpStr, "-")
    asd2 = Split(tmpStr2, "-")
   
    'redimensiono el array de listaprocesos
    ReDim lista(LBound(asd()) To UBound(asd()))
    ReDim lista2(LBound(asd2()) To UBound(asd2()))
   
    'ahora lleno el array principal (classProhibida)
    For asdfg = LBound(asd()) + 1 To UBound(asd())
        'Ranking(asdfg).LvlName = asd(asdfg)
        lista(asdfg) = asd(asdfg)
        lista2(asdfg) = asd2(asdfg)
       
        If asdfg <= 15 Then
            Ranking(asdfg).LvlName = lista(asdfg)
            Ranking(asdfg).Lvl = lista2(asdfg)
           
        ElseIf asdfg <= 30 Then
            Ranking(asdfg).OroName = lista(asdfg)
            Ranking(asdfg).Oro = lista2(asdfg)
        ElseIf asdfg <= 45 Then
            Ranking(asdfg).CiudadanosName = lista(asdfg)
            Ranking(asdfg).Ciudadanos = lista2(asdfg)
         ElseIf asdfg <= 60 Then
            Ranking(asdfg).CriminalesName = lista(asdfg)
            Ranking(asdfg).criminales = lista2(asdfg)
        End If
    Next asdfg

   
    'ReDim RankingData(LBound(asd2()) To UBound(asd2()))
    'ahora lleno el array principal (classProhibida)
    'For asdfg = LBound(asd2()) To UBound(asd2())
       ' RankingData(asdfg).Lvl = asd2(asdfg)
   ' Next asdfg
   
    For i = 1 To 15
        FrmRanking.LblRanking(i).Caption = Ranking(i).LvlName & "-" & Ranking(i).Lvl
    Next i
   
    Call FrmRanking.Show(vbModeless, frmMain)
   
    'Copiamos de vuelta el buffer
    Call incomingData.CopyBuffer(Buffer)

ErrHandler:
    Dim Error As Long
    Error = Err.Number
On Error GoTo 0
   
    'Destroy auxiliar buffer
    Set Buffer = Nothing

    If Error <> 0 Then _
        Err.Raise Error
End Sub
Otros:

Código:
Public Type tRankingData
    Lvl As Byte
    Oro As Long
    Ciudadanos As Integer
    criminales As Integer
    LvlName As String
    OroName As String
    CiudadanosName As String
    CriminalesName As String
End Type

Public Ranking(1 To 60) As tRankingData
Y despues para que ande bien:

Código:
Private Sub Image2_Click()
    For i = 31 To 45
       
        Me.LblRanking(i - 30).Caption = Ranking(i).CiudadanosName & "\" & Ranking(i).Ciudadanos
       
        Me.LblRanking(i - 30).Refresh
    Next i
End Sub

Private Sub Image3_Click()
    For i = 46 To 60
       
        Me.LblRanking(i - 45).Caption = Ranking(i).CriminalesName & "\" & Ranking(i).criminales
       
        Me.LblRanking(i - 45).Refresh
    Next i
End Sub

Private Sub Image4_Click()
    For i = 1 To 15
       
        Me.LblRanking(i).Caption = Ranking(i).LvlName & "\" & Ranking(i).Lvl
       
        Me.LblRanking(i).Refresh
    Next i
End Sub

Private Sub Image5_Click()
    For i = 16 To 30
       
        Me.LblRanking(i - 15).Caption = Ranking(i).OroName & "\" & Ranking(i).Oro
       
        Me.LblRanking(i - 15).Refresh
    Next i
End Sub

Private Sub Image1_Click()
Unload Me
End Sub
 

Dr. GoDKeR

El Rey y el As
Miembro del equipo
Administrador
Developer
Moderador de RRPP
Moderador de AO
Moderador de Tecnología
Moderador de Entretenimiento
Moderador de Diseño
Especialista de RRPP
Especialista de Entretenimiento
Especialista de Tecnología
Especialista de Argentum
Especialista de Diseño
Empece a leerlo y me pare al principio.

Código:
Type tRanking
    LvlName As String
    Lvl As Byte
    OroName As String
    Oro As Long
    CriminalesName As String
    Criminales As Integer
    CiudadanosName As String
    Ciudadanos As Integer
    TorneosName As String
    Torneos As Integer
    DuelosName As String
    Duelos As Integer
End Type
Public RankingLevel() As tRanking
Public RankingOro() As tRanking
Public RankingCriminales() As tRanking
Public RankingCiudadanos() As tRanking
Public DuelosGanados() As tRanking
Por que RankingLevel tiene que apuntar a tantos datos al pedo(torneos, duelos, etc)?

No se si se entiende a lo que voy, pero esta mal pensado. El tRakning solo deberia tener: UserName y Value.
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Empece a leerlo y me pare al principio.

Código:
Type tRanking
    LvlName As String
    Lvl As Byte
    OroName As String
    Oro As Long
    CriminalesName As String
    Criminales As Integer
    CiudadanosName As String
    Ciudadanos As Integer
    TorneosName As String
    Torneos As Integer
    DuelosName As String
    Duelos As Integer
End Type
Public RankingLevel() As tRanking
Public RankingOro() As tRanking
Public RankingCriminales() As tRanking
Public RankingCiudadanos() As tRanking
Public DuelosGanados() As tRanking
Por que RankingLevel tiene que apuntar a tantos datos al pedo(torneos, duelos, etc)?

No se si se entiende a lo que voy, pero esta mal pensado. El tRakning solo deberia tener: UserName y Value.
Claro por eso dije que no lo usaba mas xD esta version es la primera, que anda al 100% por mas que no sea la mas eficiente.
Hice otro tipo de ranking, mas complejo y con otras cosas. Y este lo hice mejor, solamente tengo declarada un ranking() as tranking xD

y hecho de otra forma


Si queres te lo muestro godker, pero como es para un proyecto no lo puedo postear xd
 
G

G Toyz

Invitado
¿Para qué aportar el sistema ranking "mal" hecho?
Hay uno aportado de una mejor manera.

Igual, bueno, la intención cuenta y las ganas de revivir la sección también. Espero que sigas aportando :p
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
¿Para qué aportar el sistema ranking "mal" hecho?
Hay uno aportado de una mejor manera.

Igual, bueno, la intención cuenta y las ganas de revivir la sección también. Espero que sigas aportando :p
No esta mal hecho, esta hecho de una forma menos eficiente mono. Pero bien anda, lo que seria Marcar el top15 de cada uno anda,y eso es lo importante.

Ahora que se puede mejorar mucho mas obviamente para eso esta el codigo ajha
 
G

G Toyz

Invitado
Si si, por eso lo puse entre comillas, no hay código funcional que esté mal programado :p
 
Arriba