MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!

Participe do fórum, é rápido e fácil

MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!
MMORPG Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Blocked Npc Warp

4 participantes

Ir para baixo

Blocked Npc Warp Empty Blocked Npc Warp

Mensagem por Pablo Sex 29 Mar 2013, 09:19

A pedido do meu primo Dragon Akira, trago esse pequeno tutorial.

Descrição ~ Nesse tutorial será impossível a passagem de npcs acima dos warps impossibilitando a passagem dos players.

Serve~Side

Procure por:


Código:
Function CanNpcMove(ByVal MapNum As Long, ByVal MapNpcNum As Long, ByVal Dir) As Boolean


Mude tudo para:

Código:
Function CanNpcMove(ByVal MapNum As Long, ByVal MapNpcNum As Long, ByVal Dir) As Boolean
    Dim I As Long
    Dim TileType As Long
    Dim X As Long
    Dim Y As Long

    ' Check for sub-script out of range.
    If MapNum < 1 Or MapNum > MAX_MAPS Then
        Exit Function
    End If

    ' Check for sub-script out of range.
    If MapNpcNum < 1 Or MapNpcNum > MAX_MAP_NPCS Then
        Exit Function
    End If

    ' Check for sub-script out of range.
    If Dir < DIR_UP Or Dir > DIR_RIGHT Then
        Exit Function
    End If

    X = MapNPC(MapNum, MapNpcNum).X
    Y = MapNPC(MapNum, MapNpcNum).Y

    CanNpcMove = True

    Select Case Dir
        Case DIR_UP
            If Y > 0 Then
                ' Get the attribute on the tile.
                TileType = Map(MapNum).Tile(X, Y - 1).Type
                               
                ' Check to make sure that the tile is walkable.
                If TileType = TILE_TYPE_BLOCKED Or TileType = TILE_TYPE_NPCAVOID Or TileType = TILE_TYPE_WARP Then
                    CanNpcMove = False
                    Exit Function
                End If

                ' Check to make sure that there is not a player in the way.
                For I = 1 To MAX_PLAYERS
                    If IsPlaying(I) Then
                        If GetPlayerMap(I) = MapNum Then
                            If GetPlayerX(I) = MapNPC(MapNum, MapNpcNum).X Then
                                If GetPlayerY(I) = (MapNPC(MapNum, MapNpcNum).Y - 1) Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I

                ' Check to make sure that there is not another npc in the way.
                For I = 1 To MAX_MAP_NPCS
                    If I <> MapNpcNum Then
                        If MapNPC(MapNum, I).num > 0 Then
                            If MapNPC(MapNum, I).X = MapNPC(MapNum, MapNpcNum).X Then
                                If MapNPC(MapNum, I).Y = (MapNPC(MapNum, MapNpcNum).Y - 1) Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I
            Else
                CanNpcMove = False
            End If

        Case DIR_DOWN
            If Y < MAX_MAPY Then
                ' Get the attribute on the tile.
                TileType = Map(MapNum).Tile(X, Y + 1).Type
               
                ' Check to make sure that the tile is walkable.
                If TileType = TILE_TYPE_BLOCKED Or TileType = TILE_TYPE_NPCAVOID Or TileType = TILE_TYPE_WARP Then
                    CanNpcMove = False
                    Exit Function
                End If

                ' Check to make sure that there is not a player in the way.
                For I = 1 To MAX_PLAYERS
                    If IsPlaying(I) Then
                        If GetPlayerMap(I) = MapNum Then
                            If GetPlayerX(I) = MapNPC(MapNum, MapNpcNum).X Then
                                If GetPlayerY(I) = (MapNPC(MapNum, MapNpcNum).Y + 1) Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I

                ' Check to make sure that there is not another npc in the way.
                For I = 1 To MAX_MAP_NPCS
                    If I <> MapNpcNum Then
                        If MapNPC(MapNum, I).num > 0 Then
                            If MapNPC(MapNum, I).X = MapNPC(MapNum, MapNpcNum).X Then
                                If MapNPC(MapNum, I).Y = (MapNPC(MapNum, MapNpcNum).Y + 1) Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I
            Else
                CanNpcMove = False
            End If

        Case DIR_LEFT
            If X > 0 Then
                ' Get the attribute on the tile.
                TileType = Map(MapNum).Tile(X - 1, Y).Type

                ' Check to make sure that the tile is walkable.
                If TileType = TILE_TYPE_BLOCKED Or TileType = TILE_TYPE_NPCAVOID Or TileType = TILE_TYPE_WARP Then
                    CanNpcMove = False
                    Exit Function
                End If

                ' Check to make sure that there is not a player in the way.
                For I = 1 To MAX_PLAYERS
                    If IsPlaying(I) Then
                        If GetPlayerMap(I) = MapNum Then
                            If GetPlayerX(I) = (MapNPC(MapNum, MapNpcNum).X - 1) Then
                                If GetPlayerY(I) = MapNPC(MapNum, MapNpcNum).Y Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I

                ' Check to make sure that there is not another npc in the way.
                For I = 1 To MAX_MAP_NPCS
                    If I <> MapNpcNum Then
                        If MapNPC(MapNum, I).num > 0 Then
                            If MapNPC(MapNum, I).X = (MapNPC(MapNum, MapNpcNum).X - 1) Then
                                If MapNPC(MapNum, I).Y = MapNPC(MapNum, MapNpcNum).Y Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I
            Else
                CanNpcMove = False
            End If

        Case DIR_RIGHT
            If X < MAX_MAPX Then
                ' Get the attribute on the tile.
                TileType = Map(MapNum).Tile(X + 1, Y).Type
               
                ' Check to make sure that the tile is walkable.
                If TileType = TILE_TYPE_BLOCKED Or TileType = TILE_TYPE_NPCAVOID Or TileType = TILE_TYPE_WARP Then
                    CanNpcMove = False
                    Exit Function
                End If

                ' Check to make sure that there is not a player in the way.
                For I = 1 To MAX_PLAYERS
                    If IsPlaying(I) Then
                        If GetPlayerMap(I) = MapNum Then
                            If GetPlayerX(I) = (MapNPC(MapNum, MapNpcNum).X + 1) Then
                                If GetPlayerY(I) = MapNPC(MapNum, MapNpcNum).Y Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I

                ' Check to make sure that there is not another npc in the way.
                For I = 1 To MAX_MAP_NPCS
                    If I <> MapNpcNum Then
                        If MapNPC(MapNum, I).num > 0 Then
                            If MapNPC(MapNum, I).X = (MapNPC(MapNum, MapNpcNum).X + 1) Then
                                If MapNPC(MapNum, I).Y = MapNPC(MapNum, MapNpcNum).Y Then
                                    CanNpcMove = False
                                    Exit Function
                                End If
                            End If
                        End If
                    End If
                Next I
            Else
                CanNpcMove = False
            End If
    End Select
