Bem vindo visitante.
Caso ainda não tenha uma conta,pedimos para que crie uma,assim você terá acesso a todos os links e imagens disponíveis no fórum.

Você não está conectado. Conecte-se ou registre-se

Mini Mapa

Ir em baixo  Mensagem [Página 1 de 1]

1Normal Mini Mapa em Sex Fev 17, 2012 12:53 pm

Ricardo

avatar
Moderador Local
Moderador Local
Começando

Primeiro baixe o arquivo abaixo na sua pasta \data files\graphics com nome minimap e verifique se o arquivo está salvo em bmp.

[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver este link.]

Descrição

Esse é um Minimap beta que apenas mostra os bloqueios, os npcs e os players. Olhei em vários fóruns 3 tipos de minimaps e todos eles tinham que criar um tipo novo de tile chamado Blank ,que no português significa branco, para deixar um pedaço do minimap branco para saber que não havia nada em certo lugar, então resolvi criar um novo modo para que a opção não fosse usado e ficasse mais simples, fiz o código para criar em todo o minimap essa parte branca e após disso criar as outras camadas do minimap para que elas não se desenhem em baixo do blank.

Log

Ícone branco quando não houver nada no mapa.
Ícone que mostra os jogadores que estão presentes no mapa.
Ícone que mostra os npcs que estão no mapa.
Ícone que mostra os bloqueios do mapa.
Ícone diferente para jogadores killers.
Ícone que mostra os teletransporte do mapa.
Ícone que mostra os itens do mapa.
Ícone que mostra as lojas do mapa sendo por atributo e sendo por npc.
Ícone diferente para cada tipo de npc.


Imagem

[Você precisa estar registrado e conectado para ver esta imagem.]

Client~side

modDirectDraw7

Procure por:

Código:
    ' Render the bars
    BltBars

Abaixo adicione:

Código:
    ' minimap
    If Options.Minimap = 1 Then BltMiniMap

Procure por:

Código:
Public DDS_Bars As DirectDrawSurface7

Abaixo adicione:

Código:
Public DDS_MiniMap As DirectDrawSurface7

Procure por:

Código:
Public DDSD_Bars As DDSURFACEDESC2

Abaixo adicione:

Código:
Public DDSD_MiniMap As DDSURFACEDESC2

Procure por:

Código:
    If FileExist(App.Path & "\data files\graphics\bars.bmp", True) Then Call InitDDSurf("bars", DDSD_Bars, DDS_Bars)

Abaixo adicione:

Código:
    If FileExist(App.Path & "\data files\graphics\minimap.bmp", True) Then Call InitDDSurf("minimap", DDSD_MiniMap, DDS_MiniMap)

Procure por:

Código:
    Set DDS_Target = Nothing
    ZeroMemory ByVal VarPtr(DDSD_Target), LenB(DDSD_Target)

Abaixo adicione:

Código:
    Set DDS_MiniMap = Nothing
    ZeroMemory ByVal VarPtr(DDSD_MiniMap), LenB(DDSD_MiniMap)

No final do modulo adicione:

