MAGIA LINEAR AVANÇADA
Como Funciona
Sistema de Magia que funciona em uma só direção e que se expande em suas laterais.
Server~Side
Em ModConstants Procure Por:
- Código:
Public Const SPELL_TYPE_WARP As Byte = 4
Abaixo Adicione:
- Código:
Public Const SPELL_TYPE_LINEAR As Byte = 5
Em ModCombat Procure Por:
- Código:
Dim Buffer As clsBuffer, spellCastType As Long
Abaixo Adicione:
- Código:
Dim linha As Long, linha2 As Long, AnimL As Long
Nessa Mesma Sub Procure Por:
- Código:
end select
Case 2 ' targetted
Acima Adicione:
- Código:
Case SPELL_TYPE_LINEAR
'/// - MAGIA LINEAR AVANÇADA - ///
For linha = 1 To Spell(SpellNum).AoE
Select Case GetPlayerDir(Index)
Case DIR_UP
If Not GetPlayerY(Index) - linha < 0 Then
SendAnimation GetPlayerMap(Index), Spell(SpellNum).SpellAnim, GetPlayerX(Index), GetPlayerY(Index) - linha
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index), GetPlayerY(Index) - linha
End If
Case DIR_DOWN
If Not GetPlayerY(Index) + linha > Map(mapnum).MaxY Then
SendAnimation GetPlayerMap(Index), Spell(SpellNum).SpellAnim, GetPlayerX(Index), GetPlayerY(Index) + linha
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index), GetPlayerY(Index) + linha
End If
Case DIR_LEFT
If Not GetPlayerX(Index) - linha < 0 Then
SendAnimation GetPlayerMap(Index), Spell(SpellNum).SpellAnim, GetPlayerX(Index) - linha, GetPlayerY(Index)
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) - linha, GetPlayerY(Index)
End If
Case DIR_RIGHT
If Not GetPlayerX(Index) + linha > Map(mapnum).MaxX Then
SendAnimation GetPlayerMap(Index), Spell(SpellNum).SpellAnim, GetPlayerX(Index) + linha, GetPlayerY(Index)
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) + linha, GetPlayerY(Index)
End If
End Select
'/// - Animação Lateral - ///
If Spell(SpellNum).AnimL > 0 Then
AnimL = Spell(SpellNum).AnimL
Else
AnimL = Spell(SpellNum).SpellAnim
End If
'/// - Magia Lateral - ///
If Spell(SpellNum).Tamanho > 0 Then
If linha > 1 Then
For linha2 = 1 To Spell(SpellNum).Tamanho
Select Case GetPlayerDir(Index)
Case DIR_UP
If Not GetPlayerY(Index) - linha < 0 Then
If Not GetPlayerX(Index) - linha2 < 0 Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) - linha2, GetPlayerY(Index) - linha
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) - linha2, GetPlayerY(Index) - linha
End If
If Not GetPlayerX(Index) + linha2 > Map(mapnum).MaxX Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) + linha2, GetPlayerY(Index) - linha
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) + linha2, GetPlayerY(Index) - linha
End If
End If
Case DIR_DOWN
If Not GetPlayerY(Index) + linha > Map(mapnum).MaxY Then
If Not GetPlayerX(Index) + linha2 > Map(mapnum).MaxX Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) + linha2, GetPlayerY(Index) + linha
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) + linha2, GetPlayerY(Index) + linha
End If
If Not GetPlayerX(Index) - linha2 < 0 Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) - linha2, GetPlayerY(Index) + linha
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) - linha2, GetPlayerY(Index) + linha
End If
End If
Case DIR_LEFT
If Not GetPlayerX(Index) - linha < 0 Then
If Not GetPlayerY(Index) - linha2 < 0 Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) - linha, GetPlayerY(Index) - linha2
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) - linha, GetPlayerY(Index) - linha2
End If
If Not GetPlayerY(Index) + linha2 > Map(mapnum).MaxY Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) - linha, GetPlayerY(Index) + linha2
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) - linha, GetPlayerY(Index) + linha2
End If
End If
Case DIR_RIGHT
If Not GetPlayerX(Index) + linha > Map(mapnum).MaxX Then
If Not GetPlayerY(Index) + linha2 > Map(mapnum).MaxY Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) + linha, GetPlayerY(Index) + linha2
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) + linha, GetPlayerY(Index) + linha2
End If
If Not GetPlayerY(Index) - linha2 < 0 Then
SendAnimation GetPlayerMap(Index), AnimL, GetPlayerX(Index) + linha, GetPlayerY(Index) - linha2
UsarMagiaLinear Index, SpellNum, vital, GetPlayerMap(Index), GetPlayerX(Index) + linha, GetPlayerY(Index) - linha2
End If
End If
End Select
Next
End If
End If
Next
DidCast = True
NO Final do Modulo adicione
- Código:
Function UsarMagiaLinear(ByVal Index As Integer, ByVal SpellNum As Integer, ByVal vital As Long, ByVal Mapa As Long, ByVal x As Byte, ByVal y As Byte)
Dim i As Long
'Loop Global Npc
For i = 1 To MAX_MAP_NPCS
If MapNpc(Mapa).NPC(i).Num > 0 And MapNpc(Mapa).NPC(i).x = x And MapNpc(Mapa).NPC(i).y = y And MapNpc(Mapa).NPC(i).vital(HP) > 0 Then
If CanPlayerAttackNpc(Index, i, True) Then
PlayerAttackNpc Index, i, vital, SpellNum
End If
End If
Next
'Loop Global Player
For i = 1 To Player_HighIndex
If IsPlaying(i) Then
If GetPlayerMap(i) = Mapa And GetPlayerX(i) = x And GetPlayerY(i) = y Then
If CanPlayerAttackPlayer(Index, i, True) Then
PlayerAttackPlayer Index, i, vital, SpellNum
End If
End If
End If
Next
End Function
Em modtypes procure por:
- Código:
AoE As Long
Abaixo adicione:
- Código:
Tamanho As Long
AnimL As Long
DELETE TODAS AS MAGIAS ANTES DE INICIAR O SERVIDOR!
SERVIDOR PRONTO!
Client~Side
Na frmEditor_Spell Adicione:
- Spoiler:
- Scroll_Bar - (scrlTamanho)
Dentro Dela Adicione:
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
lblTamanho.Caption = " Tamanho Lateral: " & scrlTamanho.Value
Spell(EditorIndex).Tamanho = scrlTamanho.Value
' Error handler
Exit Sub
errorhandler:
HandleError "scrlTamanho_Change", "frmEditor_Spell", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
- Spoiler:
- Scroll_Bar - (scrlAnimL)
Dentro Dela Adicione:
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If scrlAnimL.Value > 0 Then
lblAnimL.Caption = "Anim Lateral: " & Trim$(Animation(scrlAnimL.Value).Name)
Else
lblAnimL.Caption = "Anim Lateral: Nenhum"
End If
Spell(EditorIndex).AnimL = scrlAnimL.Value
' Error handler
Exit Sub
errorhandler:
HandleError "scrlAnimL_Change", "frmEditor_Spell", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Label - (lblTamanho) - (Caption: Tamanho Lateral: 0)
Label - (lblAnimL) - (Caption: Anim Lateral: Nenhuma)
Ainda na frmEditor_Spell, na cmbType, em Propriedades procure por "List" e adicione: Linear
Depois dê um duplo Clique na cmbType e Adicione:
- Código:
If cmbType.text = "Linear" Then
chkAOE.Value = 1
Else
chkAOE.Value = 0
End If
na mobGameEditors, Procure:
- Código:
.scrlStun.Value = Spell(EditorIndex).StunDuration
Abaixo Adicione:
- Código:
.scrlTamanho.Value = Spell(EditorIndex).Tamanho
.scrlAnimL.Value = Spell(EditorIndex).AnimL
Em ModTypes procure por:
- Código:
AoE As Long
Abaixo adicione:
- Código:
Tamanho As Long
AnimL As Long
Em ModConstants Procure Por:
- Código:
Public Const SPELL_TYPE_WARP As Byte = 4
Abaixo Adicione:
- Código:
Public Const SPELL_TYPE_LINEAR As Byte = 5
Client Pronto!
Última edição por Dooolly em Ter Jan 27, 2015 12:43 pm, editado 5 vez(es)