Forgot to say, after adding scripts, NPC sprites disappear: ![](http://i56.tinypic.com/b4dwdc.jpg) And sub: ``` Public Sub PlayerAttackNpc(ByVal attacker As Long, ByVal mapNpcNum As Long, ByVal Damage As Long, Optional ByVal spellnum As Long, Optional ByVal overTime As Boolean = False) Dim Name As String Dim exp As Long Dim n As Long Dim i As Long Dim STR As Long Dim DEF As Long Dim mapNum As Long Dim npcNum As Long Dim Buffer As clsBuffer ' Check for subscript out of range If IsPlaying(attacker) = False Or mapNpcNum MAX_MAP_NPCS Or Damage < 0 Then Exit Sub End If mapNum = GetPlayerMap(attacker) npcNum = MapNpc(mapNum).Npc(mapNpcNum).Num Name = Trim$(Npc(npcNum).Name) ' Check for weapon n = 0 If GetPlayerEquipment(attacker, Weapon) > 0 Then n = GetPlayerEquipment(attacker, Weapon) End If ' set the regen timer TempPlayer(attacker).stopRegen = True TempPlayer(attacker).stopRegenTimer = GetTickCount If Damage >= MapNpc(mapNum).Npc(mapNpcNum).Vital(Vitals.HP) Then SendActionMsg GetPlayerMap(attacker), "-" & MapNpc(mapNum).Npc(mapNpcNum).Vital(Vitals.HP), BrightRed, 1, (MapNpc(mapNum).Npc(mapNpcNum).x * 32), (MapNpc(mapNum).Npc(mapNpcNum).y * 32) SendBlood GetPlayerMap(attacker), MapNpc(mapNum).Npc(mapNpcNum).x, MapNpc(mapNum).Npc(mapNpcNum).y ' send the sound If spellnum > 0 Then SendMapSound attacker, MapNpc(mapNum).Npc(mapNpcNum).x, MapNpc(mapNum).Npc(mapNpcNum).y, SoundEntity.seSpell, spellnum ' send animation If n > 0 Then If Not overTime Then If spellnum = 0 Then Call SendAnimation(mapNum, Item(GetPlayerEquipment(attacker, Weapon)).Animation, MapNpc(mapNum).Npc(mapNpcNum).x, MapNpc(mapNum).Npc(mapNpcNum).y) End If End If ' Calculate exp to give attacker exp = Npc(npcNum).exp ' Make sure we dont get less then 0 If exp < 0 Then exp = 1 End If ' in party? If TempPlayer(attacker).inParty > 0 Then ' pass through party sharing function Party_ShareExp TempPlayer(attacker).inParty, exp, attacker Else ' no party - keep exp for self GivePlayerEXP attacker, exp End If 'Drop the goods if they get it n = Int(Rnd * Npc(npcNum).DropChance) + 1 If n = 1 Then Call SpawnItem(Npc(npcNum).DropItem, Npc(npcNum).DropItemValue, mapNum, MapNpc(mapNum).Npc(mapNpcNum).x, MapNpc(mapNum).Npc(mapNpcNum).y) End If ' Now set HP to 0 so we know to actually kill them in the server loop (this prevents subscript out of range) MapNpc(mapNum).Npc(mapNpcNum).Num = 0 MapNpc(mapNum).Npc(mapNpcNum).SpawnWait = GetTickCount MapNpc(mapNum).Npc(mapNpcNum).Vital(Vitals.HP) = 0 ' clear DoTs and HoTs For i = 1 To MAX_DOTS With MapNpc(mapNum).Npc(mapNpcNum).DoT(i) .Spell = 0 .Timer = 0 .Caster = 0 .StartTime = 0 .Used = False End With With MapNpc(mapNum).Npc(mapNpcNum).HoT(i) .Spell = 0 .Timer = 0 .Caster = 0 .StartTime = 0 .Used = False End With Next ' send death to the map Set Buffer = New clsBuffer Buffer.WriteLong SNpcDead Buffer.WriteLong mapNpcNum SendDataToMap mapNum, Buffer.ToArray() Set Buffer = Nothing 'Loop through entire map and purge NPC from targets For i = 1 To Player_HighIndex If IsPlaying(i) And IsConnected(i) Then If Player(i).Map = mapNum Then If TempPlayer(i).targetType = TARGET_TYPE_NPC Then If TempPlayer(i).target = mapNpcNum Then TempPlayer(i).target = 0 TempPlayer(i).targetType = TARGET_TYPE_NONE SendTarget i End If End If End If End If Next Else ' NPC not dead, just do the damage MapNpc(mapNum).Npc(mapNpcNum).Vital(Vitals.HP) = MapNpc(mapNum).Npc(mapNpcNum).Vital(Vitals.HP) - Damage ' Check for a weapon and say damage SendActionMsg mapNum, "-" & Damage, BrightRed, 1, (MapNpc(mapNum).Npc(mapNpcNum).x * 32), (MapNpc(mapNum).Npc(mapNpcNum).y * 32) SendBlood GetPlayerMap(attacker), MapNpc(mapNum).Npc(mapNpcNum).x, MapNpc(mapNum).Npc(mapNpcNum).y ' send the sound If spellnum > 0 Then SendMapSound attacker, MapNpc(mapNum).Npc(mapNpcNum).x, MapNpc(mapNum).Npc(mapNpcNum).y, SoundEntity.seSpell, spellnum ' send animation If n > 0 Then If Not overTime Then If spellnum = 0 Then Call SendAnimation(mapNum, Item(GetPlayerEquipment(attacker, Weapon)).Animation, 0, 0, TARGET_TYPE_NPC, mapNpcNum) End If End If ' Set the NPC target to the player MapNpc(mapNum).Npc(mapNpcNum).targetType = 1 ' player MapNpc(mapNum).Npc(mapNpcNum).target = attacker ' Now check for guard ai and if so have all onmap guards come after'm If Npc(MapNpc(mapNum).Npc(mapNpcNum).Num).Behaviour = NPC_BEHAVIOUR_GUARD Then For i = 1 To MAX_MAP_NPCS If MapNpc(mapNum).Npc(i).Num = MapNpc(mapNum).Npc(mapNpcNum).Num Then MapNpc(mapNum).Npc(i).target = attacker MapNpc(mapNum).Npc(i).targetType = 1 ' player End If Next End If ' set the regen timer MapNpc(mapNum).Npc(mapNpcNum).stopRegen = True MapNpc(mapNum).Npc(mapNpcNum).stopRegenTimer = GetTickCount ' if stunning spell, stun the npc If spellnum > 0 Then If Spell(spellnum).StunDuration > 0 Then StunNPC mapNpcNum, mapNum, spellnum ' DoT If Spell(spellnum).Duration > 0 Then AddDoT_Npc mapNum, mapNpcNum, spellnum, attacker End If End If SendMapNpcVitals mapNum, mapNpcNum End If If spellnum = 0 Then ' Reset attack timer TempPlayer(attacker).AttackTimer = GetTickCount End If End Sub ``` And if I change something after, then I getting an error "**Run-time error '380' Invalid property value**".