Código:
Sub BltMiniMap()
Dim i As Long
Dim X As Integer, Y As Integer
Dim Direction As Byte
Dim CameraX As Long, CameraY As Long
Dim BlockRect As RECT, WarpRect As RECT, ItemRect As RECT, ShopRect As RECT, NpcOtherRect As RECT, PlayerRect As RECT, PlayerPkRect As RECT, NpcAttackerRect As RECT, NpcShopRect As RECT, NadaRect As RECT
Dim MapX As Long, MapY As Long

    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler

    MapX = Map.MaxX
    MapY = Map.MaxY
   
    ' ************
    ' *** Nada ***
    ' ************
    With NadaRect
        .top = 4
        .Bottom = .top + 4
        .Left = 0
        .Right = .Left + 4
    End With
   
    ' Defini-lo no minimap
    For X = 0 To MapX
        For Y = 0 To MapY
            CameraX = Camera.Left + 650 + (X * 4)
            CameraY = Camera.top + 25 + (Y * 4)
            Engine_BltFast CameraX, CameraY, DDS_MiniMap, NadaRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
        Next Y
    Next X

    ' *****************
    ' *** Atributos ***
    ' *****************
   
    ' Bloqueio
    With BlockRect
        .top = 4
        .Bottom = .top + 4
        .Left = 4
        .Right = .Left + 4
    End With
   
    ' Warp
    With WarpRect
        .top = 4
        .Bottom = .top + 4
        .Left = 8
        .Right = .Left + 4
    End With
   
    ' Item
    With ItemRect
        .top = 4
        .Bottom = .top + 4
        .Left = 12
        .Right = .Left + 4
    End With
   
    ' Shop
    With ShopRect
        .top = 4
        .Bottom = .top + 4
        .Left = 16
        .Right = .Left + 4
    End With
   
    ' Defini-los no minimap
    For X = 0 To MapX
        For Y = 0 To MapY
            Select Case Map.Tile(X, Y).Type
                Case TILE_TYPE_BLOCKED
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Engine_BltFast CameraX, CameraY, DDS_MiniMap, BlockRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
                Case TILE_TYPE_WARP
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Engine_BltFast CameraX, CameraY, DDS_MiniMap, WarpRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
                Case TILE_TYPE_ITEM
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Engine_BltFast CameraX, CameraY, DDS_MiniMap, ItemRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
                Case TILE_TYPE_SHOP
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Engine_BltFast CameraX, CameraY, DDS_MiniMap, ShopRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
            End Select
        Next Y
    Next X

    ' **************
    ' *** Player ***
    ' **************
   
    ' Normal
    With PlayerRect
        .top = 0
        .Bottom = .top + 4
        .Left = 4
        .Right = .Left + 4
    End With
   
    ' Pk
    With PlayerPkRect
        .top = 0
        .Bottom = .top + 4
        .Left = 8
        .Right = .Left + 4
    End With
   
    ' Defini-los no minimap
    For i = 1 To Player_HighIndex
        If IsPlaying(i) Then
            Select Case Player(i).PK
                Case 0
                    X = Player(i).X
                    Y = Player(i).Y
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Call DDS_BackBuffer.BltFast(CameraX, CameraY, DDS_MiniMap, PlayerRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
                Case 1
                    X = Player(i).X
                    Y = Player(i).Y
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Call DDS_BackBuffer.BltFast(CameraX, CameraY, DDS_MiniMap, PlayerPkRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
            End Select
        End If
    Next i
   
    ' ***********
    ' *** NPC ***
    ' ***********
   
    ' Atacar ao ser atacado e quando for atacado
    With NpcAttackerRect
        .top = 0
        .Bottom = .top + 4
        .Left = 12
        .Right = .Left + 4
    End With

    ' Vendendor
    With NpcShopRect
        .top = 0
        .Bottom = .top + 4
        .Left = 16
        .Right = .Left + 4
    End With
   
    ' Outros
    With NpcOtherRect
        .top = 0
        .Bottom = .top + 4
        .Left = 20
        .Right = .Left + 4
    End With
   
    ' Defini-lo no minimap
    For i = 1 To Npc_HighIndex
        If MapNpc(i).num > 0 Then
            Select Case NPC(i).Behaviour
                Case NPC_BEHAVIOUR_ATTACKONSIGHT Or NPC_BEHAVIOUR_ATTACKWHENATTACKED
                    X = MapNpc(i).X
                    Y = MapNpc(i).Y
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Call DDS_BackBuffer.BltFast(CameraX, CameraY, DDS_MiniMap, NpcAttackerRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
                Case NPC_BEHAVIOUR_SHOPKEEPER
                    X = MapNpc(i).X
                    Y = MapNpc(i).Y
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Call DDS_BackBuffer.BltFast(CameraX, CameraY, DDS_MiniMap, NpcShopRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
                Case Else
                    X = MapNpc(i).X
                    Y = MapNpc(i).Y
                    CameraX = Camera.Left + 650 + (X * 4)
                    CameraY = Camera.top + 25 + (Y * 4)
                    Call DDS_BackBuffer.BltFast(CameraX, CameraY, DDS_MiniMap, NpcOtherRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)
            End Select
        End If
    Next i
   
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "BltMiniMap", "modDirectDraw7", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

frmMain

Dentro da picOptions crie uma label com o seguinte caption:

MiniMap

Agora crie uma pictureBox com qualquer nome e dentro dela adicione 2 optionsBox com as seguintes configurações:

OptionBox1
Name: optMiniMapOn
Caption: On

OptionBox2
Name: optMiniMapOff
Caption: Off

Dentro do optMiniMapOn adicione:

Código:
    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler
   
    Options.Minimap = 1
    SaveOptions
 
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "optMiniMapOn_Click", "frmMain", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub

E dentro do optMiniMapOff adicione:

Código:
    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler

    Options.Minimap = 0
    SaveOptions
 
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "optMiniMapOff_Click", "frmMain", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub

modTypes

No final da Private Type OptionsRec, antes do End type, adicione:

Código:
    Minimap As Byte

modDatabase

Procure por:

Código:
    Call PutVar(fileName, "Options", "Debug", Str(Options.Debug))

Abaixo adicione:

Código:
    Call PutVar(fileName, "Options", "MiniMap", Str(Options.Minimap))

Procure por:

Código:
        Options.Debug = 0

Abaixo adicione:

Código:
        Options.Minimap = 1

Procure por:

Código:
        Options.Debug = GetVar(fileName, "Options", "Debug")

Abaixo adicione:

Código:
        Options.Minimap = GetVar(fileName, "Options", "MiniMap")

Procure por:

Código:
    If Options.Sound = 0 Then
        frmMain.optSOff.Value = True
    Else
        frmMain.optSOn.Value = True
    End If

Abaixo adicione:

Código:
    If Options.Minimap = 0 Then
        frmMain.optMiniMapOff.Value = True
    Else
        frmMain.optMiniMapOn.Value = True
    End If

Agora é só ir em \data files\ e deletar o arquivo config.ini

Créditos:

Ricardo

Ver perfil do usuário

2Normal Re: Mini Mapa em Seg Fev 20, 2012 10:42 pm

wyvern670

avatar
Iniciante
Iniciante
Ótimo tutorial ricardo! eu consegui colocar no meu EO Very Happy graças a vc Razz

Ver perfil do usuário

Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum