VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "XpTrackerCls" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = True Option Explicit '##################################################################################### '# '# XP TRACKER '# '##################################################################################### Private Const MAXED_SKILL_XP = 4294967290# ' 4102129142# '4,102,129,142 Private Const TRAINED_SKILL_FREE_XP = 526 'FIXME: 658xp ? Private m_bXpChanged As Boolean Private m_iLevel As Integer 'Current Level (works post 126) Private m_nTotalXp As Double 'Total Xp Private m_nXpToNextLevel As Double 'Xp required to reach next level Private m_TotalPyreals As Double 'Total cash '##################################################################################### '# '# CONSTRUCTOR / DESTRUCTOR '# '##################################################################################### Private Sub Class_Initialize() Call Reset End Sub Public Sub Reset() Dim i As Integer m_bXpChanged = True m_nTotalXp = 0 End Sub '##################################################################################### '# '# PROPERTIES '# '##################################################################################### Public Property Get Level() As Integer Call CheckXpUpdate Level = m_iLevel End Property Public Property Get TotalXp() As Double Call CheckXpUpdate TotalXp = CDbl(m_nTotalXp) End Property Public Property Get XpToNextLevel() As Double Call CheckXpUpdate XpToNextLevel = CDbl(m_nXpToNextLevel) End Property Public Property Get TotalPyreals() As Double TotalPyreals = CDbl(m_TotalPyreals) End Property '##################################################################################### '# '# PUBLIC '# '##################################################################################### Public Function CalcLevel(ByVal nTotalXp As Double) As Integer CalcLevel = Int((9 * nTotalXp + 7776) ^ (0.2) - 5) End Function Public Function TotalXpToLevel(ByVal iLevel As Integer) As Double TotalXpToLevel = ((iLevel + 5) ^ 5 - 7776) / 9 End Function '##################################################################################### '# '# FRIEND '# '##################################################################################### Friend Sub UpdateXp(ByVal pMsg As DecalNet.IMessage2) On Error GoTo Error_Handler Dim i As Integer Dim SkillIndex As Integer Dim bChange As Boolean 'Default bChange = True Select Case pMsg.Type Case MSG_SET_CHAR_QWORD If (pMsg.Value("key") = &H1&) Then 'Total XP Dim bArray() As Byte bArray = pMsg.RawValue("value") m_nTotalXp = DblFromQw(bArray) 'myDebug "XpTrackerCls: totalXP: " & m_nTotalXp ElseIf (pMsg.Value("key") = &H2&) Then 'Unassigned XP End If Case MSG_SET_CHAR_DWORD If (pMsg.Value("key") = &H14&) Then 'Total Pyreal m_TotalPyreals = CDbl(pMsg.Value("value")) bChange = False End If Case Else bChange = False End Select If Not m_bXpChanged Then m_bXpChanged = bChange End If Fin: Exit Sub Error_Handler: myError "UpdateXp : Error #" & Err.Number & " (line: " & Erl & ") has been generated by " & Err.Source & " : " & Err.Description Resume Fin End Sub '##################################################################################### '# '# PRIVATE '# '##################################################################################### Private Sub CheckXpUpdate() On Error GoTo ErrorHandler If m_bXpChanged Then 'Compute level m_iLevel = CalcLevel(m_nTotalXp) 'Compute Xp to next level m_nXpToNextLevel = TotalXpToLevel(m_iLevel + 1) - m_nTotalXp 'We've updated the total xp, reset flag m_bXpChanged = False End If Fin: Exit Sub ErrorHandler: myError "XpTrackerCls.CheckXpUpdate - " & Err.Description Resume Fin End Sub