Eliminar sistema de Skill (COMPLETO) 13.0

Ir abajo

Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Toyz el 14/7/2016, 12:37 am

Para un virgen funciona perfecto, pero si tenés un servidor ya desarrollado, quizás tengas problemas al reemplazar el sub que tocaste. Por eso, si ves un sub que tocaste, comparalo con el tuyo y vas editando las partes necesarias (y no todo el sub).

Reemplazar el sub "Sub AccionParaRamita" :
Código:

Sub AccionParaRamita(ByVal Map As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    On Error Resume Next
    
    Dim exito As Byte
    Dim Obj As Obj
    
    Dim Pos As WorldPos
    Pos.Map = Map
    Pos.X = X
    Pos.Y = Y

    With UserList(UserIndex)
        If Distancia(Pos, .Pos) > 2 Then
            Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos.", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
        
        If MapData(Map, X, Y).trigger = eTrigger.ZONASEGURA Or MapInfo(Map).Pk = False Then
            Call WriteConsoleMsg(UserIndex, "No puedes hacer fogatas en zona segura.", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
        
        exito = RandomNumber(1, RandomNumber(1, 3))
        
        If exito = 1 Then
            If MapInfo(.Pos.Map).Zona <> Ciudad Then
                Obj.ObjIndex = FOGATA
                Obj.Amount = 1
                
                Call WriteConsoleMsg(UserIndex, "Has prendido la fogata.", FontTypeNames.FONTTYPE_INFO)
                
                Call MakeObj(Obj, Map, X, Y)
                
                'Las fogatas prendidas se deben eliminar
                Dim Fogatita As New cGarbage
                Fogatita.Map = Map
                Fogatita.X = X
                Fogatita.Y = Y
                Call TrashCollector.Add(Fogatita)
            Else
                Call WriteConsoleMsg(UserIndex, "La ley impide realizar fogatas en las ciudades.", FontTypeNames.FONTTYPE_INFO)
                Exit Sub
            End If
        Else
            Call WriteConsoleMsg(UserIndex, "No has podido hacer fuego.", FontTypeNames.FONTTYPE_INFO)
        End If
    
    End With

End Sub

Eliminar:
Código:

Public Const NUMSKILLS As Byte = 20
Código:

Public Const MAXSKILLPOINTS As Byte = 100
Código:

Public Enum eSkill
    Magia = 1
    Robar = 2
    Tacticas = 3
    Armas = 4
    Meditar = 5
    Apuñalar = 6
    Ocultarse = 7
    Supervivencia = 8
    Talar = 9
    Comerciar = 10
    Defensa = 11
    Pesca = 12
    Mineria = 13
    Carpinteria = 14
    Herreria = 15
    Liderazgo = 16
    Domar = 17
    Proyectiles = 18
    Wrestling = 19
    Navegacion = 20
End Enum
 
eliminan:
Código:

Public Const ELU_SKILL_INICIAL As Byte = 200
Public Const EXP_ACIERTO_SKILL As Byte = 50
Public Const EXP_FALLO_SKILL As Byte = 20
eliminan las dos veces que aparece:
Código:

minskill as integer
eliminan:
Código:

    ExpSkills(1 To NUMSKILLS) As Long
    EluSkills(1 To NUMSKILLS) As Long
    
eliminan:
Código:

    SkillPts As Integer
eliminan:
Código:

    AsignedSkills As Byte
eliminan:
Código:

Public SkillsNames(1 To NUMSKILLS) As String
eliminan:
Código:

Public LevelSkill(1 To 50) As LevelSkill
eliminan:
Código:

    SkillDomar As Integer
eliminan:
Código:

.MinSkill = val(Leer.GetValue("Hechizo" & Hechizo, "MinSkill"))
eliminan:
Código:

.MinSkill = val(Leer.GetValue("OBJ" & Object, "MinSkill"))
eliminan:
Código:

.MinSkill = val(Leer.GetValue("OBJ" & Object, "MinSkill"))
eliminan:
Código:

For LoopC = 1 To NUMSKILLS
            .UserSkills(LoopC) = CInt(UserFile.GetValue("SKILLS", "SK" & LoopC))
            .EluSkills(LoopC) = CInt(UserFile.GetValue("SKILLS", "ELUSK" & LoopC))
            .ExpSkills(LoopC) = CInt(UserFile.GetValue("SKILLS", "EXPSK" & LoopC))
        Next LoopC
eliminan:

Código:

.SkillPts = CInt(UserFile.GetValue("STATS", "SkillPtsLibres"))
ELIMINAN:
Código:

.Counters.AsignedSkills = CByte(val(UserFile.GetValue("COUNTERS", "SkillsAsignados")))
eliminan:
Código:

    Call WriteVar(UserFile, "COUNTERS", "SkillsAsignados", CStr(.Counters.AsignedSkills))
eliminan:
Código:

For LoopC = 1 To UBound(.Stats.UserSkills)
        Call WriteVar(UserFile, "SKILLS", "SK" & LoopC, CStr(.Stats.UserSkills(LoopC)))
        Call WriteVar(UserFile, "SKILLS", "ELUSK" & LoopC, CStr(.Stats.EluSkills(LoopC)))
        Call WriteVar(UserFile, "SKILLS", "EXPSK" & LoopC, CStr(.Stats.ExpSkills(LoopC)))
    Next LoopC
eliminan:
Código:

    Call WriteVar(UserFile, "STATS", "SkillPtsLibres", CStr(.Stats.SkillPts))
eliminan:
Código:

                Dim SupervivenciaSkill As Byte
Eliminan:
Código:

SupervivenciaSkill = UserList(UserIndex).Stats.UserSkills(eSkill.Supervivencia)
eliminan:
Código:

If SupervivenciaSkill >= 0 And SupervivenciaSkill <= 10 Then
                            estatus = "(Dudoso) "
                        ElseIf SupervivenciaSkill > 10 And SupervivenciaSkill <= 20 Then
                            If MinHp < (MaxHp / 2) Then
                                estatus = "(Herido) "
                            Else
                                estatus = "(Sano) "
                            End If
                        ElseIf SupervivenciaSkill > 20 And SupervivenciaSkill <= 30 Then
                            If MinHp < (MaxHp * 0.5) Then
                                estatus = "(Malherido) "
                            ElseIf MinHp < (MaxHp * 0.75) Then
                                estatus = "(Herido) "
                            Else
                                estatus = "(Sano) "
                            End If
                        ElseIf SupervivenciaSkill > 30 And SupervivenciaSkill <= 40 Then
                            If MinHp < (MaxHp * 0.25) Then
                                estatus = "(Muy malherido) "
                            ElseIf MinHp < (MaxHp * 0.5) Then
                                estatus = "(Herido) "
                            ElseIf MinHp < (MaxHp * 0.75) Then
                                estatus = "(Levemente herido) "
                            Else
                                estatus = "(Sano) "
                            End If
                        ElseIf SupervivenciaSkill > 40 And SupervivenciaSkill < 60 Then
                            If MinHp < (MaxHp * 0.05) Then
                                estatus = "(Agonizando) "
                            ElseIf MinHp < (MaxHp * 0.1) Then
                                estatus = "(Casi muerto) "
                            ElseIf MinHp < (MaxHp * 0.25) Then
                                estatus = "(Muy Malherido) "
                            ElseIf MinHp < (MaxHp * 0.5) Then
                                estatus = "(Herido) "
                            ElseIf MinHp < (MaxHp * 0.75) Then
                                estatus = "(Levemente herido) "
                            ElseIf MinHp < (MaxHp) Then
                                estatus = "(Sano) "
                            Else
                                estatus = "(Intacto) "
                            End If

Reemplazan esta linea:
Código:

ElseIf SupervivenciaSkill >= 60 Then
Por esta:
Código:

If SupervivenciaSkill >= 60 Then

eliminan:
Código:

SkillsNames(eSkill.Magia) = "Magia"
    SkillsNames(eSkill.Robar) = "Robar"
    SkillsNames(eSkill.Tacticas) = "Evasión en combate"
    SkillsNames(eSkill.Armas) = "Combate con armas"
    SkillsNames(eSkill.Meditar) = "Meditar"
    SkillsNames(eSkill.Apuñalar) = "Apuñalar"
    SkillsNames(eSkill.Ocultarse) = "Ocultarse"
    SkillsNames(eSkill.Supervivencia) = "Supervivencia"
    SkillsNames(eSkill.Talar) = "Talar"
    SkillsNames(eSkill.Comerciar) = "Comercio"
    SkillsNames(eSkill.Defensa) = "Defensa con escudos"
    SkillsNames(eSkill.Pesca) = "Pesca"
    SkillsNames(eSkill.Mineria) = "Mineria"
    SkillsNames(eSkill.Carpinteria) = "Carpinteria"
    SkillsNames(eSkill.Herreria) = "Herreria"
    SkillsNames(eSkill.Liderazgo) = "Liderazgo"
    SkillsNames(eSkill.Domar) = "Domar animales"
    SkillsNames(eSkill.Proyectiles) = "Combate a distancia"
    SkillsNames(eSkill.Wrestling) = "Combate sin armas"
    SkillsNames(eSkill.Navegacion) = "Navegacion"
    

eliminan:
Código:

LevelSkill(1).LevelValue = 3
    LevelSkill(2).LevelValue = 5
    LevelSkill(3).LevelValue = 7
    LevelSkill(4).LevelValue = 10
    LevelSkill(5).LevelValue = 13
    LevelSkill(6).LevelValue = 15
    LevelSkill(7).LevelValue = 17
    LevelSkill(8).LevelValue = 20
    LevelSkill(9).LevelValue = 23
    LevelSkill(10).LevelValue = 25
    LevelSkill(11).LevelValue = 27
    LevelSkill(12).LevelValue = 30
    LevelSkill(13).LevelValue = 33
    LevelSkill(14).LevelValue = 35
    LevelSkill(15).LevelValue = 37
    LevelSkill(16).LevelValue = 40
    LevelSkill(17).LevelValue = 43
    LevelSkill(18).LevelValue = 45
    LevelSkill(19).LevelValue = 47
    LevelSkill(20).LevelValue = 50
    LevelSkill(21).LevelValue = 53
    LevelSkill(22).LevelValue = 55
    LevelSkill(23).LevelValue = 57
    LevelSkill(24).LevelValue = 60
    LevelSkill(25).LevelValue = 63
    LevelSkill(26).LevelValue = 65
    LevelSkill(27).LevelValue = 67
    LevelSkill(28).LevelValue = 70
    LevelSkill(29).LevelValue = 73
    LevelSkill(30).LevelValue = 75
    LevelSkill(31).LevelValue = 77
    LevelSkill(32).LevelValue = 80
    LevelSkill(33).LevelValue = 83
    LevelSkill(34).LevelValue = 85
    LevelSkill(35).LevelValue = 87
    LevelSkill(36).LevelValue = 90
    LevelSkill(37).LevelValue = 93
    LevelSkill(38).LevelValue = 95
    LevelSkill(39).LevelValue = 97
    LevelSkill(40).LevelValue = 100
    LevelSkill(41).LevelValue = 100
    LevelSkill(42).LevelValue = 100
    LevelSkill(43).LevelValue = 100
    LevelSkill(44).LevelValue = 100
    LevelSkill(45).LevelValue = 100
    LevelSkill(46).LevelValue = 100
    LevelSkill(47).LevelValue = 100
    LevelSkill(48).LevelValue = 100
    LevelSkill(49).LevelValue = 100
    LevelSkill(50).LevelValue = 100
remplazar:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, eSkill.Proyectiles)
por :
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 18)
esto:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, eSkill.Pesca)
por esto:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 12)
esto:
Código:

 Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, eSkill.Talar)
por esto:
Código:

 Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 9)
esto:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, eSkill.Mineria)
por esto:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 13)
esto:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, eSkill.Herreria)
por esto:
Código:

Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 15)
reemplazan:
Código:

