[Problema] Label defensa magica

ElAguSS

Destructor Lvl 1
#1
Buenas gente, implemente el label de defensa magica en mi servidor y tengo el problema de que si me pongo la armadura y tiene 10/20 de defensa magica y despues me equipo un casco que tiene defensa magica 5/10 no me suma todo en el label y me pone solamente una. Me tendria que quedar en el label 15/30 y solamente se me pone alguna de las 2 opciones.

En el Private Sub HandleChangeInventorySlot

Código:
Dim MaxdefM As Integer 'defm en label
    Dim MindefM As Integer 'defm en label


MaxdefM = Buffer.ReadInteger() 'defm en label
    MindefM = Buffer.ReadInteger() 'defm en label
Ya declare todo.

Código:
If Equipped Then
        Select Case OBJType
            Case eObjType.otWeapon
                frmMain.lblWeapon = MinHit & "/" & MaxHit
                UserWeaponEqpSlot = slot
            Case eObjType.otArmadura
                frmMain.lblArmor = MinDef & "/" & MaxDef
                frmMain.lbldefmag = MindefM & "/" & MaxdefM 'defm en label
                UserArmourEqpSlot = slot
            Case eObjType.otescudo
                frmMain.lblShielder = MinDef & "/" & MaxDef
                UserShieldEqpSlot = slot
            Case eObjType.otcasco
                frmMain.lblHelm = MinDef & "/" & MaxDef
                frmMain.lbldefmag = MindefM & "/" & MaxdefM 'defm en label
                UserHelmEqpSlot = slot
        End Select
    Else
        Select Case slot
            Case UserWeaponEqpSlot
                frmMain.lblWeapon = "0/0"
                UserWeaponEqpSlot = 0
            Case UserArmourEqpSlot
                frmMain.lblArmor = "0/0"
                frmMain.lbldefmag = "0/0" 'defm en label
                UserArmourEqpSlot = 0
            Case UserHelmEqpSlot
                frmMain.lblHelm = "0/0"
                frmMain.lbldefmag = "0/0" 'defm en label
                UserHelmEqpSlot = 0
            Case UserShieldEqpSlot
                frmMain.lblShielder = "0/0"
                UserShieldEqpSlot = 0
        End Select
    End If
Ahora en el server:
en el Public Sub SendUserStatsTxt

Código:
If .Invent.ArmourEqpObjIndex > 0 Then
            If .Invent.EscudoEqpObjIndex > 0 Then
                Call WriteConsoleMsg(sendIndex, "(CUERPO) Mín Def/Máx Def: " & ObjData(.Invent.ArmourEqpObjIndex).MinDef + ObjData(.Invent.EscudoEqpObjIndex).MinDef & "/" & ObjData(.Invent.ArmourEqpObjIndex).MaxDef + ObjData(.Invent.EscudoEqpObjIndex).MaxDef, FontTypeNames.FONTTYPE_INFO)
            Else
                Call WriteConsoleMsg(sendIndex, "(CUERPO) Mín Def/Máx Def: " & ObjData(.Invent.ArmourEqpObjIndex).MinDef & "/" & ObjData(.Invent.ArmourEqpObjIndex).MaxDef, FontTypeNames.FONTTYPE_INFO)
          Else
          Call WriteConsoleMsg(sendIndex, "(CUERPO) Mín Def/Máx Def: " & ObjData(.Invent.ArmourEqpObjIndex).DefensaMagicaMin & "/" & ObjData(.Invent.ArmourEqpObjIndex).DefensaMagicaMax, FontTypeNames.FONTTYPE_INFO) 'defm en label
            End If
        Else
            Call WriteConsoleMsg(sendIndex, "(CUERPO) Mín Def/Máx Def: 0", FontTypeNames.FONTTYPE_INFO)
        End If
       
        If .Invent.CascoEqpObjIndex > 0 Then
            Call WriteConsoleMsg(sendIndex, "(CABEZA) Mín Def/Máx Def: " & ObjData(.Invent.CascoEqpObjIndex).MinDef & "/" & ObjData(.Invent.CascoEqpObjIndex).MaxDef, FontTypeNames.FONTTYPE_INFO)
        Else
            Call WriteConsoleMsg(sendIndex, "(CABEZA) Mín Def/Máx Def: " & ObjData(.Invent.CascoEqpObjIndex).DefensaMagicaMin & "/" & ObjData(.Invent.CascoEqpObjIndex).DefensaMagicaMax, FontTypeNames.FONTTYPE_INFO) 'defm en label
         Else
            Call WriteConsoleMsg(sendIndex, "(CABEZA) Mín Def/Máx Def: 0", FontTypeNames.FONTTYPE_INFO)
        End If
