Tópico retirado da ALDEIARPG(MMORPGBR)
Bem vc deve estar se perguntando pra que outro tópico de spell linear, sendo que existes vários outros aqui.
Resposta: é que todos os que existem não funcionam 100%, sempre tem algum bug, ou algo do tipo e esse meu sim funciona 100%, chega de enrolar e vamos para o tutorial.
antes de mais nada Spell Linear, é spell em area ou magia reta.
1° Abra o sourcer do Cliente
procure por:
abaixo adicione:
abra a FrmEditor_Spell, de 2 cliques na cmbType e adicione:
agora adicione no final da lista:
Cliente pronto, agora vamos para o Servidor~
na sub Public Sub CastSpell procure por:
e em baixo adicione:
ainda na mesma sub em procure por
em baixo da Public Sub StunNPC
adicione:
abaixo de:
CÓDIGO:
adicione:
CÓDIGO:
acho que é só, caso de algum erro me informe aqui no TÓPICO.
obs: spell baseado nos status, funciona com este tutorial :)
PARA QUEM QUISER EM FOR EM VEZ DE DO WHILE Troque a case SPELL_TYPE_LINEAR por essa:
SÓ FIZ ESSE FIX PQ 3 PESSOAS ME PEDIRAM! E O VALENTINE NÃO ARRUMOU O TUTO DELE
Bem vc deve estar se perguntando pra que outro tópico de spell linear, sendo que existes vários outros aqui.
Resposta: é que todos os que existem não funcionam 100%, sempre tem algum bug, ou algo do tipo e esse meu sim funciona 100%, chega de enrolar e vamos para o tutorial.
antes de mais nada Spell Linear, é spell em area ou magia reta.
1° Abra o sourcer do Cliente
procure por:
- Código:
Public Const SPELL_TYPE_WARP As Byte = 4
abaixo adicione:
- Código:
Public Const SPELL_TYPE_LINEAR As Byte = 5 ' ou o proximo numero
abra a FrmEditor_Spell, de 2 cliques na cmbType e adicione:
- Código:
Spell(EditorIndex).Type = cmbType.ListIndex
If cmbType.text = "Linear" Then
scrlRange.Value = 0
chkAOE.Value = 1
End If
agora adicione no final da lista:
Linear
Cliente pronto, agora vamos para o Servidor~
na sub Public Sub CastSpell procure por:
- Código:
Dim x, y As Long
e em baixo adicione:
- Código:
Dim Linha, Calculate As Long
ainda na mesma sub em procure por
- Código:
Case 2 ' targetted
acima do END SELECT adicione:
- Código:
Case SPELL_TYPE_LINEAR
DidCast = True
Linha = 1
Do While Linha < Spell(spellnum).AoE
Select Case GetPlayerDir(index)
Case DIR_UP
Calculate = GetPlayerY(index) - Linha
If Calculate <= 0 Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) - Linha).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index), GetPlayerY(index) - Linha
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index) - Linha
Case DIR_DOWN
Calculate = GetPlayerY(index) + Linha
If Calculate >= Map(Linha).MaxY Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) + Linha).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index), GetPlayerY(index) + Linha
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index) + Linha
Case DIR_LEFT
Calculate = GetPlayerX(index) - Linha
If Calculate <= 0 Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - Linha, GetPlayerY(index)).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index) - Linha, GetPlayerY(index)
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index) - Linha, GetPlayerY(index)
Case DIR_RIGHT
Calculate = GetPlayerX(index) + Linha
If Calculate <= 0 Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index) + Linha, GetPlayerY(index)
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index) + Linha, GetPlayerY(index)
End Select
Linha = Linha + 1
Loop
em baixo da Public Sub StunNPC
adicione:
- Código:
Function IsUseLinear(ByVal index As Integer, ByVal spellnum As Integer, ByVal Vital As Long, ByVal Mapa As Integer, 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 PlayerAttackNpc index, i, Vital, spellnum
Next
'Loop Global Player
For i = 1 To Player_HighIndex
If GetPlayerMap(i) = Mapa And GetPlayerX(i) = x And GetPlayerY(i) = y Then PlayerAttackPlayer index, i, Vital, spellnum
Next
End Function
abaixo de:
CÓDIGO:
- Código:
Public Const SPELL_TYPE_WARP As Byte = 4
adicione:
CÓDIGO:
- Código:
Public Const SPELL_TYPE_LINEAR As Byte = 5
acho que é só, caso de algum erro me informe aqui no TÓPICO.
obs: spell baseado nos status, funciona com este tutorial :)
PARA QUEM QUISER EM FOR EM VEZ DE DO WHILE Troque a case SPELL_TYPE_LINEAR por essa:
- Código:
Case SPELL_TYPE_LINEAR
DidCast = True
for Linha =1 < Spell(spellnum).AoE
Select Case GetPlayerDir(index)
Case DIR_UP
Calculate = GetPlayerY(index) - Linha
If Calculate <= 0 Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) - Linha).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index), GetPlayerY(index) - Linha
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index) - Linha
Case DIR_DOWN
Calculate = GetPlayerY(index) + Linha
If Calculate >= Map(Linha).MaxY Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) + Linha).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index), GetPlayerY(index) + Linha
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index) + Linha
Case DIR_LEFT
Calculate = GetPlayerX(index) - Linha
If Calculate <= 0 Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - Linha, GetPlayerY(index)).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index) - Linha, GetPlayerY(index)
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index) - Linha, GetPlayerY(index)
Case DIR_RIGHT
Calculate = GetPlayerX(index) + Linha
If Calculate <= 0 Then Exit Sub
If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).Type = TILE_TYPE_BLOCKED Then Exit Sub
SendAnimation GetPlayerMap(index), Spell(spellnum).SpellAnim, GetPlayerX(index) + Linha, GetPlayerY(index)
IsUseLinear index, spellnum, Vital, GetPlayerMap(index), GetPlayerX(index) + Linha, GetPlayerY(index)
End Select
Next
NAO AJUDO EM PROJETOS!
Créditos
Dazateam (Rodrigo)
Valentine - Por postar o tópico original
Kawanzii (Pablo ou Kawan) - Por desbugar u-u