Public Function PuedeCrearParty(ByVal UserIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    PuedeCrearParty = True
'    If UserList(UserIndex).Stats.ELV < MINPARTYLEVEL Then
    
    If CInt(UserList(UserIndex).Stats.UserAtributos(eAtributos.Carisma)) < 100 Then
        Call WriteConsoleMsg(UserIndex, "Tu carisma y liderazgo no son suficientes para liderar una party.", FontTypeNames.FONTTYPE_PARTY)
        PuedeCrearParty = False
    ElseIf UserList(UserIndex).flags.Muerto = 1 Then
        Call WriteConsoleMsg(UserIndex, "¡¡Estás muerto!!", FontTypeNames.FONTTYPE_PARTY)
        PuedeCrearParty = False
    End If
End Function
por esto:

Código:

Public Function PuedeCrearParty(ByVal UserIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: toy 13/7
'
'***************************************************

    PuedeCrearParty = True

    If UserList(UserIndex).flags.Muerto = 1 Then
        Call WriteConsoleMsg(UserIndex, "¡¡Estás muerto!!", FontTypeNames.FONTTYPE_PARTY)
        PuedeCrearParty = False
    End If
    
End Function

esto:
Código:

Public Sub CrearParty(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

Dim tInt As Integer

With UserList(UserIndex)
    If .PartyIndex = 0 Then
        If .flags.Muerto = 0 Then
            If .Stats.UserSkills(eSkill.Liderazgo) >= 5 Then
                tInt = mdParty.NextParty
                If tInt = -1 Then
                    Call WriteConsoleMsg(UserIndex, "Por el momento no se pueden crear más parties.", FontTypeNames.FONTTYPE_PARTY)
                    Exit Sub
                Else
                    Set Parties(tInt) = New clsParty
                    If Not Parties(tInt).NuevoMiembro(UserIndex) Then
                        Call WriteConsoleMsg(UserIndex, "La party está llena, no puedes entrar.", FontTypeNames.FONTTYPE_PARTY)
                        Set Parties(tInt) = Nothing
                        Exit Sub
                    Else
                        Call WriteConsoleMsg(UserIndex, "¡Has formado una party!", FontTypeNames.FONTTYPE_PARTY)
                        .PartyIndex = tInt
                        .PartySolicitud = 0
                        If Not Parties(tInt).HacerLeader(UserIndex) Then
                            Call WriteConsoleMsg(UserIndex, "No puedes hacerte líder.", FontTypeNames.FONTTYPE_PARTY)
                        Else
                            Call WriteConsoleMsg(UserIndex, "¡Te has convertido en líder de la party!", FontTypeNames.FONTTYPE_PARTY)
                        End If
                    End If
                End If
            Else
                Call WriteConsoleMsg(UserIndex, "No tienes suficientes puntos de liderazgo para liderar una party.", FontTypeNames.FONTTYPE_PARTY)
            End If
        Else
            Call WriteConsoleMsg(UserIndex, "¡¡Estás muerto!!", FontTypeNames.FONTTYPE_PARTY)
        End If
    Else
        Call WriteConsoleMsg(UserIndex, "Ya perteneces a una party.", FontTypeNames.FONTTYPE_PARTY)
    End If
End With
End Sub

por esto:

Código:

Public Sub CrearParty(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim tInt As Integer

    With UserList(UserIndex)
        If .PartyIndex = 0 Then
            If .flags.Muerto = 0 Then
                tInt = mdParty.NextParty
                If tInt = -1 Then
                    Call WriteConsoleMsg(UserIndex, "Por el momento no se pueden crear más parties.", FontTypeNames.FONTTYPE_PARTY)
                    Exit Sub
                Else
                    Set Parties(tInt) = New clsParty
                    If Not Parties(tInt).NuevoMiembro(UserIndex) Then
                        Call WriteConsoleMsg(UserIndex, "La party está llena, no puedes entrar.", FontTypeNames.FONTTYPE_PARTY)
                        Set Parties(tInt) = Nothing
                        Exit Sub
                    Else
                        Call WriteConsoleMsg(UserIndex, "¡Has formado una party!", FontTypeNames.FONTTYPE_PARTY)
                        .PartyIndex = tInt
                        .PartySolicitud = 0
                        If Not Parties(tInt).HacerLeader(UserIndex) Then
                            Call WriteConsoleMsg(UserIndex, "No puedes hacerte líder.", FontTypeNames.FONTTYPE_PARTY)
                        Else
                            Call WriteConsoleMsg(UserIndex, "¡Te has convertido en líder de la party!", FontTypeNames.FONTTYPE_PARTY)
                        End If
                    End If
                End If
            Else
                Call WriteConsoleMsg(UserIndex, "¡¡Estás muerto!!", FontTypeNames.FONTTYPE_PARTY)
            End If
        Else
            Call WriteConsoleMsg(UserIndex, "Ya perteneces a una party.", FontTypeNames.FONTTYPE_PARTY)
    End If
    
    End With
End Sub
Esto:
Código:

    If UserList(UserIndex).Stats.ELV < 25 Or UserList(UserIndex).Stats.UserSkills(eSkill.Liderazgo) < 90 Then
        refError = "Para fundar un clan debes ser nivel 25 y tener 90 skills en liderazgo."
        Exit Function
    End If
Por esto:
Código:

    If UserList(UserIndex).Stats.ELV < 25 Then
        refError = "Para fundar un clan debes ser nivel 25."
        Exit Function
    End If
Eliminan:
Código:

If .Stats.UserSkills(eSkill.Magia) < Hechizos(HechizoIndex).MinSkill Then
            Call WriteConsoleMsg(UserIndex, "No tienes suficientes puntos de magia para lanzar este hechizo.", FontTypeNames.FONTTYPE_INFO)
            Exit Function
        End If
Eliminar todas las veces que aparezca:
Código:

Call SubirSkill(UserIndex, eSkill.Magia, True)
Eliminan:
Código:

Call SubirSkill(UserIndex, eSkill.Comerciar, True)
Reemplazan toda esta funcion:
Código:

Private Function Descuento(ByVal UserIndex As Integer) As Single
Por esta:
Código:

Private Function Descuento(ByVal UserIndex As Integer) As Single
'*************************************************
'Author: Nacho (Integer)
'Last modified: 2/8/06
'*************************************************
    Descuento = 2
End Function

Eliminan:
Código:

        .SkillDomar = 0
Reemplazan todo el:
Código:

Public Function UsuarioImpacto(ByVal AtacanteIndex As Integer, ByVal VictimaIndex As Integer) As Boolean

Por este:
Código:

Public Function UsuarioImpacto(ByVal AtacanteIndex As Integer, ByVal VictimaIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

On Error GoTo Errhandler

    Dim ProbRechazo As Long
    Dim Rechazo As Boolean
    Dim ProbExito As Long
    Dim PoderAtaque As Long
    Dim UserPoderEvasion As Long
    Dim UserPoderEvasionEscudo As Long
    Dim Arma As Integer
    Dim Tacticas As Long
    Dim Defensa As Long
    Dim ProbEvadir As Long
    
    
    'NUEVO SKILLS:
    Tacticas = 100
    Defensa = 100
    
    Arma = UserList(AtacanteIndex).Invent.WeaponEqpObjIndex
    
    'Calculamos el poder de evasion...
    UserPoderEvasion = PoderEvasion(VictimaIndex)
    
    If UserList(VictimaIndex).Invent.EscudoEqpObjIndex > 0 Then
       UserPoderEvasionEscudo = PoderEvasionEscudo(VictimaIndex)
       UserPoderEvasion = UserPoderEvasion + UserPoderEvasionEscudo
    Else
        UserPoderEvasionEscudo = 0
    End If
    
    'Esta usando un arma ???
    If UserList(AtacanteIndex).Invent.WeaponEqpObjIndex > 0 Then
        If ObjData(Arma).proyectil = 1 Then
            PoderAtaque = PoderAtaqueProyectil(AtacanteIndex)
        Else
            PoderAtaque = PoderAtaqueArma(AtacanteIndex)
        End If
    Else
        PoderAtaque = PoderAtaqueWrestling(AtacanteIndex)
    End If
    
    ' Chances are rounded
    ProbExito = MaximoInt(10, MinimoInt(90, 50 + (PoderAtaque - UserPoderEvasion) * 0.4))
    
    ' Se reduce la evasion un 25%
    If UserList(VictimaIndex).flags.Meditando = True Then
        ProbEvadir = (100 - ProbExito) * 0.75
        ProbExito = MinimoInt(90, 100 - ProbEvadir)
    End If
    
    UsuarioImpacto = (RandomNumber(1, 100) <= ProbExito)
    
    ' el usuario esta usando un escudo ???
    If UserList(VictimaIndex).Invent.EscudoEqpObjIndex > 0 Then
        'Fallo ???
        If Not UsuarioImpacto Then
            ' Chances are rounded
            ProbRechazo = MaximoInt(10, MinimoInt(90, 100 * Defensa / (Defensa + Tacticas)))
            Rechazo = (RandomNumber(1, 100) <= ProbRechazo)
            If Rechazo Then
                'Se rechazo el ataque con el escudo
                Call SendData(SendTarget.ToPCArea, VictimaIndex, PrepareMessagePlayWave(SND_ESCUDO, UserList(VictimaIndex).Pos.X, UserList(VictimaIndex).Pos.Y))
                  
                Call WriteMultiMessage(AtacanteIndex, eMessages.BlockedWithShieldother)
                Call WriteMultiMessage(VictimaIndex, eMessages.BlockedWithShieldUser)

            End If
        End If
    End If
    
    Call FlushBuffer(VictimaIndex)
    
    Exit Function
    
Errhandler:
    Dim AtacanteNick As String
    Dim VictimaNick As String
    
    If AtacanteIndex > 0 Then AtacanteNick = UserList(AtacanteIndex).name
    If VictimaIndex > 0 Then VictimaNick = UserList(VictimaIndex).name
    
    Call LogError("Error en UsuarioImpacto. Error " & Err.Number & " : " & Err.description & " AtacanteIndex: " & _
             AtacanteIndex & " Nick: " & AtacanteNick & " VictimaIndex: " & VictimaIndex & " Nick: " & VictimaNick)
End Function
Reemplazan esta función:
Código:

Private Function PoderEvasionEscudo(ByVal UserIndex As Integer) As Long
Por esta:
Código:

Private Function PoderEvasionEscudo(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    PoderEvasionEscudo = (100 * ModClase(UserList(UserIndex).clase).Escudo) / 2
End Function
Código:

Reemplazan esta función:

Private Function PoderEvasion(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************
    Dim lTemp As Long
    With UserList(UserIndex)
        lTemp = (.Stats.UserSkills(eSkill.Tacticas) + _
          .Stats.UserSkills(eSkill.Tacticas) / 33 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).Evasion
      
        PoderEvasion = (lTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
    End With
End Function
Por esta:
Código:

Private Function PoderEvasion(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************
    Dim lTemp As Long
    
    With UserList(UserIndex)
    
        lTemp = (200 / 33 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).Evasion
        PoderEvasion = (lTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
        
    End With
    
End Function
Reemplazan esta función:
Código:

Private Function PoderAtaqueArma(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaqueTemp As Long
    
    With UserList(UserIndex)
        If .Stats.UserSkills(eSkill.Armas) < 31 Then
            PoderAtaqueTemp = .Stats.UserSkills(eSkill.Armas) * ModClase(.clase).AtaqueArmas
        ElseIf .Stats.UserSkills(eSkill.Armas) < 61 Then
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Armas) + .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueArmas
        ElseIf .Stats.UserSkills(eSkill.Armas) < 91 Then
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Armas) + 2 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueArmas
        Else
           PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Armas) + 3 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueArmas
        End If
        
        PoderAtaqueArma = (PoderAtaqueTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
    End With
End Function
por esta:
Código:

Private Function PoderAtaqueArma(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaqueTemp As Long
    
    With UserList(UserIndex)
    
        PoderAtaqueTemp = (100 + 3 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueArmas

        PoderAtaqueArma = (PoderAtaqueTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
    
    End With
    
End Function
Reemplazan esta función:
Código:

Private Function PoderAtaqueProyectil(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaqueTemp As Long
    
    With UserList(UserIndex)
        If .Stats.UserSkills(eSkill.Proyectiles) < 31 Then
            PoderAtaqueTemp = .Stats.UserSkills(eSkill.Proyectiles) * ModClase(.clase).AtaqueProyectiles
        ElseIf .Stats.UserSkills(eSkill.Proyectiles) < 61 Then
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Proyectiles) + .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueProyectiles
        ElseIf .Stats.UserSkills(eSkill.Proyectiles) < 91 Then
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Proyectiles) + 2 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueProyectiles
        Else
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Proyectiles) + 3 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueProyectiles
        End If
        
        PoderAtaqueProyectil = (PoderAtaqueTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
    End With
End Function
por esta:
Código:

Private Function PoderAtaqueProyectil(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaqueTemp As Long
    
    With UserList(UserIndex)

        PoderAtaqueTemp = (100 + 3 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueProyectiles
        
        PoderAtaqueProyectil = (PoderAtaqueTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
        
    End With
    
End Function
Reemplazan toda esta función:
Código:

Public Function UserImpactoNpc(ByVal UserIndex As Integer, ByVal NpcIndex As Integer) As Boolean
por esta:
Código:

Public Function UserImpactoNpc(ByVal UserIndex As Integer, ByVal NpcIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaque As Long
    Dim Arma As Integer
    Dim ProbExito As Long
    
    Arma = UserList(UserIndex).Invent.WeaponEqpObjIndex
    
    If Arma > 0 Then 'Usando un arma
        If ObjData(Arma).proyectil = 1 Then
            PoderAtaque = PoderAtaqueProyectil(UserIndex)
        Else
            PoderAtaque = PoderAtaqueArma(UserIndex)
        End If
    Else 'Peleando con puños
        PoderAtaque = PoderAtaqueWrestling(UserIndex)
    End If
    
    ' Chances are rounded
    ProbExito = MaximoInt(10, MinimoInt(90, 50 + ((PoderAtaque - Npclist(NpcIndex).PoderEvasion) * 0.4)))
    
    UserImpactoNpc = (RandomNumber(1, 100) <= ProbExito)
  
End Function
Reemplazan esta función:
Código:

Private Function PoderAtaqueWrestling(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaqueTemp As Long
    
    With UserList(UserIndex)
        If .Stats.UserSkills(eSkill.Wrestling) < 31 Then
            PoderAtaqueTemp = .Stats.UserSkills(eSkill.Wrestling) * ModClase(.clase).AtaqueWrestling
        ElseIf .Stats.UserSkills(eSkill.Wrestling) < 61 Then
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Wrestling) + .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueWrestling
        ElseIf .Stats.UserSkills(eSkill.Wrestling) < 91 Then
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Wrestling) + 2 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueWrestling
        Else
            PoderAtaqueTemp = (.Stats.UserSkills(eSkill.Wrestling) + 3 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueWrestling
        End If
        
        PoderAtaqueWrestling = (PoderAtaqueTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
    End With
End Function
Por esta:
Código:

Private Function PoderAtaqueWrestling(ByVal UserIndex As Integer) As Long
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim PoderAtaqueTemp As Long
    
    With UserList(UserIndex)
        
        PoderAtaqueTemp = (100 + 3 * .Stats.UserAtributos(eAtributos.Agilidad)) * ModClase(.clase).AtaqueWrestling
    
        PoderAtaqueWrestling = (PoderAtaqueTemp + (2.5 * MaximoInt(.Stats.ELV - 12, 0)))
    
    End With
    
End Function
Reemplazan esta función:
Código:

Public Function NpcImpacto(ByVal NpcIndex As Integer, ByVal UserIndex As Integer) As Boolean
por esta:
Código:

Public Function NpcImpacto(ByVal NpcIndex As Integer, ByVal UserIndex As Integer) As Boolean
'*************************************************
'Author: Unknown
'Last modified: 03/15/2006
'Revisa si un NPC logra impactar a un user o no
'03/15/2006 Maraxus - Evité una división por cero que eliminaba NPCs
'*************************************************
    Dim Rechazo As Boolean
    Dim ProbRechazo As Long
    Dim ProbExito As Long
    Dim UserEvasion As Long
    Dim NpcPoderAtaque As Long
    Dim PoderEvasioEscudo As Long
    Dim Tacticas As Long
    Dim Defensa As Long
    
    UserEvasion = PoderEvasion(UserIndex)
    NpcPoderAtaque = Npclist(NpcIndex).PoderAtaque
    PoderEvasioEscudo = PoderEvasionEscudo(UserIndex)
    
    'NUEVOS SKILLS:
    
    Tacticas = 100
    Defensa = 100
    
    'Esta usando un escudo ???
    If UserList(UserIndex).Invent.EscudoEqpObjIndex > 0 Then UserEvasion = UserEvasion + PoderEvasioEscudo
    
    ' Chances are rounded
    ProbExito = MaximoInt(10, MinimoInt(90, 50 + ((NpcPoderAtaque - UserEvasion) * 0.4)))
    
    NpcImpacto = (RandomNumber(1, 100) <= ProbExito)
    
    ' el usuario esta usando un escudo ???
    If UserList(UserIndex).Invent.EscudoEqpObjIndex > 0 Then
        If Not NpcImpacto Then
                ' Chances are rounded
                ProbRechazo = MaximoInt(10, MinimoInt(90, 100 * Defensa / (Defensa + Tacticas)))
                Rechazo = (RandomNumber(1, 100) <= ProbRechazo)
                
                If Rechazo Then
                    'Se rechazo el ataque con el escudo
                    Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(SND_ESCUDO, UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y))
                    Call WriteMultiMessage(UserIndex, eMessages.BlockedWithShieldUser) 'Call WriteBlockedWithShieldUser(UserIndex)
                End If
        End If
    End If
End Function
Reemplazan:
Código:

If daño > Fix(.Stats.MinHp / 100 * .Stats.UserAtributos(eAtributos.Inteligencia) * .Stats.UserSkills(eSkill.Meditar) / 100 * 12 / (RandomNumber(0, 5) + 7)) Then
por esta:
Código:

If daño > Fix(.Stats.MinHp / 100 * .Stats.UserAtributos(eAtributos.Inteligencia) * 100 / 100 * 12 / (RandomNumber(0, 5) + 7)) Then
Reemplazan:
Código:

Public Function NpcAtacaUser(ByVal NpcIndex As Integer, ByVal UserIndex As Integer) As Boolean
'*************************************************
'Author: Unknown
'Last modified: -
'
'*************************************************

    With UserList(UserIndex)
        If .flags.AdminInvisible = 1 Then Exit Function
        If (Not .flags.Privilegios And PlayerType.User) <> 0 And Not .flags.AdminPerseguible Then Exit Function
    End With
    
    With Npclist(NpcIndex)
        ' El npc puede atacar ???
        If .CanAttack = 1 Then
            NpcAtacaUser = True
            Call CheckPets(NpcIndex, UserIndex, False)
            
            If .Target = 0 Then .Target = UserIndex
            
            If UserList(UserIndex).flags.AtacadoPorNpc = 0 And UserList(UserIndex).flags.AtacadoPorUser = 0 Then
                UserList(UserIndex).flags.AtacadoPorNpc = NpcIndex
            End If
        Else
            NpcAtacaUser = False
            Exit Function
        End If
        
        .CanAttack = 0
        
        If .flags.Snd1 > 0 Then
            Call SendData(SendTarget.ToNPCArea, NpcIndex, PrepareMessagePlayWave(.flags.Snd1, .Pos.X, .Pos.Y))
        End If
    End With
    
    If NpcImpacto(NpcIndex, UserIndex) Then
        With UserList(UserIndex)
            Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(SND_IMPACTO, .Pos.X, .Pos.Y))
            
            If .flags.Meditando = False Then
                If .flags.Navegando = 0 Then
                    Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageCreateFX(.Char.CharIndex, FXSANGRE, 0))
                End If
            End If
            
            Call NpcDaño(NpcIndex, UserIndex)
            Call WriteUpdateHP(UserIndex)
            
            '¿Puede envenenar?
            If Npclist(NpcIndex).Veneno = 1 Then Call NpcEnvenenarUser(UserIndex)
        End With
        
        Call SubirSkill(UserIndex, eSkill.Tacticas, False)
    Else
        Call WriteMultiMessage(UserIndex, eMessages.NPCSwing)
        Call SubirSkill(UserIndex, eSkill.Tacticas, True)
    End If
    
    'Controla el nivel del usuario
    Call CheckUserLevel(UserIndex)
End Function
por esto:
Código:

Public Function NpcAtacaUser(ByVal NpcIndex As Integer, ByVal UserIndex As Integer) As Boolean
'*************************************************
'Author: Unknown
'Last modified: -
'
'*************************************************

    With UserList(UserIndex)
        If .flags.AdminInvisible = 1 Then Exit Function
        If (Not .flags.Privilegios And PlayerType.User) <> 0 And Not .flags.AdminPerseguible Then Exit Function
    End With
    
    With Npclist(NpcIndex)
        ' El npc puede atacar ???
        If .CanAttack = 1 Then
            NpcAtacaUser = True
            Call CheckPets(NpcIndex, UserIndex, False)
            
            If .Target = 0 Then .Target = UserIndex
            
            If UserList(UserIndex).flags.AtacadoPorNpc = 0 And UserList(UserIndex).flags.AtacadoPorUser = 0 Then
                UserList(UserIndex).flags.AtacadoPorNpc = NpcIndex
            End If
        Else
            NpcAtacaUser = False
            Exit Function
        End If
        
        .CanAttack = 0
        
        If .flags.Snd1 > 0 Then
            Call SendData(SendTarget.ToNPCArea, NpcIndex, PrepareMessagePlayWave(.flags.Snd1, .Pos.X, .Pos.Y))
        End If
    End With
    
    If NpcImpacto(NpcIndex, UserIndex) Then
        With UserList(UserIndex)
            Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(SND_IMPACTO, .Pos.X, .Pos.Y))
            
            If .flags.Meditando = False Then
                If .flags.Navegando = 0 Then
                    Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageCreateFX(.Char.CharIndex, FXSANGRE, 0))
                End If
            End If
            
            Call NpcDaño(NpcIndex, UserIndex)
            Call WriteUpdateHP(UserIndex)
            
            '¿Puede envenenar?
            If Npclist(NpcIndex).Veneno = 1 Then Call NpcEnvenenarUser(UserIndex)
        End With
        
    Else
        Call WriteMultiMessage(UserIndex, eMessages.NPCSwing)
    End If
    
    'Controla el nivel del usuario
    Call CheckUserLevel(UserIndex)
End Function
En el:
Código:

Public Function UsuarioAtacaUsuario(ByVal AtacanteIndex As Integer, ByVal VictimaIndex As Integer) As Boolean
Eliminan:
Código:

Call SubirSkill(VictimaIndex, eSkill.Tacticas, False)
y:
Código:

Call SubirSkill(VictimaIndex, eSkill.Tacticas, True)
En el:
Código:

Public Sub UserDañoUser(ByVal AtacanteIndex As Integer, ByVal VictimaIndex As Integer)

Buscan:
Código:

If .flags.Hambre = 0 And .flags.Sed = 0 Then
            'Si usa un arma quizas suba "Combate con armas"
            If .Invent.WeaponEqpObjIndex > 0 Then
                If ObjData(.Invent.WeaponEqpObjIndex).proyectil Then
                    'es un Arco. Sube Armas a Distancia
                    Call SubirSkill(AtacanteIndex, eSkill.Proyectiles, True)
                    
                    ' Si es arma arrojadiza..
                    If ObjData(.Invent.WeaponEqpObjIndex).Municion = 0 Then
                        ' Si acuchilla
                        If ObjData(.Invent.WeaponEqpObjIndex).Acuchilla = 1 Then
                            Call DoAcuchillar(AtacanteIndex, 0, VictimaIndex, daño)
                        End If
                    End If
                Else
                    'Sube combate con armas.
                    Call SubirSkill(AtacanteIndex, eSkill.Armas, True)
                End If
            Else
                'sino tal vez lucha libre
                Call SubirSkill(AtacanteIndex, eSkill.Wrestling, True)
            End If
                    
            'Trata de apuñalar por la espalda al enemigo
            If PuedeApuñalar(AtacanteIndex) Then
                Call DoApuñalar(AtacanteIndex, 0, VictimaIndex, daño)
            End If
            'e intenta dar un golpe crítico [Pablo (ToxicWaste)]
            Call DoGolpeCritico(AtacanteIndex, 0, VictimaIndex, daño)
        End If
y reemplazan todo eso por esto:
Código:

If .flags.Hambre = 0 And .flags.Sed = 0 Then
        
            If ObjData(.Invent.WeaponEqpObjIndex).Acuchilla = 1 Then
                Call DoAcuchillar(AtacanteIndex, 0, VictimaIndex, daño)
            End If
                    
            'Trata de apuñalar por la espalda al enemigo
            If PuedeApuñalar(AtacanteIndex) Then
                Call DoApuñalar(AtacanteIndex, 0, VictimaIndex, daño)
            End If
            'e intenta dar un golpe crítico [Pablo (ToxicWaste)]
            Call DoGolpeCritico(AtacanteIndex, 0, VictimaIndex, daño)
        End If

Eliminamos:
Código:

Function ValidateSkills(ByVal UserIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

Dim LoopC As Integer

For LoopC = 1 To NUMSKILLS
    If UserList(UserIndex).Stats.UserSkills(LoopC) < 0 Then
        Exit Function
        If UserList(UserIndex).Stats.UserSkills(LoopC) > 100 Then UserList(UserIndex).Stats.UserSkills(LoopC) = 100
    End If
Next LoopC

ValidateSkills = True
    
End Function
Eliminamos:
Código:

    For i = 1 To NUMSKILLS
        .Stats.UserSkills(i) = 0
        Call CheckEluSkill(UserIndex, i, True)
    Next i
    
    .Stats.SkillPts = 10
Reemplazan esta función:
Código:

Function ValidateChr(ByVal UserIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

ValidateChr = UserList(UserIndex).Char.Head <> 0 _
                And UserList(UserIndex).Char.body <> 0 _
                And ValidateSkills(UserIndex)

End Function
por esta:
Código:

Function ValidateChr(ByVal UserIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

ValidateChr = UserList(UserIndex).Char.Head <> 0 And UserList(UserIndex).Char.body <> 0

End Function
Eliminan:
Código:

If .Stats.SkillPts > 0 Then
        Call WriteSendSkills(UserIndex)
        Call WriteLevelUp(UserIndex, .Stats.SkillPts)
    End If
Eliminan:
Código:

.AsignedSkills = 0
Eliminan:
Código:

            .SkillPts = 0
eliminan:
Código:

Call SubirSkill(UserIndex, eSkill.Domar, False)
y:
Código:

Call SubirSkill(UserIndex, eSkill.Domar, True)

Reemplazan tdo el Sub TratarDeHacerFogata por este:
Código:

Sub TratarDeHacerFogata(ByVal Map As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    Dim Obj As Obj
    Dim posMadera As WorldPos

    If Not LegalPos(Map, X, Y) Then Exit Sub

    With posMadera
        .Map = Map
        .X = X
        .Y = Y
    End With

    If MapData(Map, X, Y).ObjInfo.ObjIndex <> 58 Then
        Call WriteConsoleMsg(UserIndex, "Necesitas clickear sobre leña para hacer ramitas.", FontTypeNames.FONTTYPE_INFO)
        Exit Sub
    End If
    
    If Distancia(posMadera, UserList(UserIndex).Pos) > 2 Then
        Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos para prender la fogata.", FontTypeNames.FONTTYPE_INFO)
        Exit Sub
    End If
    
    If UserList(UserIndex).flags.Muerto = 1 Then
        Call WriteConsoleMsg(UserIndex, "No puedes hacer fogatas estando muerto.", FontTypeNames.FONTTYPE_INFO)
        Exit Sub
    End If
    
    If MapData(Map, X, Y).ObjInfo.Amount < 3 Then
        Call WriteConsoleMsg(UserIndex, "Necesitas por lo menos tres troncos para hacer una fogata.", FontTypeNames.FONTTYPE_INFO)
        Exit Sub
    End If


    Obj.ObjIndex = FOGATA_APAG
    Obj.Amount = MapData(Map, X, Y).ObjInfo.Amount \ 3
    
    Call WriteConsoleMsg(UserIndex, "Has hecho " & Obj.Amount & " fogatas.", FontTypeNames.FONTTYPE_INFO)
    
    Call MakeObj(Obj, Map, X, Y)
    
    'Seteamos la fogata como el nuevo TargetObj del user
    UserList(UserIndex).flags.TargetObj = FOGATA_APAG

End Sub
Código:

Reemplazan el sub DoPescarRed, por este:

Public Sub DoPescarRed(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************
On Error GoTo Errhandler

Dim Suerte As Integer
Dim res As Integer
Dim EsPescador As Boolean

If UserList(UserIndex).clase = eClass.Worker Then
    Call QuitarSta(UserIndex, EsfuerzoPescarPescador)
    EsPescador = True
Else
    Call QuitarSta(UserIndex, EsfuerzoPescarGeneral)
    EsPescador = False
End If

' m = (60-11)/(1-10)
' y = mx - m*10 + 11

Suerte = Int(-0.00125 * 100 * 100 - 0.3 * 100 + 49)

If Suerte > 0 Then
    res = RandomNumber(1, Suerte)
    
    If res < 6 Then
        Dim MiObj As Obj
        Dim PecesPosibles(1 To 4) As Integer
        
        PecesPosibles(1) = PESCADO1
        PecesPosibles(2) = PESCADO2
        PecesPosibles(3) = PESCADO3
        PecesPosibles(4) = PESCADO4
        
        If EsPescador = True Then
            MiObj.Amount = RandomNumber(1, 5)
        Else
            MiObj.Amount = 1
        End If
        MiObj.ObjIndex = PecesPosibles(RandomNumber(LBound(PecesPosibles), UBound(PecesPosibles)))
        
        If Not MeterItemEnInventario(UserIndex, MiObj) Then
            Call TirarItemAlPiso(UserList(UserIndex).Pos, MiObj)
        End If
        
        Call WriteConsoleMsg(UserIndex, "¡Has pescado algunos peces!", FontTypeNames.FONTTYPE_INFO)
        
    Else
        Call WriteConsoleMsg(UserIndex, "¡No has pescado nada!", FontTypeNames.FONTTYPE_INFO)
    End If
End If

    UserList(UserIndex).Reputacion.PlebeRep = UserList(UserIndex).Reputacion.PlebeRep + vlProleta
    If UserList(UserIndex).Reputacion.PlebeRep > MAXREP Then _
        UserList(UserIndex).Reputacion.PlebeRep = MAXREP
        
Exit Sub

Errhandler:
    Call LogError("Error en DoPescarRed")
End Sub
reemplazan el:
Código:

Public Sub DoPescar(ByVal UserIndex As Integer)
por este:
Código:

Public Sub DoPescar(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: 16/11/2009
'16/11/2009: ZaMa - Implementado nuevo sistema de extraccion.
'***************************************************
On Error GoTo Errhandler

Dim Suerte As Integer
Dim res As Integer
Dim CantidadItems As Integer

If UserList(UserIndex).clase = eClass.Worker Then
    Call QuitarSta(UserIndex, EsfuerzoPescarPescador)
Else
    Call QuitarSta(UserIndex, EsfuerzoPescarGeneral)
End If


Suerte = Int(-0.00125 * 100 * 100 - 0.3 * 100 + 49)

res = RandomNumber(1, Suerte)

If res <= 6 Then
    Dim MiObj As Obj
    
    If UserList(UserIndex).clase = eClass.Worker Then
        With UserList(UserIndex)
            CantidadItems = 1 + MaximoInt(1, CInt((.Stats.ELV - 4) / 5))
        End With
        
        MiObj.Amount = RandomNumber(1, CantidadItems)
    Else
        MiObj.Amount = 1
    End If
    MiObj.ObjIndex = Pescado
    
    If Not MeterItemEnInventario(UserIndex, MiObj) Then
        Call TirarItemAlPiso(UserList(UserIndex).Pos, MiObj)
    End If
    
    Call WriteConsoleMsg(UserIndex, "¡Has pescado un lindo pez con la ayuda de Toyz.!", FontTypeNames.FONTTYPE_INFO)
    
Else
    '[CDT 17-02-2004]
    If Not UserList(UserIndex).flags.UltimoMensaje = 6 Then
      Call WriteConsoleMsg(UserIndex, "¡No has pescado nada!", FontTypeNames.FONTTYPE_INFO)
      UserList(UserIndex).flags.UltimoMensaje = 6
    End If
    '[/CDT]

End If

UserList(UserIndex).Reputacion.PlebeRep = UserList(UserIndex).Reputacion.PlebeRep + vlProleta
If UserList(UserIndex).Reputacion.PlebeRep > MAXREP Then _
    UserList(UserIndex).Reputacion.PlebeRep = MAXREP

UserList(UserIndex).Counters.Trabajando = UserList(UserIndex).Counters.Trabajando + 1

Exit Sub

Errhandler:
    Call LogError("Error en DoPescar. Error " & Err.Number & " : " & Err.description)
End Sub

En el Sub DoRobar, buscan y eliminan:
Código:

            Dim RobarSkill As Byte
            
            RobarSkill = .Stats.UserSkills(eSkill.Robar)
                
            If RobarSkill <= 10 And RobarSkill >= -1 Then
                Suerte = 35
            ElseIf RobarSkill <= 20 And RobarSkill >= 11 Then
                Suerte = 30
            ElseIf RobarSkill <= 30 And RobarSkill >= 21 Then
                Suerte = 28
            ElseIf RobarSkill <= 40 And RobarSkill >= 31 Then
                Suerte = 24
            ElseIf RobarSkill <= 50 And RobarSkill >= 41 Then
                Suerte = 22
            ElseIf RobarSkill <= 60 And RobarSkill >= 51 Then
                Suerte = 20
            ElseIf RobarSkill <= 70 And RobarSkill >= 61 Then
                Suerte = 18
            ElseIf RobarSkill <= 80 And RobarSkill >= 71 Then
                Suerte = 15
            ElseIf RobarSkill <= 90 And RobarSkill >= 81 Then
                Suerte = 10
            ElseIf RobarSkill < 100 And RobarSkill >= 91 Then
                Suerte = 7
            ElseIf RobarSkill = 100 Then
                Suerte = 5
            End If

Eliminan en el DoRobar:
Código:

            Dim Suerte As Integer
Y reemplazan esta linea en el dorobar:
Código:

res = RandomNumber(1, Suerte)
por esta:
Código:

res = RandomNumber(1,5)
Buscan y eliminan en el DoRobar:
Código:

Call SubirSkill(LadrOnIndex, eSkill.Robar, True)

y:
Código:

Call SubirSkill(LadrOnIndex, eSkill.Robar, False)
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5046
Edad : 17
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Re: Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Toyz el 14/7/2016, 12:40 am

SEGUIMOS POR ACÁ! (SERVIDOR!!)
Reemplazan el DoApuñalar por este:
Código:

Public Sub DoApuñalar(ByVal UserIndex As Integer, ByVal VictimNpcIndex As Integer, ByVal VictimUserIndex As Integer, ByVal daño As Integer)
'***************************************************
'Autor: Nacho (Integer) & Unknown (orginal version)
'Last Modification: 04/17/08 - (NicoNZ)
'Simplifique la cuenta que hacia para sacar la suerte
'y arregle la cuenta que hacia para sacar el daño
'***************************************************
    Dim Suerte As Integer
    
    Const apuñalar As Byte = 100
    
    Select Case UserList(UserIndex).clase
        Case eClass.Assasin
            Suerte = Int(((0.00003 * apuñalar - 0.002) * apuñalar + 0.098) * apuñalar + 4.25)
        
        Case eClass.Cleric, eClass.Paladin, eClass.Pirat
            Suerte = Int(((0.000003 * apuñalar + 0.0006) * apuñalar + 0.0107) * apuñalar + 4.93)
        
        Case eClass.Bard
            Suerte = Int(((0.000002 * apuñalar + 0.0002) * apuñalar + 0.032) * apuñalar + 4.81)
        
        Case Else
            Suerte = Int(0.0361 * apuñalar + 4.39)
    End Select
    
    
    If RandomNumber(0, 100) < Suerte Then
        If VictimUserIndex <> 0 Then
            If UserList(UserIndex).clase = eClass.Assasin Then
                daño = Round(daño * 1.4, 0)
            Else
                daño = Round(daño * 1.5, 0)
            End If
            
            UserList(VictimUserIndex).Stats.MinHp = UserList(VictimUserIndex).Stats.MinHp - daño
            Call WriteConsoleMsg(UserIndex, "Has apuñalado a " & UserList(VictimUserIndex).name & " por " & daño, FontTypeNames.FONTTYPE_FIGHT)
            Call WriteConsoleMsg(VictimUserIndex, "Te ha apuñalado " & UserList(UserIndex).name & " por " & daño, FontTypeNames.FONTTYPE_FIGHT)
            
            Call FlushBuffer(VictimUserIndex)
        Else
            Npclist(VictimNpcIndex).Stats.MinHp = Npclist(VictimNpcIndex).Stats.MinHp - Int(daño * 2)
            Call WriteConsoleMsg(UserIndex, "Has apuñalado la criatura por " & Int(daño * 2), FontTypeNames.FONTTYPE_FIGHT)
            '[Alejo]
            Call CalcularDarExp(UserIndex, VictimNpcIndex, daño * 2)
        End If
        
    Else
        Call WriteConsoleMsg(UserIndex, "¡No has logrado apuñalar a tu enemigo!", FontTypeNames.FONTTYPE_FIGHT)
    End If
    
End Sub
Reemplazan el DoGolpeCritico por este:
Código:

Public Sub DoGolpeCritico(ByVal UserIndex As Integer, ByVal VictimNpcIndex As Integer, ByVal VictimUserIndex As Integer, ByVal daño As Integer)
'***************************************************
'Autor: Pablo (ToxicWaste)
'Last Modification: 28/01/2007
'***************************************************

    Dim Suerte As Integer
    Const Critico As Byte = 100
    
    If UserList(UserIndex).clase <> eClass.Bandit Then Exit Sub
    If UserList(UserIndex).Invent.WeaponEqpSlot = 0 Then Exit Sub
    If ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).name <> "Espada Vikinga" Then Exit Sub
    
    Suerte = Int((((0.00000003 * Critico + 0.000006) * Critico + 0.000107) * Critico + 0.0893) * 100)
    
    If RandomNumber(0, 100) < Suerte Then
        daño = Int(daño * 0.75)
        If VictimUserIndex <> 0 Then
            UserList(VictimUserIndex).Stats.MinHp = UserList(VictimUserIndex).Stats.MinHp - daño
            Call WriteConsoleMsg(UserIndex, "Has golpeado críticamente a " & UserList(VictimUserIndex).name & " por " & daño & ".", FontTypeNames.FONTTYPE_FIGHT)
            Call WriteConsoleMsg(VictimUserIndex, UserList(UserIndex).name & " te ha golpeado críticamente por " & daño & ".", FontTypeNames.FONTTYPE_FIGHT)
        Else
            Npclist(VictimNpcIndex).Stats.MinHp = Npclist(VictimNpcIndex).Stats.MinHp - daño
            Call WriteConsoleMsg(UserIndex, "Has golpeado críticamente a la criatura por " & daño & ".", FontTypeNames.FONTTYPE_FIGHT)
            '[Alejo]
            Call CalcularDarExp(UserIndex, VictimNpcIndex, daño)
        End If
    End If

End Sub

Reemplazan el dotalar, por este:
Código:

Public Sub DoTalar(ByVal UserIndex As Integer, Optional ByVal DarMaderaElfica As Boolean = False)
'***************************************************
'Autor: Unknown
'Last Modification: 16/11/2009
'16/11/2009: ZaMa - Ahora Se puede dar madera elfica.
'16/11/2009: ZaMa - Implementado nuevo sistema de extraccion.
'***************************************************
    On Error GoTo Errhandler
    
    Dim Suerte As Integer
    Dim res As Integer
    Dim CantidadItems As Integer
    
    If UserList(UserIndex).clase = eClass.Worker Then
        Call QuitarSta(UserIndex, EsfuerzoTalarLeñador)
    Else
        Call QuitarSta(UserIndex, EsfuerzoTalarGeneral)
    End If
    
    Const Talar As Byte = 100
    Suerte = Int(-0.00125 * Talar * Talar - 0.3 * Talar + 49)
    
    res = RandomNumber(1, Suerte)
    
    If res <= 6 Then
        Dim MiObj As Obj
        
        If UserList(UserIndex).clase = eClass.Worker Then
            With UserList(UserIndex)
                CantidadItems = 1 + MaximoInt(1, CInt((.Stats.ELV - 4) / 5))
            End With
            
            MiObj.Amount = RandomNumber(1, CantidadItems)
        Else
            MiObj.Amount = 1
        End If
        
        MiObj.ObjIndex = IIf(DarMaderaElfica, LeñaElfica, Leña)
        
        
        If Not MeterItemEnInventario(UserIndex, MiObj) Then
            
            Call TirarItemAlPiso(UserList(UserIndex).Pos, MiObj)
            
        End If
        
        Call WriteConsoleMsg(UserIndex, "¡Has conseguido algo de leña!", FontTypeNames.FONTTYPE_INFO)
        
    Else
        '[CDT 17-02-2004]
        If Not UserList(UserIndex).flags.UltimoMensaje = 8 Then
            Call WriteConsoleMsg(UserIndex, "¡No has obtenido leña!", FontTypeNames.FONTTYPE_INFO)
            UserList(UserIndex).flags.UltimoMensaje = 8
        End If
        '[/CDT]
        
    End If
    
    UserList(UserIndex).Reputacion.PlebeRep = UserList(UserIndex).Reputacion.PlebeRep + vlProleta
    If UserList(UserIndex).Reputacion.PlebeRep > MAXREP Then _
        UserList(UserIndex).Reputacion.PlebeRep = MAXREP
    
    UserList(UserIndex).Counters.Trabajando = UserList(UserIndex).Counters.Trabajando + 1
    
    Exit Sub
    
Errhandler:
        Call LogError("Error en DoTalar")

End Sub
Reemplazan el DoMineria, por este:
Código:

Public Sub DoMineria(ByVal UserIndex As Integer)
'***************************************************
'Autor: Unknown
'Last Modification: 16/11/2009
'16/11/2009: ZaMa - Implementado nuevo sistema de extraccion.
'***************************************************
On Error GoTo Errhandler

Dim Suerte As Integer
Dim res As Integer
Dim CantidadItems As Integer

With UserList(UserIndex)
    If .clase = eClass.Worker Then
        Call QuitarSta(UserIndex, EsfuerzoExcavarMinero)
    Else
        Call QuitarSta(UserIndex, EsfuerzoExcavarGeneral)
    End If
    
    Const Mineria As Byte = 100
    Suerte = Int(-0.00125 * Mineria * Mineria - 0.3 * Mineria + 49)
    
    res = RandomNumber(1, Suerte)
    
    If res <= 5 Then
        Dim MiObj As Obj
        
        If .flags.TargetObj = 0 Then Exit Sub
        
        MiObj.ObjIndex = ObjData(.flags.TargetObj).MineralIndex
        
        If UserList(UserIndex).clase = eClass.Worker Then
            CantidadItems = 1 + MaximoInt(1, CInt((.Stats.ELV - 4) / 5))
            
            MiObj.Amount = RandomNumber(1, CantidadItems)
        Else
            MiObj.Amount = 1
        End If
        
        If Not MeterItemEnInventario(UserIndex, MiObj) Then _
            Call TirarItemAlPiso(.Pos, MiObj)
        
        Call WriteConsoleMsg(UserIndex, "¡Has extraido algunos minerales!", FontTypeNames.FONTTYPE_INFO)
        
    Else
        '[CDT 17-02-2004]
        If Not .flags.UltimoMensaje = 9 Then
            Call WriteConsoleMsg(UserIndex, "¡No has conseguido nada!", FontTypeNames.FONTTYPE_INFO)
            .flags.UltimoMensaje = 9
        End If
        '[/CDT]
    End If
    
    .Reputacion.PlebeRep = .Reputacion.PlebeRep + vlProleta
    If .Reputacion.PlebeRep > MAXREP Then _
        .Reputacion.PlebeRep = MAXREP
    
    .Counters.Trabajando = UserList(UserIndex).Counters.Trabajando + 1
End With

Exit Sub

Errhandler:
    Call LogError("Error en Sub DoMineria")

End Sub
Buscan y borran en el DoMeditar:
Código:

        Dim MeditarSkill As Byte
        Dim Suerte As Integer
Y esto:
Código:

MeditarSkill = .Stats.UserSkills(eSkill.Meditar)
        
        If MeditarSkill <= 10 And MeditarSkill >= -1 Then
            Suerte = 35
        ElseIf MeditarSkill <= 20 And MeditarSkill >= 11 Then
            Suerte = 30
        ElseIf MeditarSkill <= 30 And MeditarSkill >= 21 Then
            Suerte = 28
        ElseIf MeditarSkill <= 40 And MeditarSkill >= 31 Then
            Suerte = 24
        ElseIf MeditarSkill <= 50 And MeditarSkill >= 41 Then
            Suerte = 22
        ElseIf MeditarSkill <= 60 And MeditarSkill >= 51 Then
            Suerte = 20
        ElseIf MeditarSkill <= 70 And MeditarSkill >= 61 Then
            Suerte = 18
        ElseIf MeditarSkill <= 80 And MeditarSkill >= 71 Then
            Suerte = 15
        ElseIf MeditarSkill <= 90 And MeditarSkill >= 81 Then
            Suerte = 10
        ElseIf MeditarSkill < 100 And MeditarSkill >= 91 Then
            Suerte = 7
        ElseIf MeditarSkill = 100 Then
            Suerte = 5
        End If
y reemplazan la linea:
Código:

res = RandomNumber(1, Suerte)
Por esta:
Código:

res = RandomNumber(1, 5)
Ahora en el mismo sub buscan:
Código:

If res = 1 Then
            
            cant = Porcentaje(.Stats.MaxMAN, PorcentajeRecuperoMana)
            If cant <= 0 Then cant = 1
            .Stats.MinMAN = .Stats.MinMAN + cant
            If .Stats.MinMAN > .Stats.MaxMAN Then _
                .Stats.MinMAN = .Stats.MaxMAN
            
            If Not .flags.UltimoMensaje = 22 Then
                Call WriteConsoleMsg(UserIndex, "¡Has recuperado " & cant & " puntos de maná!", FontTypeNames.FONTTYPE_INFO)
                .flags.UltimoMensaje = 22
            End If
            
            Call WriteUpdateMana(UserIndex)
            Call SubirSkill(UserIndex, eSkill.Meditar, True)
        Else
            Call SubirSkill(UserIndex, eSkill.Meditar, False)
        End If
y lo reemplazan por:
Código:

        If res = 1 Then
            
            cant = Porcentaje(.Stats.MaxMAN, PorcentajeRecuperoMana)
            If cant <= 0 Then cant = 1
            .Stats.MinMAN = .Stats.MinMAN + cant
            If .Stats.MinMAN > .Stats.MaxMAN Then _
                .Stats.MinMAN = .Stats.MaxMAN
            
            If Not .flags.UltimoMensaje = 22 Then
                Call WriteConsoleMsg(UserIndex, "¡Has recuperado " & cant & " puntos de maná!", FontTypeNames.FONTTYPE_INFO)
                .flags.UltimoMensaje = 22
            End If
            
            Call WriteUpdateMana(UserIndex)
        End If

Buscan y eliminan en el DoDesequipar:
Código:

    Dim WrestlingSkill As Byte
y:
Código:

        WrestlingSkill = .Stats.UserSkills(eSkill.Wrestling)
Reemplazan esta linea:
Código:

        Probabilidad = WrestlingSkill * 0.2 + .Stats.ELV * 0.66
Por esta:
Código:

        Probabilidad = 100 * 0.2 + .Stats.ELV * 0.66

Buscan en el DoHandInmo:
Código:

    If res < (UserList(UserIndex).Stats.UserSkills(eSkill.Wrestling) / 4) Then
y lo reemplazan por:
Código:

Public Sub DoHandInmo(ByVal UserIndex As Integer, ByVal VictimaIndex As Integer)
'***************************************************
'Author: Pablo (ToxicWaste)
'Last Modif: 17/02/2007
'Implements the special Skill of the Thief
'***************************************************

    If UserList(VictimaIndex).flags.Paralizado = 1 Then Exit Sub
    If UserList(UserIndex).clase <> eClass.Thief Then Exit Sub
        
    
    If UserList(UserIndex).Invent.AnilloEqpObjIndex <> GUANTE_HURTO Then Exit Sub
        
    Dim res As Integer
    res = RandomNumber(0, 100)
    If res < 25 Then
        UserList(VictimaIndex).flags.Paralizado = 1
        UserList(VictimaIndex).Counters.Paralisis = IntervaloParalizado / 2
        Call WriteParalizeOK(VictimaIndex)
        Call WriteConsoleMsg(UserIndex, "Tu golpe ha dejado inmóvil a tu oponente", FontTypeNames.FONTTYPE_INFO)
        Call WriteConsoleMsg(VictimaIndex, "¡El golpe te ha dejado inmóvil!", FontTypeNames.FONTTYPE_INFO)
    End If

End Sub

Buscan en el Sub Desarmar:
Código:



    Dim WrestlingSkill As Byte
    
    With UserList(UserIndex)
        WrestlingSkill = .Stats.UserSkills(eSkill.Wrestling)
        
        Probabilidad = WrestlingSkill * 0.2 + .Stats.ELV * 0.66
y lo reemplazan por:
Código:

    With UserList(UserIndex)
        
        Probabilidad = 100 * 0.2 + .Stats.ELV * 0.66
Buscan en el CheckUserlvl:
Código:

        If Pts > 0 Then
            Call WriteLevelUp(UserIndex, Pts)
            
            .Stats.SkillPts = .Stats.SkillPts + Pts
            
            Call WriteConsoleMsg(UserIndex, "Has ganado un total de " & Pts & " skillpoints.", FontTypeNames.FONTTYPE_INFO)
        End If
y lo eliminan.


Buscan en el mismo sub:
Código:

    Dim Pts As Integer
y lo eliminan
Código:

Buscan en el mismo sub:

If .Stats.ELV = 1 Then
                Pts = 10
            Else
                'For multiple levels being rised at once
                Pts = Pts + 5
            End If
y lo eliminan.

Eliminan:
Código:

Sub SendUserSkillsTxt(ByVal sendIndex As Integer, ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

On Error Resume Next
    Dim j As Integer
    
    Call WriteConsoleMsg(sendIndex, UserList(UserIndex).name, FontTypeNames.FONTTYPE_INFO)
    
    For j = 1 To NUMSKILLS
        Call WriteConsoleMsg(sendIndex,estatus = "(" & MinHp & "/" & MaxHp & ") " SkillsNames(j) & " = " & UserList(UserIndex).Stats.UserSkills(j), FontTypeNames.FONTTYPE_INFO)
    Next j
    
    Call WriteConsoleMsg(sendIndex, "SkillLibres:" & UserList(UserIndex).Stats.SkillPts, FontTypeNames.FONTTYPE_INFO)
End Sub
Reemplazan la Function PuedeApuñalar, por esta:
Código:

Public Function PuedeApuñalar(ByVal UserIndex As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

    If UserList(UserIndex).Invent.WeaponEqpObjIndex > 0 Then
        If ObjData(UserList(UserIndex).Invent.WeaponEqpObjIndex).Apuñala = 1 Then
            PuedeApuñalar = 100 >= MIN_APUÑALAR Or UserList(UserIndex).clase = eClass.Assasin
        End If
    End If
End Function
Eliminan:
Código:

Sub SubirSkill(ByVal UserIndex As Integer, ByVal Skill As Integer, ByVal Acerto As Boolean)
'*************************************************
'Author: Unknown
'Last modified: 11/19/2009
'11/19/2009 Pato - Implement the new system to train the skills.
'*************************************************
    With UserList(UserIndex)
        If .flags.Hambre = 0 And .flags.Sed = 0 Then
            If .Counters.AsignedSkills < 10 Then
                If Not .flags.UltimoMensaje = 7 Then
                    Call WriteConsoleMsg(UserIndex, "Para poder entrenar un skill debes asignar los 10 skills iniciales.", FontTypeNames.FONTTYPE_INFO)
                    .flags.UltimoMensaje = 7
                End If
                
                Exit Sub
            End If
                
            With .Stats
                If .UserSkills(Skill) = MAXSKILLPOINTS Then Exit Sub
                
                Dim Lvl As Integer
                Lvl = .ELV
                
                If Lvl > UBound(LevelSkill) Then Lvl = UBound(LevelSkill)
                
                If .UserSkills(Skill) >= LevelSkill(Lvl).LevelValue Then Exit Sub
                
                If Acerto Then
                    .ExpSkills(Skill) = .ExpSkills(Skill) + EXP_ACIERTO_SKILL
                Else
                    .ExpSkills(Skill) = .ExpSkills(Skill) + EXP_FALLO_SKILL
                End If
                
                If .ExpSkills(Skill) >= .EluSkills(Skill) Then
                    .UserSkills(Skill) = .UserSkills(Skill) + 1
                    Call WriteConsoleMsg(UserIndex, "¡Has mejorado tu skill " & SkillsNames(Skill) & " en un punto! Ahora tienes " & .UserSkills(Skill) & " pts.", FontTypeNames.FONTTYPE_INFO)
                    
                    .Exp = .Exp + 50
                    If .Exp > MAXEXP Then .Exp = MAXEXP
                    
                    Call WriteConsoleMsg(UserIndex, "¡Has ganado 50 puntos de experiencia!", FontTypeNames.FONTTYPE_FIGHT)
                    
                    Call WriteUpdateExp(UserIndex)
                    Call CheckUserLevel(UserIndex)
                    Call CheckEluSkill(UserIndex, Skill, False)
                End If
            End With
        End If
    End With
End Sub
Eliminan:
Código:

''
' Set the EluSkill value at the skill.
'
' @param UserIndex  Specifies reference to user
' @param Skill      Number of the skill to check
' @param Allocation True If the motive of the modification is the allocation, False if the skill increase by training

Public Sub CheckEluSkill(ByVal UserIndex As Integer, ByVal Skill As Byte, ByVal Allocation As Boolean)
'*************************************************
'Author: Torres Patricio (Pato)
'Last modified: 11/20/2009
'
'*************************************************

With UserList(UserIndex).Stats
    If .UserSkills(Skill) < MAXSKILLPOINTS Then
        If Allocation Then
            .ExpSkills(Skill) = 0
        Else
            .ExpSkills(Skill) = .ExpSkills(Skill) - .EluSkills(Skill)
        End If
        
        .EluSkills(Skill) = ELU_SKILL_INICIAL * 1.05 ^ .UserSkills(Skill)
    Else
        .ExpSkills(Skill) = 0
        .EluSkills(Skill) = 0
    End If
End With

End Sub
Eliminan:
Código:

    SendSkills              ' SKILLS
Eliminan:
Código:

    RequestSkills           'ESKI
Eliminan:
Código:

    ModifySkills            'SKSE
Reemplazan todo este enum:
Código:

Public Enum eEditOptions
Por este:
Código:

Public Enum eEditOptions
    eo_Gold = 1
    eo_Experience
    eo_Body
    eo_Head
    eo_CiticensKilled
    eo_CriminalsKilled
    eo_Level
    eo_Class
    eo_Nobleza
    eo_Asesino
    eo_Sex
    eo_Raza
    eo_addGold
End Enum

Eliminan:
Código:

        Case ClientPacketID.RequestSkills           'ESKI
            Call HandleRequestSkills(UserIndex)
Eliminan:
Código:

        Case ClientPacketID.ModifySkills            'SKSE
            Call HandleModifySkills(UserIndex)
Eliminan:
Código:

        Case eGMCommands.RequestCharSkills       '/SKILLS
            Call HandleRequestCharSkills(UserIndex)

Eliminan:
Código:

''
' Handles the "RequestSkills" message.
'
' @param    userIndex The index of the user sending the message.

Private Sub HandleRequestSkills(ByVal UserIndex As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 05/17/06
'
'***************************************************
    'Remove packet ID
    Call UserList(UserIndex).incomingData.ReadByte
    
    Call WriteSendSkills(UserIndex)
End Sub

Eliminan:

Código:

''
' Handles the "ModifySkills" message.
'
' @param    userIndex The index of the user sending the message.

Private Sub HandleModifySkills(ByVal UserIndex As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 11/19/09
'11/19/09: Pato - Adapting to new skills system.
'***************************************************
    If UserList(UserIndex).incomingData.length < 1 + NUMSKILLS Then
        Err.Raise UserList(UserIndex).incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
    
    With UserList(UserIndex)
        'Remove packet ID
        Call .incomingData.ReadByte
        
        Dim i As Long
        Dim Count As Integer
        Dim points(1 To NUMSKILLS) As Byte
        
        'Codigo para prevenir el hackeo de los skills
        '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        For i = 1 To NUMSKILLS
            points(i) = .incomingData.ReadByte()
            
            If points(i) < 0 Then
                Call LogHackAttemp(.name & " IP:" & .ip & " trató de hackear los skills.")
                .Stats.SkillPts = 0
                Call CloseSocket(UserIndex)
                Exit Sub
            End If
            
            Count = Count + points(i)
        Next i
        
        If Count > .Stats.SkillPts Then
            Call LogHackAttemp(.name & " IP:" & .ip & " trató de hackear los skills.")
            Call CloseSocket(UserIndex)
            Exit Sub
        End If
        '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        
        .Counters.AsignedSkills = MinimoInt(10, .Counters.AsignedSkills + Count)
        
        With .Stats
            For i = 1 To NUMSKILLS
                If points(i) > 0 Then
                    .SkillPts = .SkillPts - points(i)
                    .UserSkills(i) = .UserSkills(i) + points(i)
                    
                    'Client should prevent this, but just in case...
                    If .UserSkills(i) > 100 Then
                        .SkillPts = .SkillPts + .UserSkills(i) - 100
                        .UserSkills(i) = 100
                    End If
                    
                    Call CheckEluSkill(UserIndex, i, True)
                End If
            Next i
        End With
    End With
End Sub
En el HandleEditChar

Buscan:
Código:

Case PlayerType.Dios
                    ' Los DRMs pueden aplicar los siguientes comandos sobre cualquiera
                    ' pero si quiere modificar el level sólo lo puede hacer sobre sí mismo
                    valido = (opcion = eEditOptions.eo_Level And tUser = UserIndex) Or _
                            opcion = eEditOptions.eo_Body Or _
                            opcion = eEditOptions.eo_Head Or _
                            opcion = eEditOptions.eo_CiticensKilled Or _
                            opcion = eEditOptions.eo_CriminalsKilled Or _
                            opcion = eEditOptions.eo_Class Or _
                            opcion = eEditOptions.eo_Skills Or _
                            opcion = eEditOptions.eo_addGold
Y lo reemplazan por:
Código:

Case PlayerType.Dios
                    ' Los DRMs pueden aplicar los siguientes comandos sobre cualquiera
                    ' pero si quiere modificar el level sólo lo puede hacer sobre sí mismo
                    valido = (opcion = eEditOptions.eo_Level And tUser = UserIndex) Or _
                            opcion = eEditOptions.eo_Body Or _
                            opcion = eEditOptions.eo_Head Or _
                            opcion = eEditOptions.eo_CiticensKilled Or _
                            opcion = eEditOptions.eo_CriminalsKilled Or _
                            opcion = eEditOptions.eo_Class Or _
                            opcion = eEditOptions.eo_addGold

Eliminan todo esto:
Código:

Case eEditOptions.eo_Skills
                        For LoopC = 1 To NUMSKILLS
                            If UCase$(Replace$(SkillsNames(LoopC), " ", "+")) = UCase$(Arg1) Then Exit For
                        Next LoopC
                        
                        If LoopC > NUMSKILLS Then
                            Call WriteConsoleMsg(UserIndex, "Skill Inexistente!", FontTypeNames.FONTTYPE_INFO)
                        Else
                            If tUser <= 0 Then ' Offline
                                Call WriteVar(UserCharPath, "Skills", "SK" & LoopC, Arg2)
                                Call WriteVar(UserCharPath, "Skills", "EXPSK" & LoopC, 0)
                                
                                If Arg2 < MAXSKILLPOINTS Then
                                    Call WriteVar(UserCharPath, "Skills", "ELUSK" & LoopC, ELU_SKILL_INICIAL * 1.05 ^ Arg2)
                                Else
                                    Call WriteVar(UserCharPath, "Skills", "ELUSK" & LoopC, 0)
                                End If
    
                                Call WriteConsoleMsg(UserIndex, "Charfile Alterado: " & UserName, FontTypeNames.FONTTYPE_INFO)
                            Else ' Online
                                UserList(tUser).Stats.UserSkills(LoopC) = val(Arg2)
                                Call CheckEluSkill(tUser, LoopC, True)
                            End If
                        End If
                        
                        ' Log it
                        CommandString = CommandString & "SKILLS "




Eliminan todo esto:
Código:

Case eEditOptions.eo_SkillPointsLeft
                        If tUser <= 0 Then ' Offline
                            Call WriteVar(UserCharPath, "STATS", "SkillPtsLibres", Arg1)
                            Call WriteConsoleMsg(UserIndex, "Charfile Alterado: " & UserName, FontTypeNames.FONTTYPE_INFO)
                        Else ' Online
                            UserList(tUser).Stats.SkillPts = val(Arg1)
                        End If
                        
                        ' Log it
                        CommandString = CommandString & "SKILLSLIBRES "

Eliminan todo este sub:
Código:

''
' Handles the "RequestCharSkills" message.
'
' @param    userIndex The index of the user sending the message.

Private Sub HandleRequestCharSkills(ByVal UserIndex As Integer)
'***************************************************
'Author: Nicolas Matias Gonzalez (NIGO)
'Last Modification: 12/29/06
'
'***************************************************
    If UserList(UserIndex).incomingData.length < 3 Then
        Err.Raise UserList(UserIndex).incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
    
On Error GoTo Errhandler
    With UserList(UserIndex)
        'This packet contains strings, make a copy of the data to prevent losses if it's not complete yet...
        Dim buffer As New clsByteQueue
        Call buffer.CopyBuffer(.incomingData)
        
        'Remove packet ID
        Call buffer.ReadByte
        
        Dim UserName As String
        Dim tUser As Integer
        Dim LoopC As Long
        Dim message As String
        
        UserName = buffer.ReadASCIIString()
        tUser = NameIndex(UserName)
        
        
        If (.flags.Privilegios And (PlayerType.Admin Or PlayerType.Dios Or PlayerType.SemiDios)) Then
            Call LogGM(.name, "/STATS " & UserName)
            
            If tUser <= 0 Then
                If (InStrB(UserName, "\") <> 0) Then
                        UserName = Replace(UserName, "\", "")
                End If
                If (InStrB(UserName, "/") <> 0) Then
                        UserName = Replace(UserName, "/", "")
                End If
                
                For LoopC = 1 To NUMSKILLS
                    message = message & "CHAR>" & SkillsNames(LoopC) & " = " & GetVar(CharPath & UserName & ".chr", "SKILLS", "SK" & LoopC) & vbCrLf
                Next LoopC
                
                Call WriteConsoleMsg(UserIndex, message & "CHAR> Libres:" & GetVar(CharPath & UserName & ".chr", "STATS", "SKILLPTSLIBRES"), FontTypeNames.FONTTYPE_INFO)
            Else
                Call SendUserSkillsTxt(UserIndex, tUser)
            End If
        End If
        
        'If we got here then packet is complete, copy data back to original queue
        Call .incomingData.CopyBuffer(buffer)
    End With

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

Reemplazan esta linea:
Código:

If ObjData(ArmasHerrero(i)).SkHerreria <= Round(UserList(UserIndex).Stats.UserSkills(eSkill.Herreria) / ModHerreriA(UserList(UserIndex).clase), 0) Then
por esta:
Código:

If ObjData(ArmasHerrero(i)).SkHerreria <= Round(100 / ModHerreriA(UserList(UserIndex).clase), 0) Then
Reemplazan esta linea:
Código:

If ObjData(ObjCarpintero(i)).SkCarpinteria <= UserList(UserIndex).Stats.UserSkills(eSkill.Carpinteria) \ ModCarpinteria(UserList(UserIndex).clase) Then
por esta:
Código:

            If ObjData(ObjCarpintero(i)).SkCarpinteria <= 100 \ ModCarpinteria(UserList(UserIndex).clase) Then
Eliminan:
Código:

''
' Writes the "SendSkills" message to the given user's outgoing data buffer.
'
' @param    UserIndex User to which the message is intended.
' @remarks  The data is not actually sent until the buffer is properly flushed.

Public Sub WriteSendSkills(ByVal UserIndex As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 11/19/09
'Writes the "SendSkills" message to the given user's outgoing data buffer
'11/19/09: Pato - Now send the percentage of progress of the skills.
'***************************************************
On Error GoTo Errhandler
    Dim i As Long
    
    With UserList(UserIndex)
        Call .outgoingData.WriteByte(ServerPacketID.SendSkills)
        Call .outgoingData.WriteByte(.clase)
        
        For i = 1 To NUMSKILLS
            Call .outgoingData.WriteByte(UserList(UserIndex).Stats.UserSkills(i))
            If .Stats.UserSkills(i) < MAXSKILLPOINTS Then
                Call .outgoingData.WriteByte(Int(.Stats.ExpSkills(i) * 100 / .Stats.EluSkills(i)))
            Else
                Call .outgoingData.WriteByte(0)
            End If
        Next i
    End With
Exit Sub

Errhandler:
    If Err.Number = UserList(UserIndex).outgoingData.NotEnoughSpaceErrCode Then
        Call FlushBuffer(UserIndex)
        Resume
    End If
End Sub
Reemplazan esta linea:
Código:

If ObjData(ArmadurasHerrero(i)).SkHerreria <= Round(UserList(UserIndex).Stats.UserSkills(eSkill.Herreria) / ModHerreriA(UserList(UserIndex).clase), 0) Then
por esta:
Código:

If ObjData(ArmadurasHerrero(i)).SkHerreria <= Round(100 / ModHerreriA(UserList(UserIndex).clase), 0) Then

Borran:
Código:

    RequestCharSkills       '/SKILLS
Buscan:
Código:

If .clase = eClass.Hunter And .Stats.UserSkills(eSkill.Ocultarse) > 90 Then
                If .Invent.ArmourEqpObjIndex = 648 Or .Invent.ArmourEqpObjIndex = 360 Then
                    Exit Sub
                End If
            End If
y lo reemplazan por:
Código:

If .clase = eClass.Hunter Then
                If .Invent.ArmourEqpObjIndex = 648 Or .Invent.ArmourEqpObjIndex = 360 Then
                    Exit Sub
                End If
            End If
Reemplazar el DoOcultarse, por este:
Código:

Public Sub DoOcultarse(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: 13/01/2010 (ZaMa)
'Pablo (ToxicWaste): No olvidar agregar IntervaloOculto=500 al Server.ini.
'Modifique la fórmula y ahora anda bien.
'13/01/2010: ZaMa - El pirata se transforma en galeon fantasmal cuando se oculta en agua.
'***************************************************

On Error GoTo Errhandler

    Dim Suerte As Double
    Dim res As Integer
    Const Ocultar As Byte = 100
    
    With UserList(UserIndex)
        
        Suerte = (((0.000002 * Ocultar - 0.0002) * Ocultar + 0.0064) * Ocultar + 0.1124) * 100
        
        res = RandomNumber(1, 100)
        
        If res <= Suerte Then
        
            .flags.Oculto = 1
            Suerte = (-0.000001 * (100 - Ocultar) ^ 3)
            Suerte = Suerte + (0.00009229 * (100 - Ocultar) ^ 2)
            Suerte = Suerte + (-0.0088 * (100 - Ocultar))
            Suerte = Suerte + (0.9571)
            Suerte = Suerte * IntervaloOculto
            .Counters.TiempoOculto = Suerte
            
            ' No es pirata o es uno sin barca
            If .flags.Navegando = 0 Then
                Call SetInvisible(UserIndex, .Char.CharIndex, True)
        
                Call WriteConsoleMsg(UserIndex, "¡Te has escondido entre las sombras!", FontTypeNames.FONTTYPE_INFO)
            ' Es un pirata navegando
            Else
                ' Le cambiamos el body a galeon fantasmal
                .Char.body = iFragataFantasmal
                ' Actualizamos clientes
                Call ChangeUserChar(UserIndex, .Char.body, .Char.Head, .Char.heading, NingunArma, _
                                    NingunEscudo, NingunCasco)
            End If
            
        Else
            '[CDT 17-02-2004]
            If Not .flags.UltimoMensaje = 4 Then
                Call WriteConsoleMsg(UserIndex, "¡No has logrado esconderte!", FontTypeNames.FONTTYPE_INFO)
                .flags.UltimoMensaje = 4
            End If
            '[/CDT]
            
        End If
        
        .Counters.Ocultando = .Counters.Ocultando + 1
    End With
    
    Exit Sub

Errhandler:
    Call LogError("Error en Sub DoOcultarse")

End Sub
En el DoNavega, buscan:
Código:

        If .Stats.UserSkills(eSkill.Navegacion) / ModNave < Barco.MinSkill Then
            Call WriteConsoleMsg(UserIndex, "No tienes suficientes conocimientos para usar este barco.", FontTypeNames.FONTTYPE_INFO)
            Call WriteConsoleMsg(UserIndex, "Para usar este barco necesitas " & Barco.MinSkill * ModNave & " puntos en navegacion.", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
y lo eliminan.

Buscan y eliminan en el mismo sub:
Código:

    Dim ModNave As Single
y eliminan:
Código:

        ModNave = ModNavegacion(.clase, UserIndex)
Eliminan:
Código:

Public Sub FundirMineral(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

On Error GoTo Errhandler

    With UserList(UserIndex)
        If .flags.TargetObjInvIndex > 0 Then
          
           If ObjData(.flags.TargetObjInvIndex).OBJType = eOBJType.otMinerales And _
                ObjData(.flags.TargetObjInvIndex).MinSkill <= .Stats.UserSkills(eSkill.Mineria) / ModFundicion(.clase) Then
                Call DoLingotes(UserIndex)
           Else
                Call WriteConsoleMsg(UserIndex, "No tienes conocimientos de minería suficientes para trabajar este mineral.", FontTypeNames.FONTTYPE_INFO)
           End If
        
        End If
    End With

    Exit Sub

Errhandler:
    Call LogError("Error en FundirMineral. Error " & Err.Number & " : " & Err.description)

End Sub
Reemplazan el FundirMineral, por este:
Código:

Public Sub FundirMineral(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

On Error GoTo Errhandler

    With UserList(UserIndex)
        If .flags.TargetObjInvIndex > 0 Then
          
           If ObjData(.flags.TargetObjInvIndex).OBJType = eOBJType.otMinerales And _
                50 <= 100 / ModFundicion(.clase) Then
                Call DoLingotes(UserIndex)
           Else
                Call WriteConsoleMsg(UserIndex, "No tienes conocimientos de minería suficientes para trabajar este mineral.", FontTypeNames.FONTTYPE_INFO)
           End If
        
        End If
    End With

    Exit Sub

Errhandler:
    Call LogError("Error en FundirMineral. Error " & Err.Number & " : " & Err.description)

End Sub
Reemplazan el Sub FundirArmas por este:
Código:

Public Sub FundirArmas(ByVal UserIndex As Integer)
'***************************************************
'Author: Unknown
'Last Modification: -
'
'***************************************************

On Error GoTo Errhandler
    With UserList(UserIndex)
        If .flags.TargetObjInvIndex > 0 Then
            If ObjData(.flags.TargetObjInvIndex).OBJType = eOBJType.otWeapon Then
                If ObjData(.flags.TargetObjInvIndex).SkHerreria <= 100 / ModHerreriA(.clase) Then
                    Call DoFundir(UserIndex)
                Else
                    Call WriteConsoleMsg(UserIndex, "No tienes los conocimientos suficientes en herrería para fundir este objeto.", FontTypeNames.FONTTYPE_INFO)
                End If
            End If
        End If
    End With
    
    Exit Sub
Errhandler:
    Call LogError("Error en FundirArmas. Error " & Err.Number & " : " & Err.description)
End Sub



Reemplazan la Function PuedeConstruir, por esta:
Código:

Public Function PuedeConstruir(ByVal UserIndex As Integer, ByVal ItemIndex As Integer, ByVal CantidadItems As Integer) As Boolean
'***************************************************
'Author: Unknown
'Last Modification: 24/08/2009
'24/08/2008: ZaMa - Validates if the player has the required skill
'16/11/2009: ZaMa - Validates if the player has the required amount of materials, depending on the number of items to make
'***************************************************
PuedeConstruir = HerreroTieneMateriales(UserIndex, ItemIndex, CantidadItems) And _
                    Round(100 / ModHerreriA(UserList(UserIndex).clase), 0) >= ObjData(ItemIndex).SkHerreria
End Function
Reemplazan:
Código:

If Round(.Stats.UserSkills(eSkill.Carpinteria) \ ModCarpinteria(.clase), 0) >= _
por esta:
Código:

If Round(100 \ ModCarpinteria(.clase), 0) >= _
en ese mismo sub, buscan y borran:
Código:

        Call SubirSkill(UserIndex, eSkill.Carpinteria, True)
Buscan:
Código:

If Round(100 / ModHerreriA(.clase), 0) < ObjData(ItemUpgrade).SkHerreria Then
            Call WriteConsoleMsg(UserIndex, "No tienes suficientes skills.", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
y lo eliminan.

Buscan:
Código:

If Round(.Stats.UserSkills(eSkill.Carpinteria) \ ModCarpinteria(.clase), 0) < ObjData(ItemUpgrade).SkCarpinteria Then
            Call WriteConsoleMsg(UserIndex, "No tienes suficientes skills.", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
y lo eliminan.

Buscan:
Código:

        Call SubirSkill(UserIndex, eSkill.Carpinteria, True)
y lo eliminan.

Reemplazan la function:
Código:

Function ModNavegacion(ByVal clase As eClass, ByVal UserIndex As Integer) As Single
'***************************************************
'Autor: Unknown (orginal version)
'Last Modification: 27/11/2009
'27/11/2009: ZaMa - A worker can navigate before only if it's an expert fisher
'12/04/2010: ZaMa - Arreglo modificador de pescador, para que navegue con 60
'***************************************************
Select Case clase
    Case eClass.Pirat
        ModNavegacion = 1
    Case eClass.Worker
        If UserList(UserIndex).Stats.UserSkills(eSkill.Pesca) = 100 Then
            ModNavegacion = 1.71
        Else
            ModNavegacion = 2
        End If
    Case Else
        ModNavegacion = 2
End Select

End Function
por esta:

Código:

Function ModNavegacion(ByVal clase As eClass, ByVal UserIndex As Integer) As Single
'***************************************************
'Autor: Unknown (orginal version)
'Last Modification: 27/11/2009
'27/11/2009: ZaMa - A worker can navigate before only if it's an expert fisher
'12/04/2010: ZaMa - Arreglo modificador de pescador, para que navegue con 60
'***************************************************
    Select Case clase
        Case eClass.Pirat
            ModNavegacion = 1
        Case eClass.Worker
            ModNavegacion = 1.71
        Case Else
            ModNavegacion = 2
    End Select

End Function

Reemplazan esta linea:
Código:

            puntosDomar = CInt(.Stats.UserAtributos(eAtributos.Carisma)) * CInt(.Stats.UserSkills(eSkill.Domar))
por esta:
Código:

 puntosDomar = CInt(.Stats.UserAtributos(eAtributos.Carisma)) * 100
Buscan:
Código:

If SupervivenciaSkill >= 60 Then
                            estatus = "(" & MinHp & "/" & MaxHp & ") "
                        Else
                            estatus = "¡Error!"
                        End If
y lo reemplazan por:
Código:

estatus = "(" & MinHp & "/" & MaxHp & ") "
Eliminan:
Código:

''
' Writes the "LevelUp" message to the given user's outgoing data buffer.
'
' @param    skillPoints The number of free skill points the player has.
' @remarks  The data is not actually sent until the buffer is properly flushed.

Public Sub WriteLevelUp(ByVal UserIndex As Integer, ByVal skillPoints As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 05/17/06
'Writes the "LevelUp" message to the given user's outgoing data buffer
'***************************************************
On Error GoTo Errhandler
    With UserList(UserIndex).outgoingData
        Call .WriteByte(ServerPacketID.LevelUp)
        Call .WriteInteger(skillPoints)
    End With
Exit Sub

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

    LevelUp                 ' SUNI

Buscan y lo eliminan en todas las veces que aparezca:
Código:

        Call SubirSkill(UserIndex, eSkill.Herreria, True)
Buscan en el DoMeditar:
Código:

        Dim MeditarSkill As Byte
y lo borran.


Reemplazan el HandleWork por este:
Código:

''
' Handles the "Work" message.
'
' @param    userIndex The index of the user sending the message.

Private Sub HandleWork(ByVal UserIndex As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 13/01/2010 (ZaMa)
'13/01/2010: ZaMa - El pirata se puede ocultar en barca
'***************************************************
    If UserList(UserIndex).incomingData.length < 2 Then
        Err.Raise UserList(UserIndex).incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
    
    With UserList(UserIndex)
        'Remove packet ID
        Call .incomingData.ReadByte
        
        Dim Dato1 As Byte
        
        Dato1 = .incomingData.ReadByte()
        
        If UserList(UserIndex).flags.Muerto = 1 Then Exit Sub
        
        'If exiting, cancel
        Call CancelExit(UserIndex)
        
        
        '
        If Dato1 = 2 Then 'ROBAR
        
            Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 2)
        
        ElseIf Dato1 = 1 Then 'MAGIA
        
            Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 1)
            
        ElseIf Dato1 = 17 Then 'DOMAR
        
            Call WriteMultiMessage(UserIndex, eMessages.WorkRequestTarget, 17)
            
        ElseIf Dato1 = 7 Then 'OCULTAR
        
            If .flags.EnConsulta Then
                Call WriteConsoleMsg(UserIndex, "No puedes ocultarte si estás en consulta.", FontTypeNames.FONTTYPE_INFO)
                Exit Sub
            End If
            
            If .flags.Navegando = 1 Then
                If .clase <> eClass.Pirat Then
                    '[CDT 17-02-2004]
                    If Not .flags.UltimoMensaje = 3 Then
                        Call WriteConsoleMsg(UserIndex, "No puedes ocultarte si estás navegando.", FontTypeNames.FONTTYPE_INFO)
                        .flags.UltimoMensaje = 3
                    End If
                    '[/CDT]
                    Exit Sub
                End If
            End If
                
            If .flags.Oculto = 1 Then
                    '[CDT 17-02-2004]
                If Not .flags.UltimoMensaje = 2 Then
                    Call WriteConsoleMsg(UserIndex, "Ya estás oculto.", FontTypeNames.FONTTYPE_INFO)
                    .flags.UltimoMensaje = 2
                End If
                    '[/CDT]
                Exit Sub
            End If
                
            Call DoOcultarse(UserIndex)
        End If
    End With
End Sub
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5046
Edad : 17
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Re: Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Toyz el 14/7/2016, 12:50 am

SEGUIMOS POR ACÁ!!! (SERVIDOR)
Reemplazan el HandleWorkLeftClick por este:
Código:

''
' Handles the "WorkLeftClick" message.
'
' @param    userIndex The index of the user sending the message.

Private Sub HandleWorkLeftClick(ByVal UserIndex As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 14/01/2010 (ZaMa)
'16/11/2009: ZaMa - Agregada la posibilidad de extraer madera elfica.
'12/01/2010: ZaMa - Ahora se admiten armas arrojadizas (proyectiles sin municiones).
'14/01/2010: ZaMa - Ya no se pierden municiones al atacar npcs con dueño.
'***************************************************
    If UserList(UserIndex).incomingData.length < 4 Then
        Err.Raise UserList(UserIndex).incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
    
    With UserList(UserIndex)
        'Remove packet ID
        Call .incomingData.ReadByte
        
        Dim X As Byte
        Dim Y As Byte
        Dim Dato As Byte
        Dim DummyInt As Integer
        Dim tU As Integer   'Target user
        Dim tN As Integer   'Target NPC
        
        X = .incomingData.ReadByte()
        Y = .incomingData.ReadByte()
        
        Dato = .incomingData.ReadByte()
        
        
        If .flags.Muerto = 1 Or .flags.Descansar Or .flags.Meditando _
        Or Not InMapBounds(.Pos.Map, X, Y) Then Exit Sub

        If Not InRangoVision(UserIndex, X, Y) Then
            Call WritePosUpdate(UserIndex)
            Exit Sub
        End If
        
        'If exiting, cancel
        Call CancelExit(UserIndex)
        
        Select Case Dato
        
            Case 18 'Proyectil
            
                'Check attack interval
                If Not IntervaloPermiteAtacar(UserIndex, False) Then Exit Sub
                'Check Magic interval
                If Not IntervaloPermiteLanzarSpell(UserIndex, False) Then Exit Sub
                'Check bow's interval
                If Not IntervaloPermiteUsarArcos(UserIndex) Then Exit Sub
                
                Dim Atacked As Boolean
                Atacked = True
                
                'Make sure the item is valid and there is ammo equipped.
                With .Invent
                    ' Tiene arma equipada?
                    If .WeaponEqpObjIndex = 0 Then
                        DummyInt = 1
                    ' En un slot válido?
                    ElseIf .WeaponEqpSlot < 1 Or .WeaponEqpSlot > UserList(UserIndex).CurrentInventorySlots Then
                        DummyInt = 1
                    ' Usa munición? (Si no la usa, puede ser un arma arrojadiza)
                    ElseIf ObjData(.WeaponEqpObjIndex).Municion = 1 Then
                        ' La municion esta equipada en un slot valido?
                        If .MunicionEqpSlot < 1 Or .MunicionEqpSlot > UserList(UserIndex).CurrentInventorySlots Then
                            DummyInt = 1
                        ' Tiene munición?
                        ElseIf .MunicionEqpObjIndex = 0 Then
                            DummyInt = 1
                        ' Son flechas?
                        ElseIf ObjData(.MunicionEqpObjIndex).OBJType <> eOBJType.otFlechas Then
                            DummyInt = 1
                        ' Tiene suficientes?
                        ElseIf .Object(.MunicionEqpSlot).Amount < 1 Then
                            DummyInt = 1
                        End If
                    ' Es un arma de proyectiles?
                    ElseIf ObjData(.WeaponEqpObjIndex).proyectil <> 1 Then
                        DummyInt = 2
                    End If
                    
                    If DummyInt <> 0 Then
                        If DummyInt = 1 Then
                            Call WriteConsoleMsg(UserIndex, "No tienes municiones.", FontTypeNames.FONTTYPE_INFO)
                            
                            Call Desequipar(UserIndex, .WeaponEqpSlot)
                        End If
                        
                        Call Desequipar(UserIndex, .MunicionEqpSlot)
                        Exit Sub
                    End If
                End With
                
                'Quitamos stamina
                If .Stats.MinSta >= 10 Then
                    Call QuitarSta(UserIndex, RandomNumber(1, 10))
                Else
                    If .Genero = eGenero.Hombre Then
                        Call WriteConsoleMsg(UserIndex, "Estás muy cansado para luchar.", FontTypeNames.FONTTYPE_INFO)
                    Else
                        Call WriteConsoleMsg(UserIndex, "Estás muy cansada para luchar.", FontTypeNames.FONTTYPE_INFO)
                    End If
                    Exit Sub
                End If
                
                Call LookatTile(UserIndex, .Pos.Map, X, Y)
                
                tU = .flags.TargetUser
                tN = .flags.TargetNPC
                
                'Validate target
                If tU > 0 Then
                    'Only allow to atack if the other one can retaliate (can see us)
                    If Abs(UserList(tU).Pos.Y - .Pos.Y) > RANGO_VISION_Y Then
                        Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos para atacar.", FontTypeNames.FONTTYPE_WARNING)
                        Exit Sub
                    End If
                    
                    'Prevent from hitting self
                    If tU = UserIndex Then
                        Call WriteConsoleMsg(UserIndex, "¡No puedes atacarte a vos mismo!", FontTypeNames.FONTTYPE_INFO)
                        Exit Sub
                    End If
                    
                    'Attack!
                    Atacked = UsuarioAtacaUsuario(UserIndex, tU)
                    
                ElseIf tN > 0 Then
                    'Only allow to atack if the other one can retaliate (can see us)
                    If Abs(Npclist(tN).Pos.Y - .Pos.Y) > RANGO_VISION_Y And Abs(Npclist(tN).Pos.X - .Pos.X) > RANGO_VISION_X Then
                        Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos para atacar.", FontTypeNames.FONTTYPE_WARNING)
                        Exit Sub
                    End If
                    
                    'Is it attackable???
                    If Npclist(tN).Attackable <> 0 Then
                        
                        'Attack!
                        Atacked = UsuarioAtacaNpc(UserIndex, tN)
                    End If
                End If
                
                ' Solo pierde la munición si pudo atacar al target, o tiro al aire
                If Atacked Then
                    With .Invent
                        ' Tiene equipado arco y flecha?
                        If ObjData(.WeaponEqpObjIndex).Municion = 1 Then
                            DummyInt = .MunicionEqpSlot
                        
                            
                            'Take 1 arrow away - we do it AFTER hitting, since if Ammo Slot is 0 it gives a rt9 and kicks players
                            Call QuitarUserInvItem(UserIndex, DummyInt, 1)
                            
                            If .Object(DummyInt).Amount > 0 Then
                                'QuitarUserInvItem unequips the ammo, so we equip it again
                                .MunicionEqpSlot = DummyInt
                                .MunicionEqpObjIndex = .Object(DummyInt).ObjIndex
                                .Object(DummyInt).Equipped = 1
                            Else
                                .MunicionEqpSlot = 0
                                .MunicionEqpObjIndex = 0
                            End If
                        ' Tiene equipado un arma arrojadiza
                        Else
                            DummyInt = .WeaponEqpSlot
                            
                            'Take 1 knife away
                            Call QuitarUserInvItem(UserIndex, DummyInt, 1)
                            
                            If .Object(DummyInt).Amount > 0 Then
                                'QuitarUserInvItem unequips the weapon, so we equip it again
                                .WeaponEqpSlot = DummyInt
                                .WeaponEqpObjIndex = .Object(DummyInt).ObjIndex
                                .Object(DummyInt).Equipped = 1
                            Else
                                .WeaponEqpSlot = 0
                                .WeaponEqpObjIndex = 0
                            End If
                            
                        End If
                        
                        Call UpdateUserInv(False, UserIndex, DummyInt)
                    End With
               End If
            
            Case 1 'Magia
                'Check the map allows spells to be casted.
                If MapInfo(.Pos.Map).MagiaSinEfecto > 0 Then
                    Call WriteConsoleMsg(UserIndex, "Una fuerza oscura te impide canalizar tu energía.", FontTypeNames.FONTTYPE_FIGHT)
                    Exit Sub
                End If
                
                'Target whatever is in that tile
                Call LookatTile(UserIndex, .Pos.Map, X, Y)
                
                'If it's outside range log it and exit
                If Abs(.Pos.X - X) > RANGO_VISION_X Or Abs(.Pos.Y - Y) > RANGO_VISION_Y Then
                    Call LogCheating("Ataque fuera de rango de " & .name & "(" & .Pos.Map & "/" & .Pos.X & "/" & .Pos.Y & ") ip: " & .ip & " a la posición (" & .Pos.Map & "/" & X & "/" & Y & ")")
                    Exit Sub
                End If
                
                'Check bow's interval
                If Not IntervaloPermiteUsarArcos(UserIndex, False) Then Exit Sub
                
                
                'Check Spell-Hit interval
                If Not IntervaloPermiteGolpeMagia(UserIndex) Then
                    'Check Magic interval
                    If Not IntervaloPermiteLanzarSpell(UserIndex) Then
                        Exit Sub
                    End If
                End If
                
                
                'Check intervals and cast
                If .flags.Hechizo > 0 Then
                    Call LanzarHechizo(.flags.Hechizo, UserIndex)
                    .flags.Hechizo = 0
                Else
                    Call WriteConsoleMsg(UserIndex, "¡Primero selecciona el hechizo que quieres lanzar!", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case 12 'Pesca
                DummyInt = .Invent.WeaponEqpObjIndex
                If DummyInt = 0 Then Exit Sub
                
                'Check interval
                If Not IntervaloPermiteTrabajar(UserIndex) Then Exit Sub
                
                'Basado en la idea de Barrin
                'Comentario por Barrin: jah, "basado", caradura ! ^^
                If MapData(.Pos.Map, .Pos.X, .Pos.Y).trigger = 1 Then
                    Call WriteConsoleMsg(UserIndex, "No puedes pescar desde donde te encuentras.", FontTypeNames.FONTTYPE_INFO)
                    Exit Sub
                End If
                
                If HayAgua(.Pos.Map, X, Y) Then
                    Select Case DummyInt
                        Case CAÑA_PESCA
                            Call DoPescar(UserIndex)
                        
                        Case RED_PESCA
                            If Abs(.Pos.X - X) + Abs(.Pos.Y - Y) > 2 Then
                                Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos para pescar.", FontTypeNames.FONTTYPE_INFO)
                                Exit Sub
                            End If
                            
                            Call DoPescarRed(UserIndex)
                        
                        Case Else
                            Exit Sub    'Invalid item!
                    End Select
                    
                    'Play sound!
                    Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(SND_PESCAR, .Pos.X, .Pos.Y))
                Else
                    Call WriteConsoleMsg(UserIndex, "No hay agua donde pescar. Busca un lago, río o mar.", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case 2 'Robar
                'Does the map allow us to steal here?
                If MapInfo(.Pos.Map).Pk Then
                    
                    'Check interval
                    If Not IntervaloPermiteTrabajar(UserIndex) Then Exit Sub
                    
                    'Target whatever is in that tile
                    Call LookatTile(UserIndex, UserList(UserIndex).Pos.Map, X, Y)
                    
                    tU = .flags.TargetUser
                    
                    If tU > 0 And tU <> UserIndex Then
                        'Can't steal administrative players
                        If UserList(tU).flags.Privilegios And PlayerType.User Then
                            If UserList(tU).flags.Muerto = 0 Then
                                 If Abs(.Pos.X - X) + Abs(.Pos.Y - Y) > 1 Then
                                     Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos.", FontTypeNames.FONTTYPE_INFO)
                                     Exit Sub
                                 End If
                                
                                 '17/09/02
                                 'Check the trigger
                                 If MapData(UserList(tU).Pos.Map, X, Y).trigger = eTrigger.ZONASEGURA Then
                                     Call WriteConsoleMsg(UserIndex, "No puedes robar aquí.", FontTypeNames.FONTTYPE_WARNING)
                                     Exit Sub
                                 End If
                                
                                 If MapData(.Pos.Map, .Pos.X, .Pos.Y).trigger = eTrigger.ZONASEGURA Then
                                     Call WriteConsoleMsg(UserIndex, "No puedes robar aquí.", FontTypeNames.FONTTYPE_WARNING)
                                     Exit Sub
                                 End If
                                
                                 Call DoRobar(UserIndex, tU)
                            End If
                        End If
                    Else
                        Call WriteConsoleMsg(UserIndex, "¡No hay a quien robarle!", FontTypeNames.FONTTYPE_INFO)
                    End If
                Else
                    Call WriteConsoleMsg(UserIndex, "¡No puedes robar en zonas seguras!", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case 9 'Talar
                'Check interval
                If Not IntervaloPermiteTrabajar(UserIndex) Then Exit Sub
                
                If .Invent.WeaponEqpObjIndex = 0 Then
                    Call WriteConsoleMsg(UserIndex, "Deberías equiparte el hacha.", FontTypeNames.FONTTYPE_INFO)
                    Exit Sub
                End If
                
                If .Invent.WeaponEqpObjIndex <> HACHA_LEÑADOR And _
                    .Invent.WeaponEqpObjIndex <> HACHA_LEÑA_ELFICA Then
                    ' Podemos llegar acá si el user equipó el anillo dsp de la U y antes del click
                    Exit Sub
                End If
                
                DummyInt = MapData(.Pos.Map, X, Y).ObjInfo.ObjIndex
                
                If DummyInt > 0 Then
                    If Abs(.Pos.X - X) + Abs(.Pos.Y - Y) > 2 Then
                        Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos.", FontTypeNames.FONTTYPE_INFO)
                        Exit Sub
                    End If
                    
                    'Barrin 29/9/03
                    If .Pos.X = X And .Pos.Y = Y Then
                        Call WriteConsoleMsg(UserIndex, "No puedes talar desde allí.", FontTypeNames.FONTTYPE_INFO)
                        Exit Sub
                    End If
                    
                    '¿Hay un arbol donde clickeo?
                    If ObjData(DummyInt).OBJType = eOBJType.otArboles And .Invent.WeaponEqpObjIndex = HACHA_LEÑADOR Then
                        Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(SND_TALAR, .Pos.X, .Pos.Y))
                        Call DoTalar(UserIndex)
                    ElseIf ObjData(DummyInt).OBJType = eOBJType.otArbolElfico And .Invent.WeaponEqpObjIndex = HACHA_LEÑA_ELFICA Then
                        If .Invent.WeaponEqpObjIndex = HACHA_LEÑA_ELFICA Then
                            Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(SND_TALAR, .Pos.X, .Pos.Y))
                            Call DoTalar(UserIndex, True)
                        Else
                            Call WriteConsoleMsg(UserIndex, "El hacha utilizado no es suficientemente poderosa.", FontTypeNames.FONTTYPE_INFO)
                        End If
                    End If
                Else
                    Call WriteConsoleMsg(UserIndex, "No hay ningún árbol ahí.", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case 13 'Mineria
                If Not IntervaloPermiteTrabajar(UserIndex) Then Exit Sub
                                
                If .Invent.WeaponEqpObjIndex = 0 Then Exit Sub
                
                If .Invent.WeaponEqpObjIndex <> PIQUETE_MINERO Then
                    ' Podemos llegar acá si el user equipó el anillo dsp de la U y antes del click
                    Exit Sub
                End If
                
                'Target whatever is in the tile
                Call LookatTile(UserIndex, .Pos.Map, X, Y)
                
                DummyInt = MapData(.Pos.Map, X, Y).ObjInfo.ObjIndex
                
                If DummyInt > 0 Then
                    'Check distance
                    If Abs(.Pos.X - X) + Abs(.Pos.Y - Y) > 2 Then
                        Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos.", FontTypeNames.FONTTYPE_INFO)
                        Exit Sub
                    End If
                    
                    DummyInt = MapData(.Pos.Map, X, Y).ObjInfo.ObjIndex 'CHECK
                    '¿Hay un yacimiento donde clickeo?
                    If ObjData(DummyInt).OBJType = eOBJType.otYacimiento Then
                        Call DoMineria(UserIndex)
                    Else
                        Call WriteConsoleMsg(UserIndex, "Ahí no hay ningún yacimiento.", FontTypeNames.FONTTYPE_INFO)
                    End If
                Else
                    Call WriteConsoleMsg(UserIndex, "Ahí no hay ningún yacimiento.", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case 17 'Domar
                'Modificado 25/11/02
                'Optimizado y solucionado el bug de la doma de
                'criaturas hostiles.
                
                'Target whatever is that tile
                Call LookatTile(UserIndex, .Pos.Map, X, Y)
                tN = .flags.TargetNPC
                
                If tN > 0 Then
                    If Npclist(tN).flags.Domable > 0 Then
                        If Abs(.Pos.X - X) + Abs(.Pos.Y - Y) > 2 Then
                            Call WriteConsoleMsg(UserIndex, "Estás demasiado lejos.", FontTypeNames.FONTTYPE_INFO)
                            Exit Sub
                        End If
                        
                        If LenB(Npclist(tN).flags.AttackedBy) <> 0 Then
                            Call WriteConsoleMsg(UserIndex, "No puedes domar una criatura que está luchando con un jugador.", FontTypeNames.FONTTYPE_INFO)
                            Exit Sub
                        End If
                        
                        Call DoDomar(UserIndex, tN)
                    Else
                        Call WriteConsoleMsg(UserIndex, "No puedes domar a esa criatura.", FontTypeNames.FONTTYPE_INFO)
                    End If
                Else
                    Call WriteConsoleMsg(UserIndex, "¡No hay ninguna criatura allí!", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case FundirMetal    'UGLY!!! This is a constant, not a skil!!
                'Check interval
                If Not IntervaloPermiteTrabajar(UserIndex) Then Exit Sub
                
                'Check there is a proper item there
                If .flags.TargetObj > 0 Then
                    If ObjData(.flags.TargetObj).OBJType = eOBJType.otFragua Then
                        'Validate other items
                        If .flags.TargetObjInvSlot < 1 Or .flags.TargetObjInvSlot > .CurrentInventorySlots Then
                            Exit Sub
                        End If
                        
                        ''chequeamos que no se zarpe duplicando oro
                        If .Invent.Object(.flags.TargetObjInvSlot).ObjIndex <> .flags.TargetObjInvIndex Then
                            If .Invent.Object(.flags.TargetObjInvSlot).ObjIndex = 0 Or .Invent.Object(.flags.TargetObjInvSlot).Amount = 0 Then
                                Call WriteConsoleMsg(UserIndex, "No tienes más minerales.", FontTypeNames.FONTTYPE_INFO)
                                Exit Sub
                            End If
                            
                            ''FUISTE
                            Call WriteErrorMsg(UserIndex, "Has sido expulsado por el sistema anti cheats.")
                            Call FlushBuffer(UserIndex)
                            Call CloseSocket(UserIndex)
                            Exit Sub
                        End If
                        If ObjData(.flags.TargetObjInvIndex).OBJType = eOBJType.otMinerales Then
                            Call FundirMineral(UserIndex)
                        ElseIf ObjData(.flags.TargetObjInvIndex).OBJType = eOBJType.otWeapon Then
                            Call FundirArmas(UserIndex)
                        End If
                    Else
                        Call WriteConsoleMsg(UserIndex, "Ahí no hay ninguna fragua.", FontTypeNames.FONTTYPE_INFO)
                    End If
                Else
                    Call WriteConsoleMsg(UserIndex, "Ahí no hay ninguna fragua.", FontTypeNames.FONTTYPE_INFO)
                End If
            
            Case 15 'Herrería
                'Target wehatever is in that tile
                Call LookatTile(UserIndex, .Pos.Map, X, Y)
                
                If .flags.TargetObj > 0 Then
                    If ObjData(.flags.TargetObj).OBJType = eOBJType.otYunque Then
                        Call EnivarArmasConstruibles(UserIndex)
                        Call EnivarArmadurasConstruibles(UserIndex)
                        Call WriteShowBlacksmithForm(UserIndex)
                    Else
                        Call WriteConsoleMsg(UserIndex, "Ahí no hay ningún yunque.", FontTypeNames.FONTTYPE_INFO)
                    End If
                Else
                    Call WriteConsoleMsg(UserIndex, "Ahí no hay ningún yunque.", FontTypeNames.FONTTYPE_INFO)
                End If
        End Select
    End With
End Sub

Buscan:
Código:

Call WriteConsoleMsg(UserIndex, "%%%%%%%%%%%% INFO DEL HECHIZO %%%%%%%%%%%%" & vbCrLf _
                                               & "Nombre:" & .Nombre & vbCrLf _
                                               & "Descripción:" & .desc & vbCrLf _
                                               & "Skill requerido: " & .MinSkill & " de magia." & vbCrLf _
                                               & "Maná necesario: " & .ManaRequerido & vbCrLf _
                                               & "Energía necesaria: " & .StaRequerido & vbCrLf _
                                               & "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", FontTypeNames.FONTTYPE_INFO)
y lo reemplazan por este:
Código:

Call WriteConsoleMsg(UserIndex, "%%%%%%%%%%%% INFO DEL HECHIZO %%%%%%%%%%%%" & vbCrLf _
                                               & "Nombre:" & .Nombre & vbCrLf _
                                               & "Descripción:" & .desc & vbCrLf _
                                               & "Skill requerido: " & .MinSkill & " de magia." & vbCrLf _
                                               & "Energía necesaria: " & .StaRequerido & vbCrLf _
                                               & "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", FontTypeNames.FONTTYPE_INFO)


CLIENTE:
CLIENTE:
CLIENTE:
CLIENTE:
CLIENTE:
CLIENTE:
CLIENTE:
CLIENTE:

Reemplazan todas las veces que aparezca UsingSkill por Using

Eliminan:
Código:

''
' Writes the "ModifySkills" message to the outgoing data buffer.
'
' @param    skillEdt a-based array containing for each skill the number of points to add to it.
' @remarks  The data is not actually sent until the buffer is properly flushed.

Public Sub WriteModifySkills(ByRef skillEdt() As Byte)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 05/17/06
'Writes the "ModifySkills" message to the outgoing data buffer
'***************************************************
    Dim i As Long
    
    With outgoingData
        Call .WriteByte(ClientPacketID.ModifySkills)
        
        For i = 1 To NUMSKILLS
            Call .WriteByte(skillEdt(i))
        Next i
    End With
End Sub
Eliminan:
Código:

Call WriteModifySkills(skillChanges())
Eliminan:
Código:

    ModifySkills            'SKSE
Eliminan:
Código:

    SendSkills              ' SKILLS
Eliminan:
Código:

        Case ServerPacketID.SendSkills              ' SKILLS
            Call HandleSendSkills
Eliminan:
Código:

''
' Handles the SendSkills message.

Private Sub HandleSendSkills()
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 11/19/09
'11/19/09: Pato - Now the server send the percentage of progress of the skills.
'***************************************************
    If incomingData.length < 2 + NUMSKILLS * 2 Then
        Err.Raise incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
    
    'Remove packet ID
    Call incomingData.ReadByte
    
    UserClase = incomingData.ReadByte
    Dim i As Long
    
    For i = 1 To NUMSKILLS
        UserSkills(i) = incomingData.ReadByte()
        PorcentajeSkills(i) = incomingData.ReadByte()
    Next i
    LlegaronSkills = True
End Sub

Eliminan:
Código:

    RequestSkills           'ESKI
Eliminan:
Código:


Private Sub imgAsignarSkill_Click()
    Dim i As Integer
    
    LlegaronSkills = False
    Call FlushBuffer
    
    Do While Not LlegaronSkills
        DoEvents 'esperamos a que lleguen y mantenemos la interfaz viva
    Loop
    LlegaronSkills = False
    
    For i = 1 To NUMSKILLS
        frmSkills3.text1(i).Caption = UserSkills(i)
    Next i
    
    Alocados = SkillPoints
    frmSkills3.puntos.Caption = SkillPoints
    frmSkills3.Show , frmMain

End Sub
Reemplazan este sub:
Código:

Private Sub imgEstadisticas_Click()
  
por este:
Código:

 LlegaronAtrib = False
    LlegoFama = False
    Call WriteRequestAtributes
    Call WriteRequestMiniStats
    Call WriteRequestFame
    Call FlushBuffer
    Do While Not LlegaronAtrib Or Not LlegoFama
        DoEvents 'esperamos a que lleguen y mantenemos la interfaz viva
    Loop
    frmEstadisticas.Iniciar_Labels
    frmEstadisticas.Show , frmMain
    LlegaronAtrib = False
    LlegoFama = False
End Sub
Eliminan:
Código:

For i = 1 To NUMSKILLS
    Skills(i).Caption = UserSkills(i)
    Ancho = IIf(PorcentajeSkills(i) = 0, ANCHO_BARRA, (100 - PorcentajeSkills(i)) / 100 * ANCHO_BARRA)
    shpSkillsBar(i).Width = Ancho
    shpSkillsBar(i).Left = BAR_LEFT_POS + ANCHO_BARRA - Ancho
Next
Eliminan:
Código:

Private Sub cmdSKILLS_Click()
    '/SKILLS
    Dim Nick As String

    Nick = cboListaUsus.Text
    
    If LenB(Nick) <> 0 Then _
        Call WriteRequestCharSkills(Nick)
End Sub
Eliminan:

Código:

''
' Writes the "RequestCharSkills" message to the outgoing data buffer.
'
' @param    username The user whose skills are requested.
' @remarks  The data is not actually sent until the buffer is properly flushed.

Public Sub WriteRequestCharSkills(ByVal UserName As String)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 05/17/06
'Writes the "RequestCharSkills" message to the outgoing data buffer
'***************************************************
    With outgoingData
        Call .WriteByte(ClientPacketID.GMCommands)
        Call .WriteByte(eGMCommands.RequestCharSkills)
        
        Call .WriteASCIIString(UserName)
    End With
End Sub
Eliminan:
Código:

                        Case "SKILLS"
                            tmpInt = eEditOptions.eo_Skills
                        
                        Case "SKILLSLIBRES"
                            tmpInt = eEditOptions.eo_SkillPointsLeft
Eliminan:
Código:

            Case "/SKILLS"
                If notNullArguments Then
                    Call WriteRequestCharSkills(ArgumentosRaw)
                Else
                    'Avisar que falta el parametro
                    Call ShowConsoleMsg("Faltan parámetros. Utilice /skills NICKNAME.")
                End If
Eliminan:
Código:

    Set cBotonAsignarSkill = New clsGraphicalButton
Eliminan:
Código:

Set picSkillStar = LoadPicture(GrhPath & "BotonAsignarSkills.bmp")

    If SkillPoints > 0 Then imgAsignarSkill.Picture = picSkillStar
    
    imgAsignarSkill.MouseIcon = picMouseIcon
Eliminan:
Código:

Public Sub LightSkillStar(ByVal bTurnOn As Boolean)
    If bTurnOn Then
        imgAsignarSkill.Picture = picSkillStar
    Else
        Set imgAsignarSkill.Picture = Nothing
    End If
End Sub
Eliminan todas las veces que aparezca:
Código:

    For i = 1 To NUMSKILLS
        UserSkills(i) = 0
    Next i
Eliminan todas las veecs que aparezca:
Código:

    SkillPoints = 0
Borran:
Código:

Public MirandoAsignarSkills As Boolean
Eliminan:
Código:

Public Const NUMSKILLS As Byte = 20
Eliminan:
Código:

Public UserSkills(1 To NUMSKILLS) As Byte
Public PorcentajeSkills(1 To NUMSKILLS) As Byte
Public SkillsNames(1 To NUMSKILLS) As String
Eliminan:
Código:

Public SkillPoints As Integer
Eliminan:
Código:

    eo_Skills
    eo_SkillPointsLeft
Eliminan:
Código:

Public Const MAXSKILLPOINTS As Byte = 100
Eliminan:
Código:

Public Enum eSkill
    Magia = 1
    Robar = 2
    Tacticas = 3
    Armas = 4
    Meditar = 5
    Apuñalar = 6
    Ocultarse = 7
    Supervivencia = 8
    Talar = 9
    Comerciar = 10
    Defensa = 11
    Pesca = 12
    Mineria = 13
    Carpinteria = 14
    Herreria = 15
    Liderazgo = 16
    Domar = 17
    Proyectiles = 18
    Wrestling = 19
    Navegacion = 20
End Enum
Eliminan:
Código:

    RequestCharSkills       '/SKILLS
Eliminan:
Código:

SkillsNames(eSkill.Magia) = "Magia"
    SkillsNames(eSkill.Robar) = "Robar"
    SkillsNames(eSkill.Tacticas) = "Evasión en combate"
    SkillsNames(eSkill.Armas) = "Combate cuerpo a cuerpo"
    SkillsNames(eSkill.Meditar) = "Meditar"
    SkillsNames(eSkill.Apuñalar) = "Apuñalar"
    SkillsNames(eSkill.Ocultarse) = "Ocultarse"
    SkillsNames(eSkill.Supervivencia) = "Supervivencia"
    SkillsNames(eSkill.Talar) = "Talar árboles"
    SkillsNames(eSkill.Comerciar) = "Comercio"
    SkillsNames(eSkill.Defensa) = "Defensa con escudos"
    SkillsNames(eSkill.Pesca) = "Pesca"
    SkillsNames(eSkill.Mineria) = "Mineria"
    SkillsNames(eSkill.Carpinteria) = "Carpinteria"
    SkillsNames(eSkill.Herreria) = "Herreria"
    SkillsNames(eSkill.Liderazgo) = "Liderazgo"
    SkillsNames(eSkill.Domar) = "Domar animales"
    SkillsNames(eSkill.Proyectiles) = "Combate a distancia"
    SkillsNames(eSkill.Wrestling) = "Combate sin armas"
    SkillsNames(eSkill.Navegacion) = "Navegacion"
Eliminan:
Código:

Public LlegaronSkills As Boolean
Eliminan:
Código:


''
' Handles the LevelUp message.

Private Sub HandleLevelUp()
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 05/17/06
'
'***************************************************
    If incomingData.length < 3 Then
        Err.Raise incomingData.NotEnoughDataErrCode
        Exit Sub
    End If
    
    'Remove packet ID
    Call incomingData.ReadByte
    
    SkillPoints = SkillPoints + incomingData.ReadInteger()
    
    Call frmMain.LightSkillStar(True)
End Sub
Eliminan:
Código:

    LevelUp                 ' SUNI
Eliminan:
Código:

        Case ServerPacketID.LevelUp                 ' SUNI
            Call HandleLevelUpWork
Eliminan:
Código:

Private cBotonAsignarSkill As clsGraphicalButton
Reemplazan el Key_Up por este:

Código:

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
'***************************************************
'Autor: Unknown
'Last Modification: 18/11/2009
'18/11/2009: ZaMa - Ahora se pueden poner comandos en los mensajes personalizados (execpto guildchat y privados)
'***************************************************
#If SeguridadAlkon Then
    If LOGGING Then Call CheatingDeath.StoreKey(KeyCode, False)
#End If
    
    If (Not SendTxt.Visible) And (Not SendCMSTXT.Visible) Then
        
        'Checks if the key is valid
        If LenB(CustomKeys.ReadableName(KeyCode)) > 0 Then
            Select Case KeyCode
                Case CustomKeys.BindedKey(eKeyType.mKeyToggleMusic)
                    Audio.MusicActivated = Not Audio.MusicActivated
                    
                Case CustomKeys.BindedKey(eKeyType.mKeyToggleSound)
                    Audio.SoundActivated = Not Audio.SoundActivated
                    
                Case CustomKeys.BindedKey(eKeyType.mKeyToggleFxs)
                    Audio.SoundEffectsActivated = Not Audio.SoundEffectsActivated
                
                Case CustomKeys.BindedKey(eKeyType.mKeyGetObject)
                    Call AgarrarItem
                
                Case CustomKeys.BindedKey(eKeyType.mKeyEquipObject)
                    Call EquiparItem
                
                Case CustomKeys.BindedKey(eKeyType.mKeyToggleNames)
                    Nombres = Not Nombres
                
                Case CustomKeys.BindedKey(eKeyType.mKeyTamAnimal)
                    If UserEstado = 1 Then
                        With FontTypes(FontTypeNames.FONTTYPE_INFO)
                            Call ShowConsoleMsg("¡¡Estás muerto!!", .red, .green, .blue, .bold, .italic)
                        End With
                    Else
                        Call WriteWork(17)
                    End If
                    
                Case CustomKeys.BindedKey(eKeyType.mKeySteal)
                    If UserEstado = 1 Then
                        With FontTypes(FontTypeNames.FONTTYPE_INFO)
                            Call ShowConsoleMsg("¡¡Estás muerto!!", .red, .green, .blue, .bold, .italic)
                        End With
                    Else
                        Call WriteWork(2)
                    End If
                    
                Case CustomKeys.BindedKey(eKeyType.mKeyHide)
                    If UserEstado = 1 Then
                        With FontTypes(FontTypeNames.FONTTYPE_INFO)
                            Call ShowConsoleMsg("¡¡Estás muerto!!", .red, .green, .blue, .bold, .italic)
                        End With
                    Else
                        Call WriteWork(7)
                    End If
                                    
                Case CustomKeys.BindedKey(eKeyType.mKeyDropObject)
                    Call TirarItem
                
                Case CustomKeys.BindedKey(eKeyType.mKeyUseObject)
                    If macrotrabajo.Enabled Then Call DesactivarMacroTrabajo
                        
                    If MainTimer.Check(TimersIndex.UseItemWithU) Then
                        Call UsarItem
                    End If
                
                Case CustomKeys.BindedKey(eKeyType.mKeyRequestRefresh)
                    If MainTimer.Check(TimersIndex.SendRPU) Then
                        Call WriteRequestPositionUpdate
                        Beep
                    End If
                Case CustomKeys.BindedKey(eKeyType.mKeyToggleSafeMode)
                    Call WriteSafeToggle

                Case CustomKeys.BindedKey(eKeyType.mKeyToggleResuscitationSafe)
                    Call WriteResuscitationToggle
            End Select
        Else
            Select Case KeyCode
                'Custom messages!
                Case vbKey0 To vbKey9
                    Dim CustomMessage As String
                    
                    CustomMessage = CustomMessages.Message((KeyCode - 39) Mod 10)
                    If LenB(CustomMessage) <> 0 Then
                        ' No se pueden mandar mensajes personalizados de clan o privado!
                        If UCase(Left(CustomMessage, 5)) <> "/CMSG" And _
                            Left(CustomMessage, 1) <> "\" Then
                            
                            Call ParseUserCommand(CustomMessage)
                        End If
                    End If
            End Select
        End If
    End If
    
    Select Case KeyCode
        Case CustomKeys.BindedKey(eKeyType.mKeyTalkWithGuild)
            If SendTxt.Visible Then Exit Sub
            
            If (Not Comerciando) And _
              (Not frmMSG.Visible) And (Not MirandoForo) And _
              (Not frmEstadisticas.Visible) And (Not frmCantidad.Visible) Then
                SendCMSTXT.Visible = True
                SendCMSTXT.SetFocus
            End If
        
        Case CustomKeys.BindedKey(eKeyType.mKeyTakeScreenShot)
            Call ScreenCapture
                
        Case CustomKeys.BindedKey(eKeyType.mKeyShowOptions)
            Call frmOpciones.Show(vbModeless, frmMain)
        
        Case CustomKeys.BindedKey(eKeyType.mKeyMeditate)
            If UserMinMAN = UserMaxMAN Then Exit Sub
            
            If UserEstado = 1 Then
                With FontTypes(FontTypeNames.FONTTYPE_INFO)
                    Call ShowConsoleMsg("¡¡Estás muerto!!", .red, .green, .blue, .bold, .italic)
                End With
                Exit Sub
            End If
                
            If Not PuedeMacrear Then
                AddtoRichTextBox frmMain.RecTxt, "No tan rápido..!", 255, 255, 255, False, False, True
            Else
                Call WriteMeditate
                PuedeMacrear = False
            End If
        
        Case CustomKeys.BindedKey(eKeyType.mKeyCastSpellMacro)
            If UserEstado = 1 Then
                With FontTypes(FontTypeNames.FONTTYPE_INFO)
                    Call ShowConsoleMsg("¡¡Estás muerto!!", .red, .green, .blue, .bold, .italic)
                End With
                Exit Sub
            End If
            
            If TrainingMacro.Enabled Then
                DesactivarMacroHechizos
            Else
                ActivarMacroHechizos
            End If
        
        Case CustomKeys.BindedKey(eKeyType.mKeyWorkMacro)
            If UserEstado = 1 Then
                With FontTypes(FontTypeNames.FONTTYPE_INFO)
                    Call ShowConsoleMsg("¡¡Estás muerto!!", .red, .green, .blue, .bold, .italic)
                End With
                Exit Sub
            End If
            
            If macrotrabajo.Enabled Then
                Call DesactivarMacroTrabajo
            Else
                Call ActivarMacroTrabajo
            End If
        
        Case CustomKeys.BindedKey(eKeyType.mKeyExitGame)
            If frmMain.macrotrabajo.Enabled Then Call DesactivarMacroTrabajo
            Call WriteQuit
            
        Case CustomKeys.BindedKey(eKeyType.mKeyAttack)
            If Shift <> 0 Then Exit Sub
            
            If Not MainTimer.Check(TimersIndex.Arrows, False) Then Exit Sub 'Check if arrows interval has finished.
            If Not MainTimer.Check(TimersIndex.CastSpell, False) Then 'Check if spells interval has finished.
                If Not MainTimer.Check(TimersIndex.CastAttack) Then Exit Sub 'Corto intervalo Golpe-Hechizo
            Else
                If Not MainTimer.Check(TimersIndex.Attack) Or UserDescansar Or UserMeditar Then Exit Sub
            End If
            
            If TrainingMacro.Enabled Then Call DesactivarMacroHechizos
            If macrotrabajo.Enabled Then Call DesactivarMacroTrabajo
            Call WriteAttack
        
        Case CustomKeys.BindedKey(eKeyType.mKeyTalk)
            If SendCMSTXT.Visible Then Exit Sub
            
            If (Not Comerciando) And _
              (Not frmMSG.Visible) And (Not MirandoForo) And _
              (Not frmEstadisticas.Visible) And (Not frmCantidad.Visible) Then
                SendTxt.Visible = True
                SendTxt.SetFocus
            End If
            
    End Select
End Sub
reemplazar el macrotrabajo_Timer() por este:

Código:

Private Sub macrotrabajo_Timer()
    If Inventario.SelectedItem = 0 Then
        Call DesactivarMacroTrabajo
        Exit Sub
    End If
    
    'Macros are disabled if not using Argentum!
    If Not Application.IsAppActive() Then
        Call DesactivarMacroTrabajo
        Exit Sub
    End If
    
    If Using = 12 Or Using = 9 Or Using = 13 Or _
                Using = FundirMetal Or (Using = 15 And Not frmHerrero.Visible) Then
        Call WriteWorkLeftClick(tX, tY, Using)
        Using = 0
    End If
    
    'If Inventario.OBJType(Inventario.SelectedItem) = eObjType.otWeapon Then
     If Not (frmCarp.Visible = True) Then Call UsarItem
End Sub
Reemplazan:
Código:

Call WriteWork(eSkill.Magia)
por esto todas las veces que aparezca:
Código:

Call WriteWork(1)
Buscan:
Código:

    If Using = Magia And Not MainTimer.Check(TimersIndex.CastSpell) Then Exit Sub
    
    If Using = Proyectiles And Not MainTimer.Check(TimersIndex.Attack) Then Exit Sub
Lo reemplazan por:
Código:

    If Using = 1 And Not MainTimer.Check(TimersIndex.CastSpell) Then Exit Sub
    
    If Using = 18 And Not MainTimer.Check(TimersIndex.Attack) Then Exit Sub
Buscan:
Código:

Private Sub RecTxt_Change()
On Error Resume Next  'el .SetFocus causaba errores al salir y volver a entrar
    If Not Application.IsAppActive() Then Exit Sub
    
    If SendTxt.Visible Then
        SendTxt.SetFocus
    ElseIf Me.SendCMSTXT.Visible Then
        SendCMSTXT.SetFocus
    ElseIf (Not Comerciando) And (Not MirandoAsignarSkills) And _
        (Not frmMSG.Visible) And (Not MirandoForo) And _
        (Not frmEstadisticas.Visible) And (Not frmCantidad.Visible) Then
        
        If picInv.Visible Then
            picInv.SetFocus
        ElseIf hlst.Visible Then
            hlst.SetFocus
        End If
    End If
End Sub
Lo reemplazan por esto:
Código:

Private Sub RecTxt_Change()
On Error Resume Next  'el .SetFocus causaba errores al salir y volver a entrar
    If Not Application.IsAppActive() Then Exit Sub
    
    If SendTxt.Visible Then
        SendTxt.SetFocus
    ElseIf Me.SendCMSTXT.Visible Then
        SendCMSTXT.SetFocus
    ElseIf (Not Comerciando) And (Not frmMSG.Visible) And (Not MirandoForo) And _
        (Not frmEstadisticas.Visible) And (Not frmCantidad.Visible) Then
        
        If picInv.Visible Then
            picInv.SetFocus
        ElseIf hlst.Visible Then
            hlst.SetFocus
        End If
    End If
End Sub
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5046
Edad : 17
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Re: Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Toyz el 14/7/2016, 12:52 am

(SEGUIMOS POR ACÁ!, (CLIENTE!!!)
Eliminan todo esto:
Código:

'Argentum Online 0.11.6
'
'Copyright (C) 2002 Márquez Pablo Ignacio
'Copyright (C) 2002 Otto Perez
'Copyright (C) 2002 Aaron Perkins
'Copyright (C) 2002 Matías Fernando Pequeño
'
'This program is free software; you can redistribute it and/or modify
'it under the terms of the Affero General Public License;
'either version 1 of the License, or any later version.
'
'This program is distributed in the hope that it will be useful,
'but WITHOUT ANY WARRANTY; without even the implied warranty of
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'Affero General Public License for more details.
'
'You should have received a copy of the Affero General Public License
'along with this program; if not, you can find it at http://www.affero.org/oagpl.html
'
'Argentum Online is based on Baronsoft's VB6 Online RPG
'You can contact the original creator of ORE at aaron@baronsoft.com
'for more information about ORE please visit http://www.baronsoft.com/
'
'
'You can contact me at:
'morgolock@speedy.com.ar
'www.geocities.com/gmorgolock
'Calle 3 número 983 piso 7 dto A
'La Plata - Pcia, Buenos Aires - Republica Argentina
'Código Postal 1900
'Pablo Ignacio Márquez

Option Explicit

Private clsFormulario As clsFormMovementManager

Private cBotonMas(1 To NUMSKILLS) As clsGraphicalButton
Private cBotonMenos(1 To NUMSKILLS) As clsGraphicalButton
Private cSkillNames(1 To NUMSKILLS) As clsGraphicalButton
Private cBtonAceptar As clsGraphicalButton
Private cBotonCancelar As clsGraphicalButton

Public LastPressed As clsGraphicalButton

Private bPuedeMagia As Boolean
Private bPuedeMeditar As Boolean
Private bPuedeEscudo As Boolean
Private bPuedeCombateDistancia As Boolean

Private vsHelp(1 To NUMSKILLS) As String

Private Sub Form_Load()
    
    MirandoAsignarSkills = True
    
    ' Handles Form movement (drag and drop).
    Set clsFormulario = New clsFormMovementManager
    clsFormulario.Initialize Me
    
    'Flags para saber que skills se modificaron
    ReDim flags(1 To NUMSKILLS)
    
    Call ValidarSkills
    
    Me.Picture = LoadPicture(DirGraficos & "VentanaSkills.jpg")
    Call LoadButtons
    
    Call LoadHelp
End Sub

Private Sub LoadButtons()
    Dim GrhPath As String
    Dim i As Long
    
    GrhPath = DirGraficos


    For i = 1 To NUMSKILLS
        Set cBotonMas(i) = New clsGraphicalButton
        Set cBotonMenos(i) = New clsGraphicalButton
        Set cSkillNames(i) = New clsGraphicalButton
    Next i
    
    Set cBtonAceptar = New clsGraphicalButton
    Set cBotonCancelar = New clsGraphicalButton
    
    Set LastPressed = New clsGraphicalButton
    
    Call cBtonAceptar.Initialize(imgAceptar, GrhPath & "BotonAceptarSkills.jpg", _
                                    GrhPath & "BotonAceptarRolloverSkills.jpg", _
                                    GrhPath & "BotonAceptarClickSkills.jpg", Me)

    Call cBotonCancelar.Initialize(imgCancelar, GrhPath & "BotonCacelarSkills.jpg", _
                                    GrhPath & "BotonCacelarRolloverSkills.jpg", _
                                    GrhPath & "BotonCacelarClickSkills.jpg", Me)

    Call cBotonMas(1).Initialize(imgMas1, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me, _
                                    GrhPath & "BotonMasSkills.jpg", Not bPuedeMagia)

    Call cBotonMas(2).Initialize(imgMas2, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(3).Initialize(imgMas3, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(4).Initialize(imgMas4, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)
    
    Call cBotonMas(5).Initialize(imgMas5, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me, _
                                    GrhPath & "BotonMasSkills.jpg", Not bPuedeMeditar)

    Call cBotonMas(6).Initialize(imgMas6, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(7).Initialize(imgMas7, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(8).Initialize(imgMas8, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)
    
    Call cBotonMas(9).Initialize(imgMas9, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(10).Initialize(imgMas10, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(11).Initialize(imgMas11, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me, _
                                    GrhPath & "BotonMasSkills.jpg", Not bPuedeEscudo)

    Call cBotonMas(12).Initialize(imgMas12, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)
    
    Call cBotonMas(13).Initialize(imgMas13, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(14).Initialize(imgMas14, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(15).Initialize(imgMas15, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(16).Initialize(imgMas16, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)
    
    Call cBotonMas(17).Initialize(imgMas17, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(18).Initialize(imgMas18, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me, _
                                    GrhPath & "BotonMasSkills.jpg", Not bPuedeCombateDistancia)

    Call cBotonMas(19).Initialize(imgMas19, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)

    Call cBotonMas(20).Initialize(imgMas20, GrhPath & "BotonMasSkills.jpg", _
                                    GrhPath & "BotonMasRolloverSkills.jpg", _
                                    GrhPath & "BotonMasClickSkills.jpg", Me)
    
    
    Call cBotonMenos(1).Initialize(imgMenos1, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me, _
                                    GrhPath & "BotonMenosSkills.jpg", Not bPuedeMagia)

    Call cBotonMenos(2).Initialize(imgMenos2, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(3).Initialize(imgMenos3, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(4).Initialize(imgMenos4, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)
    
    Call cBotonMenos(5).Initialize(imgMenos5, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me, _
                                    GrhPath & "BotonMenosSkills.jpg", Not bPuedeMeditar)

    Call cBotonMenos(6).Initialize(imgMenos6, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(7).Initialize(imgMenos7, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(8).Initialize(imgMenos8, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)
    
    Call cBotonMenos(9).Initialize(imgMenos9, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(10).Initialize(imgMenos10, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(11).Initialize(imgMenos11, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me, _
                                    GrhPath & "BotonMenosSkills.jpg", Not bPuedeEscudo)

    Call cBotonMenos(12).Initialize(imgMenos12, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)
    
    Call cBotonMenos(13).Initialize(imgMenos13, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(14).Initialize(imgMenos14, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(15).Initialize(imgMenos15, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(16).Initialize(imgMenos16, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)
    
    Call cBotonMenos(17).Initialize(imgMenos17, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(18).Initialize(imgMenos18, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me, _
                                    GrhPath & "BotonMenosSkills.jpg", Not bPuedeCombateDistancia)

    Call cBotonMenos(19).Initialize(imgMenos19, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cBotonMenos(20).Initialize(imgMenos20, GrhPath & "BotonMenosSkills.jpg", _
                                    GrhPath & "BotonMenosRolloverSkills.jpg", _
                                    GrhPath & "BotonMenosClickSkills.jpg", Me)

    Call cSkillNames(1).Initialize(imgMagia, "", _
                                    GrhPath & "MagiaRollover.jpg", _
                                    GrhPath & "MagiaRollover.jpg", Me, _
                                    GrhPath & "MagiaBloqueado.jpg", Not bPuedeMagia, False, False)

    Call cSkillNames(2).Initialize(imgRobar, "", _
                                    GrhPath & "RobarRollover.jpg", _
                                    GrhPath & "RobarRollover.jpg", Me, , , False, False)

    Call cSkillNames(3).Initialize(imgEvasion, "", _
                                    GrhPath & "EvasionRollover.jpg", _
                                    GrhPath & "EvasionRollover.jpg", Me, , , False, False)
                                    
    Call cSkillNames(4).Initialize(imgCombateArmas, "", _
                                    GrhPath & "CombateConArmasRollover.jpg", _
                                    GrhPath & "CombateConArmasRollover.jpg", Me, , , False, False)
    
    Call cSkillNames(5).Initialize(imgMeditar, "", _
                                    GrhPath & "MeditarRollover.jpg", _
                                    GrhPath & "MeditarRollover.jpg", Me, _
                                    GrhPath & "MeditarBloqueado.jpg", Not bPuedeMeditar, False, False)

    Call cSkillNames(6).Initialize(imgApunialar, "", _
                                    GrhPath & "ApuñalarRollover.jpg", _
                                    GrhPath & "ApuñalarRollover.jpg", Me, , , False, False)

    Call cSkillNames(7).Initialize(imgOcultarse, "", _
                                    GrhPath & "OcultarseRollover.jpg", _
                                    GrhPath & "OcultarseRollover.jpg", Me, , , False, False)

    Call cSkillNames(8).Initialize(imgSupervivencia, "", _
                                    GrhPath & "SupervivenciaRollover.jpg", _
                                    GrhPath & "SupervivenciaRollover.jpg", Me, , , False, False)
    
    Call cSkillNames(9).Initialize(imgTalar, "", _
                                    GrhPath & "TalarRollover.jpg", _
                                    GrhPath & "TalarRollover.jpg", Me, , , False, False)

    Call cSkillNames(10).Initialize(imgComercio, "", _
                                    GrhPath & "ComercioRollover.jpg", _
                                    GrhPath & "ComercioRollover.jpg", Me, , , False, False)

    Call cSkillNames(11).Initialize(imgEscudos, "", _
                                    GrhPath & "DefensaConEscudosRollover.jpg", _
                                    GrhPath & "DefensaConEscudosRollover.jpg", Me, _
                                    GrhPath & "DefensaEscudosBloqueado.jpg", Not bPuedeEscudo, False, False)

    Call cSkillNames(12).Initialize(imgPesca, "", _
                                    GrhPath & "PescaRollover.jpg", _
                                    GrhPath & "PescaRollover.jpg", Me, , , False, False)

    Call cSkillNames(13).Initialize(imgMineria, "", _
                                    GrhPath & "MineriaRollover.jpg", _
                                    GrhPath & "MineriaRollover.jpg", Me, , , False, False)

    Call cSkillNames(14).Initialize(imgCarpinteria, "", _
                                    GrhPath & "CarpinteriaRollover.jpg", _
                                    GrhPath & "CarpinteriaRollover.jpg", Me, , , False, False)

    Call cSkillNames(15).Initialize(imgHerreria, "", _
                                    GrhPath & "HerreriaRollover.jpg", _
                                    GrhPath & "HerreriaRollover.jpg", Me, , , False, False)

    Call cSkillNames(16).Initialize(imgLiderazgo, "", _
                                    GrhPath & "LiderazgoRollover.jpg", _
                                    GrhPath & "LiderazgoRollover.jpg", Me, , , False, False)

    Call cSkillNames(17).Initialize(imgDomar, "", _
                                    GrhPath & "DomarAnimalesRollover.jpg", _
                                    GrhPath & "DomarAnimalesRollover.jpg", Me, , , False, False)

    Call cSkillNames(18).Initialize(imgCombateDistancia, "", _
                                    GrhPath & "CombateADistanciaRollover.jpg", _
                                    GrhPath & "CombateADistanciaRollover.jpg", Me, _
                                    GrhPath & "CombateADistanciaBloqueado.jpg", Not bPuedeCombateDistancia, False, False)

    Call cSkillNames(19).Initialize(imgCombateSinArmas, "", _
                                    GrhPath & "CombateSinArmasRollover.jpg", _
                                    GrhPath & "CombateSinArmasRollover.jpg", Me, , , False, False)

    Call cSkillNames(20).Initialize(imgNavegacion, "", _
                                    GrhPath & "NavegacionRollover.jpg", _
                                    GrhPath & "NavegacionRollover.jpg", Me, , , False, False)


End Sub

Private Sub SumarSkillPoint(ByVal SkillIndex As Integer)
    If Alocados > 0 Then

        If Val(text1(SkillIndex).Caption) < MAXSKILLPOINTS Then
            text1(SkillIndex).Caption = Val(text1(SkillIndex).Caption) + 1
            flags(SkillIndex) = flags(SkillIndex) + 1
            Alocados = Alocados - 1
        End If
            
    End If
    
    puntos.Caption = Alocados
End Sub

Private Sub RestarSkillPoint(ByVal SkillIndex As Integer)
    If Alocados < SkillPoints Then
        
        If Val(text1(SkillIndex).Caption) > 0 And flags(SkillIndex) > 0 Then
            text1(SkillIndex).Caption = Val(text1(SkillIndex).Caption) - 1
            flags(SkillIndex) = flags(SkillIndex) - 1
            Alocados = Alocados + 1
        End If
    End If
    
    puntos.Caption = Alocados
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    LastPressed.ToggleToNormal
    lblHelp.Caption = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
    MirandoAsignarSkills = False
End Sub

Private Sub imgAceptar_Click()
    Dim skillChanges(NUMSKILLS) As Byte
    Dim i As Long

    For i = 1 To NUMSKILLS
        skillChanges(i) = CByte(text1(i).Caption) - UserSkills(i)
        'Actualizamos nuestros datos locales
        UserSkills(i) = Val(text1(i).Caption)
    Next i
    
    If Alocados = 0 Then Call frmMain.LightSkillStar(False)
    
    SkillPoints = Alocados
    
    Unload Me
End Sub

Private Sub imgApunialar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Apuñalar)
End Sub

Private Sub imgCancelar_Click()
    Unload Me
End Sub

Private Sub imgCarpinteria_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Carpinteria)
End Sub

Private Sub imgCombateArmas_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Armas)
End Sub

Private Sub imgCombateDistancia_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Proyectiles)
End Sub

Private Sub imgCombateSinArmas_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Wrestling)
End Sub

Private Sub imgComercio_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Comerciar)
End Sub

Private Sub imgDomar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Domar)
End Sub

Private Sub imgEscudos_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Defensa)
End Sub

Private Sub imgEvasion_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Tacticas)
End Sub

Private Sub imgHerreria_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Herreria)
End Sub

Private Sub imgLiderazgo_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Liderazgo)
End Sub

Private Sub imgMagia_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Magia)
End Sub

Private Sub imgMas1_Click()
    Call SumarSkillPoint(1)
End Sub

Private Sub imgMas10_Click()
    Call SumarSkillPoint(10)
End Sub

Private Sub imgMas11_Click()
    Call SumarSkillPoint(11)
End Sub

Private Sub imgMas12_Click()
    Call SumarSkillPoint(12)
End Sub

Private Sub imgMas13_Click()
    Call SumarSkillPoint(13)
End Sub

Private Sub imgMas14_Click()
    Call SumarSkillPoint(14)
End Sub

Private Sub imgMas15_Click()
    Call SumarSkillPoint(15)
End Sub

Private Sub imgMas16_Click()
    Call SumarSkillPoint(16)
End Sub

Private Sub imgMas17_Click()
    Call SumarSkillPoint(17)
End Sub

Private Sub imgMas18_Click()
    Call SumarSkillPoint(18)
End Sub

Private Sub imgMas19_Click()
    Call SumarSkillPoint(19)
End Sub

Private Sub imgMas2_Click()
    Call SumarSkillPoint(2)
End Sub

Private Sub imgMas20_Click()
    Call SumarSkillPoint(20)
End Sub

Private Sub imgMas3_Click()
    Call SumarSkillPoint(3)
End Sub

Private Sub imgMas4_Click()
    Call SumarSkillPoint(4)
End Sub

Private Sub imgMas5_Click()
    Call SumarSkillPoint(5)
End Sub

Private Sub imgMas6_Click()
    Call SumarSkillPoint(6)
End Sub

Private Sub imgMas7_Click()
    Call SumarSkillPoint(7)
End Sub

Private Sub imgMas8_Click()
    Call SumarSkillPoint(8)
End Sub

Private Sub imgMas9_Click()
    Call SumarSkillPoint(9)
End Sub

Private Sub imgMeditar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Meditar)
End Sub

Private Sub imgMenos1_Click()
    Call RestarSkillPoint(1)
End Sub

Private Sub imgMenos10_Click()
    Call RestarSkillPoint(10)
End Sub

Private Sub imgMenos11_Click()
    Call RestarSkillPoint(11)
End Sub

Private Sub imgMenos12_Click()
    Call RestarSkillPoint(12)
End Sub

Private Sub imgMenos13_Click()
    Call RestarSkillPoint(13)
End Sub

Private Sub imgMenos14_Click()
    Call RestarSkillPoint(14)
End Sub

Private Sub imgMenos15_Click()
    Call RestarSkillPoint(15)
End Sub

Private Sub imgMenos16_Click()
    Call RestarSkillPoint(16)
End Sub

Private Sub imgMenos17_Click()
    Call RestarSkillPoint(17)
End Sub

Private Sub imgMenos18_Click()
    Call RestarSkillPoint(18)
End Sub

Private Sub imgMenos19_Click()
    Call RestarSkillPoint(19)
End Sub

Private Sub imgMenos2_Click()
    Call RestarSkillPoint(2)
End Sub

Private Sub imgMenos20_Click()
    Call RestarSkillPoint(20)
End Sub

Private Sub imgMenos3_Click()
    Call RestarSkillPoint(3)
End Sub

Private Sub imgMenos4_Click()
    Call RestarSkillPoint(4)
End Sub

Private Sub imgMenos5_Click()
    Call RestarSkillPoint(5)
End Sub

Private Sub imgMenos6_Click()
    Call RestarSkillPoint(6)
End Sub

Private Sub imgMenos7_Click()
    Call RestarSkillPoint(7)
End Sub

Private Sub imgMenos8_Click()
    Call RestarSkillPoint(8)
End Sub

Private Sub imgMenos9_Click()
    Call RestarSkillPoint(9)
End Sub

Private Sub LoadHelp()
    
    vsHelp(eSkill.Magia) = "Magia:" & vbCrLf & _
                            "- Representa la habilidad de un personaje de las áreas mágica." & vbCrLf & _
                            "- Indica la variedad de hechizos que es capaz de dominar el personaje."
    If Not bPuedeMagia Then
        vsHelp(eSkill.Magia) = vsHelp(eSkill.Magia) & vbCrLf & _
                                "* Habilidad inhabilitada para tu clase."
    End If
    
    vsHelp(eSkill.Robar) = "Robar:" & vbCrLf & _
                            "- Habilidades de hurto. Nunca por medio de la violencia." & vbCrLf & _
                            "- Indica la probabilidad de éxito del personaje al intentar apoderarse de oro de otro, en caso de ser Ladrón, tambien podrá apoderarse de items."
    
    vsHelp(eSkill.Tacticas) = "Evasión en Combate:" & vbCrLf & _
                                "- Representa la habilidad general para moverse en combate entre golpes enemigos sin morir o tropezar en el intento." & vbCrLf & _
                                "- Indica la posibilidad de evadir un golpe físico del personaje."
    
    vsHelp(eSkill.Armas) = "Combate con Armas:" & vbCrLf & _
                            "- Representa la habilidad del personaje para manejar armas de combate cuerpo a cuerpo." & vbCrLf & _
                            "- Indica la probabilidad de impactar al oponente con armas cuerpo a cuerpo."
    
    vsHelp(eSkill.Meditar) = "Meditar:" & vbCrLf & _
                                "- Representa la capacidad del personaje de concentrarse para abstrarse dentro de su mente, y así revitalizar su fuerza espiritual." & vbCrLf & _
                                "- Indica la velocidad a la que el personaje recupera maná (Clases mágicas)."
    
    If Not bPuedeMeditar Then
        vsHelp(eSkill.Meditar) = vsHelp(eSkill.Meditar) & vbCrLf & _
                                "* Habilidad inhabilitada para tu clase."
    End If

    vsHelp(eSkill.Apuñalar) = "Apuñalar:" & vbCrLf & _
                                "- Representa la destreza para inflingir daño grave con armas cortas." & vbCrLf & _
                                "- Indica la posibilidad de apuñalar al enemigo en un ataque. El Asesino es la única clase que no necesitará 10 skills para comenzar a entrenar esta habilidad."

    vsHelp(eSkill.Ocultarse) = "Ocultarse:" & vbCrLf & _
                                "- La habilidad propia de un personaje para mimetizarse con el medio y evitar se perciba su presencia." & vbCrLf & _
                                "- Indica la facilidad con la que uno puede desaparecer de la vista de los demás y por cuanto tiempo."
    
    vsHelp(eSkill.Supervivencia) = "Superivencia:" & vbCrLf & _
                                    "- Es el conjunto de habilidades necesarias para sobrevivir fuera de una ciudad en base a lo que la naturaleza ofrece." & vbCrLf & _
                                    "- Permite conocer la salud de las criaturas guiándose exclusivamente por su aspecto, así como encender fogatas junto a las que descansar."
    
    vsHelp(eSkill.Talar) = "Talar:" & vbCrLf & _
                            "- Es la habilidad en el uso del hacha para evitar desperdiciar leña y maximizar la efectividad de cada golpe dado." & vbCrLf & _
                            "- Indica la probabilidad de obtener leña por golpe."
    
    vsHelp(eSkill.Comerciar) = "Comercio:" & vbCrLf & _
                                "- Es la habilidad para regatear los precios exigidos en la compra y evitar ser regateado al vender." & vbCrLf & _
                                "- Indica que tan caro se compra en el comercio con NPCs."
    
    vsHelp(eSkill.Defensa) = "Defensa con Escudos:" & vbCrLf & _
                                "- Es la habilidad de interponer correctamente el escudo ante cada embate enemigo para evitar ser impactado sin perder el equilibrio y poder responder rápidamente con la otra mano." & vbCrLf & _
                                "- Indica las probabilidades de bloquear un impacto con el escudo."
    
    If Not bPuedeEscudo Then
        vsHelp(eSkill.Defensa) = vsHelp(eSkill.Defensa) & vbCrLf & _
                                "* Habilidad inhabilitada para tu clase."
    End If


    vsHelp(eSkill.Pesca) = "Pesca:" & vbCrLf & _
                            "- Es el conjunto de conocimientos básicos para poder armar un señuelo, poner la carnada en el anzuelo y saber dónde buscar peces." & vbCrLf & _
                            "- Indica la probabilidad de tener éxito en cada intento de pescar."
    
    vsHelp(eSkill.Mineria) = "Minería:" & vbCrLf & _
                                "- Es el conjunto de conocimientos sobre los distintos minerales, el dónde se obtienen, cómo deben ser extraídos y trabajados." & vbCrLf & _
                                "- Indica la probabilidad de tener éxito en cada intento de minar y la capacidad, o no de convertir estos minerales en lingotes."
    
    vsHelp(eSkill.Carpinteria) = "Carpintería:" & vbCrLf & _
                                    "- Es el conjunto de conocimientos para saber serruchar, lijar, encolar y clavar madera con un buen nivel de terminación." & vbCrLf & _
                                    "- Indica la habilidad en el manejo de estas herramientas, el que tan bueno se es en el oficio de carpintero."
    
    vsHelp(eSkill.Herreria) = "Herrería:" & vbCrLf & _
                                "- Es el conjunto de conocimientos para saber procesar cada tipo de mineral para fundirlo, forjarlo y crear aleaciones." & vbCrLf & _
                                "- Indica la habilidad en el manejo de estas técnicas, el que tan bueno se es en el oficio de herrero."
    
    vsHelp(eSkill.Liderazgo) = "Liderazgo:" & vbCrLf & _
                                "- Es la habilidad propia del personaje para convencer a otros a seguirlo en batalla." & vbCrLf & _
                                "- Permite crear clanes y partys"
    
    vsHelp(eSkill.Domar) = "Domar Animales:" & vbCrLf & _
                                "- Es la habilidad en el trato con animales para que estos te sigan y ayuden en combate." & vbCrLf & _
                                "- Indica la posibilidad de lograr domar a una criatura y qué clases de criaturas se puede domar."
    
    vsHelp(eSkill.Proyectiles) = "Combate a distancia:" & vbCrLf & _
                                "- Es el manejo de las armas de largo alcance." & vbCrLf & _
                                "- Indica la probabilidad de éxito para impactar a un enemigo con este tipo de armas."
    
    If Not bPuedeCombateDistancia Then
        vsHelp(eSkill.Proyectiles) = vsHelp(eSkill.Proyectiles) & vbCrLf & _
                                "* Habilidad inhabilitada para tu clase."
    End If

    vsHelp(eSkill.Wrestling) = "Combate sin armas:" & vbCrLf & _
                                "- Es la habilidad del personaje para entrar en combate sin arma alguna salvo sus propios brazos." & vbCrLf & _
                                "- Indica la probabilidad de éxito para impactar a un enemigo estando desarmado. El Bandido y Ladrón tienen habilidades extras asociadas a esta habilidad."
    
    vsHelp(eSkill.Navegacion) = "Navegación:" & vbCrLf & _
                                "- Es la habilidad para controlar barcos en el mar sin naufragar." & vbCrLf & _
                                "- Indica que clase de barcos se pueden utilizar."
    
End Sub

Private Sub imgMineria_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Mineria)
End Sub

Private Sub imgNavegacion_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Navegacion)
End Sub

Private Sub imgOcultarse_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Ocultarse)
End Sub

Private Sub imgPesca_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Pesca)
End Sub

Private Sub imgRobar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Robar)
End Sub

Private Sub imgSupervivencia_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Supervivencia)
End Sub

Private Sub imgTalar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ShowHelp(eSkill.Talar)
End Sub

Private Sub lblHelp_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    LastPressed.ToggleToNormal
End Sub

Private Sub ShowHelp(ByVal eeSkill As eSkill)
    lblHelp.Caption = vsHelp(eeSkill)
End Sub

Private Sub ValidarSkills()

    bPuedeMagia = True
    bPuedeMeditar = True
    bPuedeEscudo = True
    bPuedeCombateDistancia = True

    Select Case UserClase
        Case eClass.Warrior, eClass.Hunter, eClass.Worker, eClass.Thief
            bPuedeMagia = False
            bPuedeMeditar = False
        
        Case eClass.Pirat
            bPuedeMagia = False
            bPuedeMeditar = False
            bPuedeEscudo = False
        
        Case eClass.Mage, eClass.Druid
            bPuedeEscudo = False
            bPuedeCombateDistancia = False
            
    End Select
    
    ' Magia
    imgMas1.Enabled = bPuedeMagia
    imgMenos1.Enabled = bPuedeMagia

    ' Meditar
    imgMas5.Enabled = bPuedeMeditar
    imgMenos5.Enabled = bPuedeMeditar

    ' Escudos
    imgMas11.Enabled = bPuedeEscudo
    imgMenos11.Enabled = bPuedeEscudo

    ' Proyectiles
    imgMas18.Enabled = bPuedeCombateDistancia
    imgMenos18.Enabled = bPuedeCombateDistancia
End Sub
Reemplazan todo el Select Case Using por este (aparece 2 veces):
Código:

            Select Case Using
                Case 1
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_MAGIA, 100, 100, 120, 0, 0)
                
                Case 12
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_PESCA, 100, 100, 120, 0, 0)
                
                Case 2
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_ROBAR, 100, 100, 120, 0, 0)
                
                Case 9
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_TALAR, 100, 100, 120, 0, 0)
                
                Case 13
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_MINERIA, 100, 100, 120, 0, 0)
                
                Case FundirMetal
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_FUNDIRMETAL, 100, 100, 120, 0, 0)
                
                Case 18
                    Call AddtoRichTextBox(frmMain.RecTxt, MENSAJE_TRABAJO_PROYECTILES, 100, 100, 120, 0, 0)
            End Select


Buscan:
Código:

If Using = Proyectiles Then

Lo reemplazan por:
Código:

If Using = 18 Then

Buscan:
Código:

If Using = Magia Then

Lo reemplazan por:
Código:

If Using = 1 Then


Buscan:
Código:


                    If (Using = Pesca Or Using = Robar Or Using = Talar Or Using = Mineria Or Using = FundirMetal) Then

Lo reemplazan por:
Código:

 If (Using = 12 Or Using = 2 Or Using = 9 Or Using = 13 Or Using = FundirMetal) Then

Borran todo los Labels de estadÍsticas (Relacionados a los Skills) y el formulario de Skills.

Listo!

Dejá tu comentario ^^

Razón por la cuál se hicieron múltiples posts:

Lo mensajes eran demasiado largos.
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5046
Edad : 17
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Re: Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Axters el 16/2/2017, 2:44 am

Mejor es preferible ponerle los skils a todos en 100 para evitarte horas sacando el sistema, que no sabes si algun dia lo vas a usar jaaj

Axters
Nivel 10
Nivel 10

¿BANEADO? : No.
Premios : Ninguno.
Cantidad de envíos : 1102
Edad : 18
Localización : Adrogue
Fecha de inscripción : 19/05/2012

Ver perfil de usuario

Volver arriba Ir abajo

Re: Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Toyz el 16/2/2017, 3:36 am

Máximo te lleva 15 minutos eh, a mí me llevó 30 minutos sacarlo, pero de esta forma que está explicado paso por paso (cosa que odio, por suerte cambié) lo hacés bastante rápido.

No es preferible eso, tenés arrays "grandes" (para lo que es el AO) sobre este sistema y ni hablar de las cantidad de condicionales que tiene el servidor respecto a este sistema. Lo mejor, si no lo vas a usar, sacalo. Más si sos partidario de hacer las cosas lo más óptimo posible Razz


_______________

Como saben yo aporto bastante en Servers-Argentum y les quiero decir que todos tienen derecho de usar y de aportar en otra comunidad mis aportes pero sólo con un requisito y es tan simple que dejar los créditos. Gracias.
Si conocen otra comunidad y en esa misma mis aportes no están aportados, si tenés tiempo y ganas, aportalo! A mucha gente le puede servir. No te olvides del requisito Razz

MIS MEJORES APORTES:

Compra/venta de personajes:
https://goo.gl/A44Av0

Juegos del Hambre:
https://goo.gl/u6aNUG

Deathmatch automático:
https://goo.gl/GQF4fK

Sistema de retos vía MMR con búsqueda, emparejamiento, etc:
https://goo.gl/40uP0f

Sistemas de eventos automáticos de 1vs1 hasta 10vs10:
https://goo.gl/XYKygc

1VS1 - AIM - MELEE - Gana Sigue (Se liberan cupos)
https://goo.gl/qq83wx

Retos 3vs3 - [Items, 2 rounds, múltiples arenas, oro]
https://goo.gl/x8SMnV

Eliminar sistema de Skill (COMPLETO)
https://goo.gl/mKxHzC
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5046
Edad : 17
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Re: Eliminar sistema de Skill (COMPLETO) 13.0

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.