1 [Tutorial]NPC Atacando com SPELL EO 2.0 13/2/2012, 18:06
SkyAway
Membro V
PARA QUE SERVE ISSO?
Bom Esta lista de códigos fará com que os NPC's do seu jogo utilizem também spell's.
Tanto Spell's de ataque como Spell's de cura. Bom vamos ao que interessa
Lado do SEVER
Abra o seu SERVER.VBP
Em modConstants
Procure por :
Embaixo dele você adciona
Agora vá para modTypes
Lá procure por Private Type NpcRec
Adcione isso entre Private Type NpcRec e End Type
Ainda em modTypes
Procure Private Type MapNpcRec
(Fica logo abaixo de Private Type NpcRec.)
Entre Private Type MapNpcRec e End Type adcione
Vamos para modCombat
Procure por Sub NpcAttackPlayer
No final desse Sub após até do End Sub adcione isto
No modServerLoop
Procure por isso e delete
Agora Procure no mesmo mod
Acima disso adcione
Acabou o Lado do Servidor salve e compile ^.^
Vamos para o Client agora.
Abra o seu CLIENT.VBP
Vá em modConstants
Procure por
Logo abaixo adcione
Agora vamos para o modTypes
Procure por Private Type NpcRec
Entre o Private Type NpcRec e oEnd TypeAdcione
Vá para modGameEditors
Procure por Public Sub NpcEditorInit
Ache esta linha
Logo abaixo disso adcione
agora baixe esses 2 arquivos e os adcione no seu projeto
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Ai é só vc salvar e compilar.
Creditos : SkyAway , Por Postar Aqui pra vocês
GOSTOU DA + 1 CRED Só CLICAR NO + ALI DO LADO >>>>>
Bom Esta lista de códigos fará com que os NPC's do seu jogo utilizem também spell's.
Tanto Spell's de ataque como Spell's de cura. Bom vamos ao que interessa
Lado do SEVER
Abra o seu SERVER.VBP
Em modConstants
Procure por :
- Código:
Public Const MAX_PARTY_MEMBERS As Long = 4
Embaixo dele você adciona
- Código:
Public Const MAX_NPC_SPELLS As Long = 5
Agora vá para modTypes
Lá procure por Private Type NpcRec
Adcione isso entre Private Type NpcRec e End Type
- Código:
Spell(1 To MAX_NPC_SPELLS) As Long
Ainda em modTypes
Procure Private Type MapNpcRec
(Fica logo abaixo de Private Type NpcRec.)
Entre Private Type MapNpcRec e End Type adcione
- Código:
SpellTimer(1 To MAX_NPC_SPELLS) As Long
Heals As Integer
Vamos para modCombat
Procure por Sub NpcAttackPlayer
No final desse Sub após até do End Sub adcione isto
- Código:
Sub NpcSpellPlayer(ByVal MapNpcNum As Long, ByVal Victim As Long, SpellSlotNum As Long)
Dim mapnum As Long
Dim i As Long
Dim n As Long
Dim SpellNum As Long
Dim Buffer As clsBuffer
Dim InitDamage As Long
Dim Damage As Long
Dim MaxHeals As Long
' Check for subscript out of range
If MapNpcNum <= 0 Or MapNpcNum > MAX_MAP_NPCS Or IsPlaying(Victim) = False Then
Exit Sub
End If
' Check for subscript out of range
If MapNpc(GetPlayerMap(Victim)).Npc(MapNpcNum).Num <= 0 Then
Exit Sub
End If
If SpellSlotNum <= 0 Or SpellSlotNum > MAX_NPC_SPELLS Then Exit Sub
' The Variables
mapnum = GetPlayerMap(Victim)
SpellNum = Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Spell(SpellSlotNum)
' Send this packet so they can see the person attacking
Set Buffer = New clsBuffer
Buffer.WriteLong SNpcAttack
Buffer.WriteLong MapNpcNum
SendDataToMap mapnum, Buffer.ToArray()
Set Buffer = Nothing
' CoolDown Time
If MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) > GetTickCount Then Exit Sub
' Spell Types
Select Case Spell(SpellNum).Type
' AOE Healing Spells
Case SPELL_TYPE_HEALHP
' Make sure an npc waits for the spell to cooldown
MaxHeals = 1 + Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) \ 25
If MapNpc(mapnum).Npc(MapNpcNum).Heals >= MaxHeals Then Exit Sub
If MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) <= Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).HP * 0.3 Then
If Spell(SpellNum).IsAoE Then
For i = 1 To MAX_MAP_NPCS
If MapNpc(mapnum).Npc(i).Num > 0 Then
If MapNpc(mapnum).Npc(i).Vital(Vitals.HP) > 0 Then
If isInRange(Spell(SpellNum).AoE, MapNpc(mapnum).Npc(MapNpcNum).x, MapNpc(mapnum).Npc(MapNpcNum).y, MapNpc(mapnum).Npc(i).x, MapNpc(mapnum).Npc(i).y) Then
InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2)
MapNpc(mapnum).Npc(i).Vital(Vitals.HP) = MapNpc(mapnum).Npc(i).Vital(Vitals.HP) + InitDamage
SendActionMsg mapnum, "+" & InitDamage, BrightGreen, 1, (MapNpc(mapnum).Npc(i).x * 32), (MapNpc(mapnum).Npc(i).y * 32)
Call SendAnimation(mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_NPC, MapNpcNum)
If MapNpc(mapnum).Npc(i).Vital(Vitals.HP) > Npc(MapNpc(mapnum).Npc(i).Num).HP Then
MapNpc(mapnum).Npc(i).Vital(Vitals.HP) = Npc(MapNpc(mapnum).Npc(i).Num).HP
End If
MapNpc(mapnum).Npc(MapNpcNum).Heals = MapNpc(mapnum).Npc(MapNpcNum).Heals + 1
MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000
Exit Sub
End If
End If
End If
Next
Else
' Non AOE Healing Spells
InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2)
MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) = MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) + InitDamage
SendActionMsg mapnum, "+" & InitDamage, BrightGreen, 1, (MapNpc(mapnum).Npc(MapNpcNum).x * 32), (MapNpc(mapnum).Npc(MapNpcNum).y * 32)
Call SendAnimation(mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_NPC, MapNpcNum)
If MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) > Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).HP Then
MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) = Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).HP
End If
MapNpc(mapnum).Npc(MapNpcNum).Heals = MapNpc(mapnum).Npc(MapNpcNum).Heals + 1
MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000
Exit Sub
End If
End If
' AOE Damaging Spells
Case SPELL_TYPE_DAMAGEHP
' Make sure an npc waits for the spell to cooldown
If Spell(SpellNum).IsAoE Then
For i = 1 To Player_HighIndex
If IsPlaying(i) Then
If GetPlayerMap(i) = mapnum Then
If isInRange(Spell(SpellNum).AoE, MapNpc(mapnum).Npc(MapNpcNum).x, MapNpc(mapnum).Npc(MapNpcNum).y, GetPlayerX(i), GetPlayerY(i)) Then
InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2)
Damage = InitDamage - Player(i).Stat(Stats.willpower)
If Damage <= 0 Then
SendActionMsg GetPlayerMap(i), "RESIST!", Pink, 1, (GetPlayerX(i) * 32), (GetPlayerY(i) * 32)
Exit Sub
Else
NpcAttackPlayer MapNpcNum, i, Damage
SendAnimation mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_PLAYER, MapNpcNum
MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000
Exit Sub
End If
End If
End If
End If
Next
' Non AoE Damaging Spells
Else
If isInRange(Spell(SpellNum).Range, MapNpc(mapnum).Npc(MapNpcNum).x, MapNpc(mapnum).Npc(MapNpcNum).y, GetPlayerX(Victim), GetPlayerY(Victim)) Then
InitDamage = Spell(SpellNum).Vital + (Npc(MapNpc(mapnum).Npc(MapNpcNum).Num).Stat(Stats.intelligence) / 2)
Damage = InitDamage - Player(Victim).Stat(Stats.willpower)
If Damage <= 0 Then
SendActionMsg GetPlayerMap(Victim), "RESIST!", Pink, 1, (GetPlayerX(Victim) * 32), (GetPlayerY(Victim) * 32)
Exit Sub
Else
NpcAttackPlayer MapNpcNum, Victim, Damage
SendAnimation mapnum, Spell(SpellNum).SpellAnim, 0, 0, TARGET_TYPE_PLAYER, Victim
MapNpc(mapnum).Npc(MapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(SpellNum).CDTime * 1000
Exit Sub
End If
End If
End If
End Select
End Sub
No modServerLoop
Procure por isso e delete
- Código:
Else
' lol no npc combat :(
End If
Agora Procure no mesmo mod
- Código:
' ////////////////////////////////////////////
' // This is used for regenerating NPC's HP //
' ////////////////////////////////////////////
Acima disso adcione
- Código:
' Spell Casting
For i = 1 To MAX_NPC_SPELLS
If Npc(npcNum).Spell(i) > 0 Then
If MapNpc(mapnum).Npc(x).SpellTimer(i) + (Spell(Npc(npcNum).Spell(i)).CastTime * 1000) < GetTickCount Then
NpcSpellPlayer x, target, i
End If
End If
Next
End If
Acabou o Lado do Servidor salve e compile ^.^
Vamos para o Client agora.
Abra o seu CLIENT.VBP
Vá em modConstants
Procure por
- Código:
Public Const MAX_PARTY_MEMBERS As Long = 4
Logo abaixo adcione
- Código:
Public Const MAX_NPC_SPELLS As Long = 5
Agora vamos para o modTypes
Procure por Private Type NpcRec
Entre o Private Type NpcRec e oEnd TypeAdcione
- Código:
Spell(1 To MAX_NPC_SPELLS) As Long
Vá para modGameEditors
Procure por Public Sub NpcEditorInit
Ache esta linha
- Código:
.txtDamage.text = Npc(EditorIndex).Damage
Logo abaixo disso adcione
- Código:
.scrlSpellNum.Max = MAX_NPC_SPELLS
.scrlSpellNum.Value = 1
agora baixe esses 2 arquivos e os adcione no seu projeto
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Ai é só vc salvar e compilar.
Creditos : SkyAway , Por Postar Aqui pra vocês
GOSTOU DA + 1 CRED Só CLICAR NO + ALI DO LADO >>>>>