En el Public Sub WriteChangeInventorySlot(B
Código:
Call .WriteInteger(ObjIndex)
        Call .WriteASCIIString(obData.Name)
        Call .WriteInteger(UserList(UserIndex).Invent.Object(Slot).Amount)
        Call .WriteBoolean(UserList(UserIndex).Invent.Object(Slot).Equipped)
        Call .WriteInteger(obData.GrhIndex)
        Call .WriteByte(obData.OBJType)
        Call .WriteInteger(obData.MaxHIT)
        Call .WriteInteger(obData.MinHIT)
        Call .WriteInteger(obData.MaxDef)
        Call .WriteInteger(obData.MinDef)
        Call .WriteInteger(obData.DefensaMagicaMax) 'defm en label
        Call .WriteInteger(obData.DefensaMagicaMin) 'defm en label
        Call .WriteSingle(SalePrice(ObjIndex)
 

MAB

Symphony of Enchanted Lands
#2
Ahí únicamente estas asignando defensa mágica mínima y máxima a un label, obviamente que si equipas 600 items con defensa mágica sólo te va a mostrar 1 porque todos los objetos equipados que tengan defensa mágica muestran su valor específico en el mismo lugar (frmMain.lbldefmag).

Lo que tenes que hacer es justamente lo que sabes, sumar el valor mínimo de todos los items equipados que tengan defensa mágica y también el valor máximo. Luego mostrar ambos resultados en el label.
 

ElAguSS

Destructor Lvl 1
#3
Si te entiendo, pero no me sale como hacerlo, hace poco me metí con la 13.0 y quería ver si me pueden dar un mano como hacerlo.

Saludos
 

MAB

Symphony of Enchanted Lands
#4
Cliente: Módulo "Declaraciones"

Código:
Public tempDMMin As Byte
Public tempDMMax As Byte
Cliente: Private Sub HandleChangeInventorySlot()

Cuando equipa:

Código:
            Case eObjType.otArmadura
                frmMain.lblArmor = MinDef & "/" & MaxDef
               
                tempDMMin = tempDMMin + MindefM 'Sumo la defensa mágica mínima en esta variable global
                tempDMMax = tempDMMax + MaxdefM 'Sumo la defensa mágica máxima en esta variable global
               
                If tempDMMin > 255 Then 'Declaramos Byte, por si se van a la mierda con lo que datean el máximo es 255
                    tempDMMin = 255
                End If
               
                If tempDMMax > 255 Then 'Declaramos Byte, por si se van a la mierda con lo que datean el máximo es 255
                    tempDMMax = 255
                End If
               
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax 'Seteas tu label con las variables globales
               
                UserArmourEqpSlot = slot
Código:
            Case eObjType.otcasco
                frmMain.lblHelm = MinDef & "/" & MaxDef
               
                tempDMMin = tempDMMin + MindefM
                tempDMMax = tempDMMax + MaxdefM
               
                If tempDMMin > 255 Then
                    tempDMMin = 255
                End If
               
                If tempDMMax > 255 Then
                    tempDMMax = 255
                End If
               
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax
               
                UserShieldEqpSlot = slot
Cuando desequipa:

Código:
            Case UserArmourEqpSlot
                frmMain.lblArmor = "0/0"
               
                tempDMMin = tempDMMin - MindefM 'Resto la defensa mágica mínima en esta variable global
                tempDMMax = tempDMMax - MaxdefM 'Resto la defensa mágica máxima en esta variable global
               
                If tempDMMin < 0 Then 'Declaramos Byte, por si las dudas el mínimo es 0
                    tempDMMin = 0
                End If
               
                If tempDMMax < 0 Then 'Declaramos Byte, por si las dudas el mínimo es 0
                    tempDMMax = 0
                End If
               
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax 'Seteas tu label con las variables globales
               
                UserArmourEqpSlot = 0
Código:
            Case UserHelmEqpSlot
                tempDMMin = tempDMMin - MindefM
                tempDMMax = tempDMMax - MaxdefM
               
                If tempDMMin < 0 Then
                    tempDMMin = 0
                End If
               
                If tempDMMax < 0 Then
                    tempDMMax = 0
                End If
               
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax
           
                frmMain.lblShielder = "0/0"
                UserHelmEqpSlot = 0
Seguramente existan formas mejores y óptimas, esto es lo que te puedo ofrecer un martes 23:51hs con los dedos helados xD.
 

miqueas150

The Prophet
Ex-Staff
#5
Cliente: Módulo "Declaraciones"

Código:
Public tempDMMin As Byte
Public tempDMMax As Byte
Cliente: Private Sub HandleChangeInventorySlot()

Cuando equipa:

Código:
            Case eObjType.otArmadura
                frmMain.lblArmor = MinDef & "/" & MaxDef
              
                tempDMMin = tempDMMin + MindefM 'Sumo la defensa mágica mínima en esta variable global
                tempDMMax = tempDMMax + MaxdefM 'Sumo la defensa mágica máxima en esta variable global
              
                If tempDMMin > 255 Then 'Declaramos Byte, por si se van a la mierda con lo que datean el máximo es 255
                    tempDMMin = 255
                End If
              
                If tempDMMax > 255 Then 'Declaramos Byte, por si se van a la mierda con lo que datean el máximo es 255
                    tempDMMax = 255
                End If
              
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax 'Seteas tu label con las variables globales
              
                UserArmourEqpSlot = slot
Código:
            Case eObjType.otcasco
                frmMain.lblHelm = MinDef & "/" & MaxDef
              
                tempDMMin = tempDMMin + MindefM
                tempDMMax = tempDMMax + MaxdefM
              
                If tempDMMin > 255 Then
                    tempDMMin = 255
                End If
              
                If tempDMMax > 255 Then
                    tempDMMax = 255
                End If
              
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax
              
                UserShieldEqpSlot = slot
Cuando desequipa:

Código:
            Case UserArmourEqpSlot
                frmMain.lblArmor = "0/0"
              
                tempDMMin = tempDMMin - MindefM 'Resto la defensa mágica mínima en esta variable global
                tempDMMax = tempDMMax - MaxdefM 'Resto la defensa mágica máxima en esta variable global
              
                If tempDMMin < 0 Then 'Declaramos Byte, por si las dudas el mínimo es 0
                    tempDMMin = 0
                End If
              
                If tempDMMax < 0 Then 'Declaramos Byte, por si las dudas el mínimo es 0
                    tempDMMax = 0
                End If
              
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax 'Seteas tu label con las variables globales
              
                UserArmourEqpSlot = 0
Código:
            Case UserHelmEqpSlot
                tempDMMin = tempDMMin - MindefM
                tempDMMax = tempDMMax - MaxdefM
              
                If tempDMMin < 0 Then
                    tempDMMin = 0
                End If
              
                If tempDMMax < 0 Then
                    tempDMMax = 0
                End If
              
                frmMain.lbldefmag = tempDMMin & "/" & tempDMMax
          
                frmMain.lblShielder = "0/0"
                UserHelmEqpSlot = 0
Seguramente existan formas mejores y óptimas, esto es lo que te puedo ofrecer un martes 23:51hs con los dedos helados xD.
y si quiero tener mas de 255 de rm solo tengo que modificar el servidor el paquete playwav no ?
 

MAB

Symphony of Enchanted Lands
#8
Yo lo implemente y anda bien, pero con el drag and drop, cuando moves el ítem sigue sumándose el valor.
Pero banca, yo no toque nada del sistema de alkon de equipar/desequipar, como es eso que haces drag&drop y sigue sumándose... esto funciona por defecto al equipar y desequipar items... =/
 

ElAguSS

Destructor Lvl 1
#9
Pero banca, yo no toque nada del sistema de alkon de equipar/desequipar, como es eso que haces drag&drop y sigue sumándose... esto funciona por defecto al equipar y desequipar items... =/
A mi me anduvo joya! Pero no tengo implementado el drag and drop. Es mas declare las varibale intenger por cuestion que las armaduras de gms defiendan mas de 1.000 y me tiraba desbordamiento!!

Saludos
 

MAB

Symphony of Enchanted Lands
#10
A mi me anduvo joya! Pero no tengo implementado el drag and drop. Es mas declare las varibale intenger por cuestion que las armaduras de gms defiendan mas de 1.000 y me tiraba desbordamiento!!

Saludos
No deberías tener items que defiendan 1000 para empezar, con que sea un byte (255) te sobra realmente. De hecho si queres defensa para los gms podes programar algo muy simple (e inclusive sin usar ningún objeto) para que les de 100% defensa mágica si es gm...
 

ElAguSS

Destructor Lvl 1
#12
Perdon por la revivida, pero le encontre un bug cuando me equipo la armadura con def magica y compro pociones se modifica los labeles de defensa magica va aumentando.
 
Arriba