Como Funciona
Uma spell(magia) que o uso lhe teleporta pra trás dum alvo, seja jogador ou npc.
Cliente~Side frmSpellEditor
No cmbType, adicione na propriedade List, um item chamado Spell Teleport
Agora procure por:
Adicione abaixo:
Server~Side
Procure por:
Abaixo adicione:
Procure:
Acima adicione:
Agora no fim do modGameLogic adicione:
Fim
Créditos~
Renan
Uma spell(magia) que o uso lhe teleporta pra trás dum alvo, seja jogador ou npc.
Cliente~Side frmSpellEditor
No cmbType, adicione na propriedade List, um item chamado Spell Teleport
Agora procure por:
- Código:
Public Const SPELL_TYPE_PET = 6
Adicione abaixo:
- Código:
Public Const SPELL_TYPE_TELEPORT = 7
Server~Side
Procure por:
- Código:
Public Const SPELL_TYPE_PET = 6
Abaixo adicione:
- Código:
Public Const SPELL_TYPE_TELEPORT = 7
Procure:
- Código:
' Checar se a magia é um summon
Acima adicione:
- Código:
If Spell(SpellNum).Type = SPELL_TYPE_TELEPORT Then
If Player(Index).Target > 0 Then
Call TeleportAtras(Index)
Call SetPlayerMP(Index, GetPlayerMP(Index) - Spell(SpellNum).MPCost)
Call SendMP(Index)
Casted = True
Else
Call PlayerMsg(Index, "Você não tem um alvo..", Red)
End If
End If
Agora no fim do modGameLogic adicione:
- Código:
Function TileIsOpen(ByVal MapNum As Long, ByVal x As Long, ByVal y As Long) As Boolean
Dim i As Long
TileIsOpen = True
For i = 1 To MAX_PLAYERS
If IsPlaying(i) = True Then
If GetPlayerMap(i) = MapNum And GetPlayerX(i) = x And GetPlayerY(i) = y Then
TileIsOpen = False
Exit Function
End If
End If
Next
For i = 1 To MAX_MAP_NPCS
If MapNpc(MapNum, i).num > 0 Then
If MapNpc(MapNum, i).x = x And MapNpc(MapNum, i).y = y Then
TileIsOpen = False
Exit Function
End If
End If
Next
If x < 0 Then TileIsOpen = False: Exit Function
If y < 0 Then TileIsOpen = False: Exit Function
If x > MAX_MAPX Then TileIsOpen = False: Exit Function
If y > MAX_MAPY Then TileIsOpen = False: Exit Function
If Map(MapNum).Tile(x, y).Type <> TILE_TYPE_WALKABLE And Map(MapNum).Tile(x, y).Type <> TILE_TYPE_ITEM Then
TileIsOpen = False
Exit Function
End If
If Map(MapNum).Tile(x, y).Type = TILE_TYPE_BLOCKED Then
TileIsOpen = False
Exit Function
End If
End Function
Sub TeleportAtras(ByVal Index As Long)
Select Case Player(Index).TargetType
Case TARGET_TYPE_PLAYER
If GetPlayerMap(Index) = GetPlayerMap(Player(Index).Target) Then
Select Case GetPlayerDir(Player(Index).Target)
Case DIR_UP
If TileIsOpen(GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target), GetPlayerY(Player(Index).Target) + 1) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_UP
Call PlayerWarp(Index, GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target), GetPlayerY(Player(Index).Target) + 1)
End If
Case DIR_DOWN
If TileIsOpen(GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target), GetPlayerY(Player(Index).Target) - 1) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_DOWN
Call PlayerWarp(Index, GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target), GetPlayerY(Player(Index).Target) - 1)
End If
Case DIR_LEFT
If TileIsOpen(GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target) + 1, GetPlayerY(Player(Index).Target)) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_LEFT
Call PlayerWarp(Index, GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target) + 1, GetPlayerY(Player(Index).Target))
End If
Case DIR_RIGHT
If TileIsOpen(GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target) - 1, GetPlayerY(Player(Index).Target)) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_RIGHT
Call PlayerWarp(Index, GetPlayerMap(Player(Index).Target), GetPlayerX(Player(Index).Target) - 1, GetPlayerY(Player(Index).Target))
End If
End Select
End If
Case TARGET_TYPE_NPC
If MapNpc(GetPlayerMap(Index), Player(Index).Target).num > 0 Then
Select Case MapNpc(GetPlayerMap(Index), Player(Index).Target).Dir
Case DIR_UP
If TileIsOpen(GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x, MapNpc(GetPlayerMap(Index), Player(Index).Target).y + 1) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_UP
Call PlayerWarp(Index, GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x, MapNpc(GetPlayerMap(Index), Player(Index).Target).y + 1, False)
End If
Case DIR_DOWN
If TileIsOpen(GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x, MapNpc(GetPlayerMap(Index), Player(Index).Target).y - 1) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_DOWN
Call PlayerWarp(Index, GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x, MapNpc(GetPlayerMap(Index), Player(Index).Target).y - 1, False)
End If
Case DIR_LEFT
If TileIsOpen(GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x + 1, MapNpc(GetPlayerMap(Index), Player(Index).Target).y) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_LEFT
Call PlayerWarp(Index, GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x + 1, MapNpc(GetPlayerMap(Index), Player(Index).Target).y, False)
End If
Case DIR_RIGHT
If TileIsOpen(GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x - 1, MapNpc(GetPlayerMap(Index), Player(Index).Target).y) Then
Player(Index).Char(Player(Index).CharNum).Dir = DIR_RIGHT
Call PlayerWarp(Index, GetPlayerMap(Index), MapNpc(GetPlayerMap(Index), Player(Index).Target).x - 1, MapNpc(GetPlayerMap(Index), Player(Index).Target).y, False)
End If
End Select
End If
End Select
End Sub
Fim
Créditos~
Renan