Informações
Nome: Sistema de Magia Direcional
Versão: 0.1.0
Criador: GameLoop
Creditos: Dooolly, Thales12
Requerimento: Magia Linear Avançada
Esse Sistema é apenas um complemento para o sistema de Magia linear avançada. Por isso ele requer o sistema. Qualquer erro informar no tópico.
Tutorial
Client-Side
Vamos começar no frmEditor_Spell
Primeiro você terá que cria:
- 4 Scrollbars
- 4 Labeis
Vai ter que renomear todas as scrolls com o mesmo nome: scrlDirSpell
Também terá que renomear as labeis com o mesmo nome: lblDirSpell
Lembre de por em ordem as Index
0 = Cima/DIR_UP
1 = Baixo/DIR_DOWN
2 = Esquerda/DIR_LEFT
3 = Direita/DIR_RIGHT
* Essa parte da Index é muito importante.
Aqui um exemplo de como ficou o meu:
- Spoiler:
Clique em qualquer uma dessa scrolls e ponha o seguinte código:
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If scrlDirSpell(Index).Value > 0 Then
lblDirSpell(Index).Caption = Trim$(Animation(scrlDirSpell(Index).Value).Name)
Else
lblDirSpell(Index).Caption = "Nenhuma"
End If
Spell(EditorIndex).Anim(Index) = scrlDirSpell(Index).Value
' Error handler
Exit Sub
errorhandler:
HandleError "scrlDirSpell_Change", "frmEditor_Spell", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Ainda na frmEditor_Spell procure pela cmbType
Vá em List nas propriedades da cmbType e adicione: Direcional
- Exemplo:
Vou deixa o link da minha frmEditor_Spell para você ver. Se Quiser pode até usar, mas nela você só encontra o sistema de Magia Linear Avançada, e Magia Direcional.
frmEditor_Spell Files
CODIGO
Em modGameEditors procure por:
- Código:
.scrlStun.Value = Spell(EditorIndex).StunDuration
Abaixo adicione:
- Código:
' Magia Direcional
For i = 0 To 3
.scrlDirSpell(i).Value = Spell(EditorIndex).Anim(i)
Next
Em modConstants procure por:
- Código:
Public Const SPELL_TYPE_WARP As Byte = 4
Abaixo adicione:
- Código:
Public Const SPELL_TYPE_DIR As Byte = 5
Se o ultimo numero for 5 você bota 6. Nunca deixe repetir o valor da SPELL_TYPE
Em modTypes procure por:
- Código:
StunDuration As Long
Abaixo adicione:
- Código:
' Magia Direcional
Anim(0 To 3) As Long
- Exemplo:
- Código:
Private Type SpellRec
Name As String * NAME_LENGTH
Desc As String * 255
Sound As String * NAME_LENGTH
Type As Byte
MPCost As Long
LevelReq As Long
AccessReq As Long
ClassReq As Long
CastTime As Long
CDTime As Long
Icon As Long
Map As Long
x As Long
y As Long
Dir As Byte
Vital As Long
Duration As Long
Interval As Long
Range As Byte
IsAoE As Boolean
AoE As Long
CastAnim As Long
SpellAnim As Long
StunDuration As Long
' Magia Linear Avançada
Tamanho As Long
AnimL As Long
' Magia Direcional
Anim(0 To 3) As Long
End Type
Cliente Terminado!
Server-Side
Em modConstants procure por:
- Código:
Public Const SPELL_TYPE_WARP As Byte = 4
Abaixo adicione:
- Código:
Public Const SPELL_TYPE_DIR As Byte = 5
Se o ultimo numero for 5 você bota 6. Nunca deixe repetir o valor da SPELL_TYPE
Em modTypes procure por:
- Código:
StunDuration As Long
Abaixo adicione:
- Código:
' Magia Direcional
Anim(0 To 3) As Long
Siga o exemplo anterior.
Em modCombat na Sub CastSpell procure por:
- Código:
End Select
Case 2 ' targetted
Acima adicione:
- Código:
Case SPELL_TYPE_DIR
' Ativar Animação
Select Case GetPlayerDir(index)
Case DIR_UP
SendAnimation GetPlayerMap(index), Spell(SpellNum).Anim(GetPlayerDir(index)), GetPlayerX(index), GetPlayerY(index) - 1
Case DIR_DOWN
SendAnimation GetPlayerMap(index), Spell(SpellNum).Anim(GetPlayerDir(index)), GetPlayerX(index), GetPlayerY(index) + 1
Case DIR_LEFT
SendAnimation GetPlayerMap(index), Spell(SpellNum).Anim(GetPlayerDir(index)), GetPlayerX(index) - 1, GetPlayerY(index)
Case DIR_RIGHT
SendAnimation GetPlayerMap(index), Spell(SpellNum).Anim(GetPlayerDir(index)), GetPlayerX(index) + 1, GetPlayerY(index)
End Select
' Dano Linear
For linha = 1 To Spell(SpellNum).AoE
Select Case GetPlayerDir(index)
Case DIR_UP
If Not GetPlayerY(index) - linha < 0 Then
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
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index) + linha
End If
Case DIR_LEFT
If Not GetPlayerX(index) - linha < 0 Then
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
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index) + linha, GetPlayerY(index)
End If
End Select
'/// - Dano Lateral - ///
If Spell(SpellNum).Tamanho > 0 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
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index) - linha2, GetPlayerY(index) - linha
End If
If Not GetPlayerX(index) + linha2 > Map(mapnum).MaxX Then
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 < 0 Then
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index) + linha2, GetPlayerY(index) + linha
End If
If Not GetPlayerX(index) + linha2 > Map(mapnum).MaxX Then
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
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index) - linha, GetPlayerY(index) - linha2
End If
If Not GetPlayerY(index) + linha2 > Map(mapnum).MaxY Then
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
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index) + linha, GetPlayerY(index) + linha2
End If
If Not GetPlayerY(index) - linha2 < 0 Then
UsarMagiaLinear index, SpellNum, Vital, GetPlayerMap(index), GetPlayerX(index) + linha, GetPlayerY(index) - linha2
End If
End If
End Select
Next
End If
Next
DidCast = True
Servidor Terminado!
Com funciona?
O Sistema funciona igual ao meu sistema de Magia Linear, Você escolhe o tamanho em Linha e o tamanho em que ele se expande, depois é só escolher uma animação para cada direção...
Última edição por Dooolly em Sex Mar 18, 2016 10:22 pm, editado 5 vez(es)