Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Feature] HP Bars for NPC
#1
[SERVERSIDE]
First we have to add a new packet
In mod Enumerations under
Code:
SCastSpell
put
Code:
SUpdateNpcHP

Now let us make the sub to send the packet

AT the bottom of modServerTcp put
Code:
Public Sub SendNpcHp(ByVal Map As Long, ByVal Index As Byte)
    'check if the npc is dead
    If MapNpc(Map, Index).Vital(Vitals.HP) = 0 Then
    Call SendDataToMap(Map, SUpdateNpcHP & SEP_CHAR & Index & SEP_CHAR & 0 & SEP_CHAR & 0 & END_CHAR)
    Else
    Call SendDataToMap(Map, SUpdateNpcHP & SEP_CHAR & Index & SEP_CHAR & MapNpc(Map, Index).Vital(Vitals.HP) & SEP_CHAR & Npc(MapNpc(Map, Index).Num).Stat(Stats.Strength) * Npc(MapNpc(Map, Index).Num).Stat(Stats.Defense) & END_CHAR)
    End If
End Sub


Now lets send the packet. In the attacknpc sub, under
Code:
' Reduce durability of weapon
    Call DamageEquipment(Attacker, Weapon)
put
Code:
'Lets update the hp of the npc incase it got hurt
    Call SendNpcHp(GetPlayerMap(Attacker), MapNpcNum)

[CLIENTSIDE]
We have to add the new packet to the client too.
In mod Enumerations under
Code:
SCastSpell
put
Code:
SUpdateNpcHP

We have to add a value to MapNpcRec called MaxHp
Find
Code:
Private Type MapNpcRec
under
Code:
AttackTimer As Long
put
Code:
MaxHp As Long

Now lets actually change the hp when we get the packet.
in modHandleData under
Code:
HandleSpellCast Parse
put
Code:
Case SUpdateNpcHP
            HandleUpdateNpcHP Parse

now at the bottom of modHandleData put this sub

Code:
' ::::::::::::::::::::::::::
' :: Update Npc Hp packet ::
' ::::::::::::::::::::::::::
Private Sub HandleUpdateNpcHP(ByRef Parse() As String)
    MapNpc(CByte(Parse(1))).Vital(Vitals.HP) = CLng(Parse(2))
End Sub

Now the last step, draw the hp bar. In sub BltNpc at the bottom put
Code:
If MapNpc(MapNpcNum).Vital(Vitals.HP) = 0 Then Exit Sub
        
        Call DDS_BackBuffer.SetFillColor(RGB(255, 0, 0))
        Call DDS_BackBuffer.DrawBox(X, Y + 32, X + 32, Y + 36)
        
        Call DDS_BackBuffer.SetFillColor(RGB(0, 255, 0))
        Call DDS_BackBuffer.DrawBox(X, Y + 32, X + ((MapNpc(MapNpcNum).Vital(Vitals.HP) / 100) / (MapNpc(MapNpcNum).MaxHp / 100) * 32), Y + 36)
Reply
#2
I having a little trouble getting this over to MS4, solely because ive been programming for over 12 hours on it lol, can anyone give me a hand by letting me know how i can get an NPC max health, on the client side? or do I have to make another packet? any help would be absolutely fantastic.
Reply
#3
What do you mean it sends the packet at the wrong time?

And the tutorial was written for an earlier version of ms, and i can guarantee for that version it worked fine.
Reply
#4
All is needed is MP and SP bars.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)