NPC de Teletransporte Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

NPC de Teletransporte

4 participantes

Ir para baixo

NPC de Teletransporte Empty NPC de Teletransporte

Mensagem por Hashirama Qua Mar 28, 2018 8:07 pm

Fala galera, hoje venho trazer um sistema que muitos procuraram, e como estou estudando e aprendendo sistemas, resolvi criar esse, o tutorial é um pouco grande e pode conter algum erro, o sistema eu testei e funciona 100%. O que ele faz?
você pode criar um npc com opção de abrir Teleporte, ai quando vc fala com esse npc que tem a opção vai abrir a janela com os teletransportes que você criou.

Amostra
NPC de Teletransporte 29750616_1650394545051949_1810683449_n

Vamos lá
Primeira mente vamos criar o pacote que vai enviar do client para o servidor o teletransporte
Server side
No ModEnumerations acima de 
Código:
' Make sure CMSG_COUNT is below everything else
    CMSG_COUNT
adicione :
Código:
CWarpPlayer
agora no modHandleData na Public Sub InitMessages() antes do end sub adicione
Código:
HandleDataSub(CWarpPlayer) = GetAddress(AddressOf HandleWarpPlayer)
agora no final do modHandleData adicione
Código:
Sub HandleWarpPlayer(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
    Dim n As Long
    Dim MapX As Long
    Dim MapY As Long
    Dim Buffer As clsBuffer
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()

    ' The map
    n = Buffer.ReadLong 'CLng(Parse(1))
    MapX = Buffer.ReadLong 'CLng(Parse(1))
    MapY = Buffer.ReadLong 'CLng(Parse(1))
    Set Buffer = Nothing

    ' Prevent hacking
    If n < 0 Or n > MAX_MAPS Then
        Exit Sub
    End If
    
    If MapX > Map(n).MaxX Then
        Exit Sub
    End If
    
    If MapY > Map(n).MaxY Then
        Exit Sub
    End If
    
    If MapX > 0 And MapY > 0 Then
       Call PlayerWarp(index, n, MapX, MapY)
       Call PlayerMsg(index, "Você foi para o  mapa:" & n, BrightBlue)
    Else
       Call PlayerWarp(index, n, GetPlayerX(index), GetPlayerY(index))
       Call PlayerMsg(index, "Você foi teleporta para o mapa: " & Trim$(Map(n).Name), BrightGreen)
    End If
End Sub

Feito isso ja temos nosso comando de teleporte que indica o mapa, mapa x, mapa y

agora vamos para o client

Client Side
no final do modClienTCP adicione
Código:
Public Sub WarpPlayer(ByVal MapNum As Long, Optional ByVal MapX As Long, Optional ByVal MapY As Long)
Dim Buffer As clsBuffer

    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler
    
    Set Buffer = New clsBuffer
    Buffer.WriteLong CWarpPlayer
    Buffer.WriteLong MapNum
    Buffer.WriteLong MapX
    Buffer.WriteLong MapY
    SendData Buffer.ToArray()
    Set Buffer = Nothing
    
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "WarpPlayer", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

agora no modEnumerations acima de 
Código:
' Make sure CMSG_COUNT is below everything else
    CMSG_COUNT
adicione
Código:
CWarpPlayer

Pronto ja temos nosso comando que vai chamar o mapa pelo code Call WarpPlayer (x,x,x) ' mapa, cordenadaX, cordenadaY

Agora vamos criar o sistema que vai fazer que quando você falar com o NPC vai abrir a janela com os teletransportes

Server Side


no modTypes dentro da Public Type TempPlayerRec antes do end type adicione
Código:
InTele As Long
dentro da NPCRec antes do end type adicione
Código:
NPCTele As Byte

na modEnumerations acima de 
Código:
' Make sure SMSG_COUNT is below everything else
    SMSG_COUNT
adicione 
Código:
SOpenTele

agora no modCombat na procedure CanPlayerAttackNpc acima de 
Código:
If Len(Trim$(Npc(npcnum).AttackSay)) > 0 Then
adicione
Código:
' Abrir NPC Teleporte
                      If Npc(npcnum).NPCTele > 0 Then
                       Call SendOpenTele(attacker, Npc(npcnum).NPCTele)
                        End If

agora no modHandleData na HandlePlayerMove abaixo de:
Código:
' Prever player from moving if in shop
    If TempPlayer(index).InShop > 0 Then
        Call SendPlayerXY(index)
        Exit Sub
    End If

adicione
Código:
' Prever player from moving if in tele
    If TempPlayer(index).InTele > 0 Then
        Call SendPlayerXY(index)
        Exit Sub
    End If
isso fara que quando abrir a janela de teletransporte vc não possa se mexer, isso evita que o jogar abra a janela de tele e saia com ela, podendo usar o teletransporte quando quiser
agora no final do serverTCP adicione
Código:
Sub SendOpenTele(ByVal index As Long, ByVal npcnum As Long)
    Dim Buffer As clsBuffer
    
    Set Buffer = New clsBuffer
    Buffer.WriteLong SOpenTele
    Buffer.WriteLong npcnum
    SendDataTo index, Buffer.ToArray()
    
    Set Buffer = Nothing
End Sub

Pronto agora o vamos voltar ao client

Client Side
agora no modHandleData na sub initmessages abaixo de
Código:
HandleDataSub(CWarpPlayer) = GetAddress(AddressOf HandleWarpPlayer)
adicione
Código:
HandleDataSub(SOpenTele) = GetAddress(AddressOf HandleOpenTele)

no final do HandleData adicione
Código:
Private Sub HandleOpenTele(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim Buffer As clsBuffer
Dim npcNum As Long

    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler
    
    Set Buffer = New clsBuffer
    Buffer.WriteBytes Data()
    
    npcNum = Buffer.ReadLong
    
    Set Buffer = Nothing
    
    OpenTele npcNum
    
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "HandleOpenTele", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

agora no modTypes na Private Type NpcRec antes do end type adicione
Código:
NPCTele As Byte

agora no ModGameLogic na procedure CanMove abaixo de 
Código:
' make sure they're not in a shop
    If InShop > 0 Then
        CanMove = False
        Exit Function
    End If
adicione
Código:
' make sure they're not in a tele
    If InTele > 0 Then
        CanMove = False
        Exit Function
    End If
no final do ModGameLogic adicione
Código:
Public Sub OpenTele(ByVal npcNum As Long)
    ' If debug mode, handle error then exit out
    If Options.Debug = 1 Then On Error GoTo errorhandler
    
    InTele = npcNum
    frmMain.picTele.Visible = True
    
    ' Error handler
    Exit Sub
errorhandler:
    HandleError "OpenTele", "modGameLogic", Err.Number, Err.Description, Err.Source, Err.HelpContext
    Err.Clear
    Exit Sub
End Sub

agora na frmEditor_NPC crie um checkBox e na propriet Name coloque chkTele
NPC de Teletransporte Unknown
de 2 clicks no chkTele e adicione o code
Código:
If chkTele.Value = 0 Then
        Npc(EditorIndex).NPCTele = False
    Else
        Npc(EditorIndex).NPCTele = True
    End If

sempre que quiser que um npc abra o teletransporte basta deixar o chkBox ativado, assim o npc fica como teletransporte
agora no final do ModGlobal adicione
Código:
Public InTele As Long
agora na Sub GameInit()
abaixo de 
Código:
InTrade = False
adicione
Código:
InTele = True

agora na modGameEditors em baixo de 
Código:
.txtDamage.text = Npc(EditorIndex).Damage
adicione
Código:
If Npc(EditorIndex).NPCTele Then
            .chkTele.Value = 1
        Else
            .chkTele.Value = 0
        End If

Feito galera, agora vamos criar nossa picture que vai ser nossa janela de teletransporte, vcs podem criar quantas teletransportes que quiserem, alem disso vcs pode criar uma imagem grande com varias imagens de cidades, cada click na cidade e um teletransporte, isso vai da imaginação de vocês, agora para o tutorial podem usar meu exemplo de pic
NPC de Teletransporte Unknown

vc precisa criar uma picture na frmMain dentro da picScreen
nela vc adiciona 4 labels, cada label vai ser um teletransporte segue o exemplo
NPC de Teletransporte Unknown
Obs: crie a primeira label renomeia a propriet Name para lblTele, quando criar a segundo você cria ela com o msm nome e vai aparecer
NPC de Teletransporte Unknown

clique no sim, isso fara que gere um numero de Index para cada lblTele
de 2 clicks e qualquer uma das label que vc criou e adicione
Código:
'Observação cade Case vai correspodenr ao indice da label que vc criou
Select Case Index
    Case 0
       Call WarpPlayer(2, 5, 5) '(id do mapa, cordenada X, cordenada Y) e o Call WarpPlayer e o code que chama o teletransporte
       picTele.Visible = False
    Case 1
        Call WarpPlayer(3, 5, 5)
       picTele.Visible = False
       InTele = 0
    Case 2
       Call WarpPlayer(4, 5, 5)
       picTele.Visible = False
       InTele = 0
    Case 3 ' teleporte que fecha a janela e cancela o InTele
       picTele.Visible = False
       InTele = 0
    'caso queira criar outros teletransportes basta adicionar Case 4 e o msm codigo que chama o mapa
    End Select

Pronto galera, vcs podem criar qualquer comando de teletransporte usando Call WarpPlayer( numero do mapa, coordenada X, coordenada Y) exemplo Call WarpPlayer (2, 5, 5) vai para o mapa 2 e na coordenada 5, 5
vcs tmb em vez da label pode se fazer com buttons, e isso galera. qualquer duvida poste aqui que irei ajudar. e qualquer erro também, abraços

Importante, a picture tem que ter como propriet Name PicTele

_________________
Apoia nosso projeto? use nossa assinatura
Hashirama
Hashirama
Membro de Honra
Membro de Honra

Mensagens : 413
Créditos : 133

Ir para o topo Ir para baixo

NPC de Teletransporte Empty Re: NPC de Teletransporte

Mensagem por Valentine Qui Mar 29, 2018 7:43 am

Obrigado por compartilhar I love you
Valentine
Valentine
Administrador
Administrador

Medalhas : NPC de Teletransporte ZgLkiRU
Mensagens : 5343
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

NPC de Teletransporte Empty Re: NPC de Teletransporte

Mensagem por OFWGKTA Qui Mar 29, 2018 2:17 pm

Recomendado

_________________
NPC de Teletransporte 112898
EVANGELION 
OFWGKTA
OFWGKTA
Experiente
Experiente

Mensagens : 408
Créditos : 27

Ficha do personagem
Nível: 1
Experiência:
NPC de Teletransporte Left_bar_bleue5/50NPC de Teletransporte Empty_bar_bleue  (5/50)
Vida:
NPC de Teletransporte Left_bar_bleue30/30NPC de Teletransporte Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

NPC de Teletransporte Empty Re: NPC de Teletransporte

Mensagem por Mizuki Qui Ago 09, 2018 2:22 pm

então fiz aqui aparentemente nao deu erro nenhum porem eu crio o npc e tal e nao aparece a janela a pic cono resolvo isso ??


edit consegui porem ta faltando uma coisinha ai mano

falto isso no cliente       SOpenTele 


espero ter ajudado
Mizuki
Mizuki
Iniciante
Iniciante

Mensagens : 30
Créditos : 4

Ficha do personagem
Nível: 1
Experiência:
NPC de Teletransporte Left_bar_bleue0/0NPC de Teletransporte Empty_bar_bleue  (0/0)
Vida:
NPC de Teletransporte Left_bar_bleue30/30NPC de Teletransporte Empty_bar_bleue  (30/30)

https://www.facebook.com/DBZSayanfury/

Ir para o topo Ir para baixo

NPC de Teletransporte Empty Re: NPC de Teletransporte

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