End Function





~Créditos~
Pablo
Em caso de dúvidas reporte aqui no Tópico!.

Obs: Provavelmente também funciona no Elysium.


Última edição por Pablo em Sex 29 Mar 2013, 09:28, editado 1 vez(es)
Pablo
Pablo
Moderador Global
Moderador Global

Mensagens : 1371

Ir para o topo Ir para baixo

Blocked Npc Warp Empty Re: Blocked Npc Warp

Mensagem por LegendaryAngel Sex 29 Mar 2013, 09:26

Ótimo tutorial pablo parabéns +1,irei testar.

avatar
LegendaryAngel
Membro Veterano
Membro Veterano

Mensagens : 810

Ir para o topo Ir para baixo

Blocked Npc Warp Empty Re: Blocked Npc Warp

Mensagem por GuiinhoLP Sex 29 Mar 2013, 15:10

Muito bom Pablo u.u

Vou Usar õ/ õ/
GuiinhoLP
GuiinhoLP
Membro Sênior
Membro Sênior

Mensagens : 257

Ir para o topo Ir para baixo

Blocked Npc Warp Empty Re: Blocked Npc Warp

Mensagem por Frozen Sex 29 Mar 2013, 15:23

Ótimo tutorial agora para encher y.ý + 1 Crédito
Frozen
Frozen
Membro Veterano
Membro Veterano

Mensagens : 1339

Ir para o topo Ir para baixo

Blocked Npc Warp Empty Re: Blocked Npc Warp

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos