Suporte ao desenvolvimento de jogos!


    [Prof ~] Adicionando Elementos em Equipamentos

    Compartilhe
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 728
    Créditos : 125

    [Prof ~] Adicionando Elementos em Equipamentos

    Mensagem por Profane ~ em Sex Maio 20, 2016 4:22 pm

    Elementos e Resistências


    ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
    '                                Esclarecimentos                         '
    ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'

    Do que se trata esse Sistema/Tutorial?
    > Ao adicionar isto em seu jogo, você terá a base de um sistema de elementos/resistências setados nos equipamentos de Jogadores.

    Mas como isso irá agir?
    > Serão variáveis que intervirão no combate. Inicialmente colocado no PvP (Player vs Player)

    Caso eu tenha um bom retorno e pedidos neste post, poderei estender  o tutorial para incrementar no PvE (Player versus Environment) - Nada mais que Jogadores contra Monstros.

    Será bom adicionar isso ao meu Jogo?
    > É uma boa adição pela questão da "diversidade", poderia ser aplicado para diversas áreas e modalidades, como biomas, monstros, locais, armas, e todo o ululu que resta.

    Pode me dar exemplos?
    > Claro  ~ Você poderá adicionar diversos elementos como :
    - Dano de Fogo
    - Dano de Gelo
    - Dano de Raio
    - Dano Sombrio
    - Dano Verdadeiro

    - Resistência a Fogo
    - Resistência ~~~

    Cabe a você, nomear e decidir como irá fazer o uso, da variável.




    ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
    '                                Ficha Técnica                               '
    ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'

    -> Nível de Programação: Básico
    -> Programas necessários: Visual Basic 6
    -> Engine Base: EO 2.0 (Eclipse Origins 2.0)
    -> Compatibilidade com outras Engines? [X] Total    [X] Sim    [ ] Não

    ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'
    '                               Ao Tutorial                                 '
    ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'



    - Client Side



    0.1 - Criando nossa nova Classe; E nossos futuros Elementos.
    Spoiler:
    Bom, para inicio, eu estarei criando uma base, usando este tutorial você será capaz de criar qualquer outro elemento. Bastando analisar como se é feito. Iniciarei com 1 Elemento Base;

    Será o Elemento Fogo.

    Estarei tentando deixar da forma mais simples para que entendam a lógica. Normalmente faríamos de outras maneiras, buscando economizar o máximo de memória, mas o gasto em si é mínimo.


    0.2 - Adicionando as Variáveis nos Itens.

    Spoiler:
    Aqui vamos adicionar a capacidade dos itens guardarem nossos valores de elemento. Vamos ao trabalho.

    Ainda no ModTypes, procure por:

    Código:
    Private Type ItemRec

    Dentro dele, abaixo de:
    Código:
        instaCast As Byte

    Adicione:
    Código:
        'Elements - Prof ~
        FogoAtk As Long
        FogoDef As Long

    0.3 - Editor de Itens, adicionando a barra de elementos.

    Spoiler:
    Aqui modificaremos o Editor de Itens, para que ele possa dar valores as Variaveis dos Itens/Equips.

    Vá ao FrmEditor_Item ;  Abra ele e vamos criar alguns componentes.

    Vamos deixar as coisinhas bonitinhas, como eu sempre gosto.

    Crie os seguintes componentes:

    • 1 Frame (Coloque o Name: frmElements)
    • 2 HScrollsBar (Coloque o Name: scrlFogoAtk // scrlFogoDef)
    • 2 Label (Coloque o Name: lblFogoAtk // lblFogoDef)


    Em meu projeto, deixei da seguinte forma:

    [center]

    https://i.imgur.com/G2Ztxr1.png

    Feito isso, vamos a parte da programaçãozinha e mecânicas ><!

    0.4 - Pondo as coisas para funcionar, e salvar valores no Editor.
    Spoiler:

    Clique duas vezes no ScrlFogoAtk, seria o Scroll que está em cima; E adicione isto:
    Código:
    ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler
        If EditorIndex = 0 Then Exit Sub
        
        lblFogoAtk.Caption = " Fogo Atk: " & scrlFogoAtk
        Item(EditorIndex).FogoAtk = scrlFogoAtk.Value
        
        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "scrlFogoAtk_Change", "frmEditor_Item", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub

    Dentro do Scroll de Def, no caso o scrlFogoDef; Clique duas vezes nele e adicione isto:

    Código:
    ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler
        If EditorIndex = 0 Then Exit Sub
        
        lblFogoDef.Caption = " Fogo Def: " & scrlFogoDef
        Item(EditorIndex).FogoDef = scrlFogoDef.Value
        
        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "scrlFogoDef_Change", "frmEditor_Item", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub

    Fique atento a mudança nos nomes. Quando você for regerar ou criar novos elementos, mude todos os nomes bases para o nome a qual você adicionou. Caso não tenha feito exatamente igual ao nome das Classes e Variáveis a qual adicionou no ModTypes, você terá problemas.

    Procure o Componente: cmbType
    É um ComboList, que ao clicar você seleciona qual o tipo de Item aquele item será;

    Procure por Isso aqui:
    Código:
     If (cmbType.ListIndex >= ITEM_TYPE_WEAPON) And (cmbType.ListIndex <= ITEM_TYPE_SHIELD) Then
            fraEquipment.Visible = True
            'scrlDamage_Change
        Else
            fraEquipment.Visible = False
        End If

    Substitua por isso aqui:

    Código:

        If (cmbType.ListIndex >= ITEM_TYPE_WEAPON) And (cmbType.ListIndex <= ITEM_TYPE_SHIELD) Then
            fraEquipment.Visible = True
            frmElements.Visible = True
            'scrlDamage_Change
        Else
            fraEquipment.Visible = False
            frmElements.Visible = False
        End If

    Apenas adicionei para que nossa Frame de Elements aparece apenas quando o Item em questão for um Equipamento. Vamos continuar.

    Agora ~ Vá ao ModGameEditors; Procure por:

    Código:
    Public Sub ItemEditorInit()

    Dentro dele procure por:

    Código:
    ' Type specific settings
            If (frmEditor_Item.cmbType.ListIndex >= ITEM_TYPE_WEAPON) And (frmEditor_Item.cmbType.ListIndex <= ITEM_TYPE_SHIELD) Then
                frmEditor_Item.fraEquipment.Visible = True
                frmEditor_Item.scrlDamage.Value = .Data2
                frmEditor_Item.cmbTool.ListIndex = .Data3

                If .Speed < 100 Then .Speed = 100
                frmEditor_Item.scrlSpeed.Value = .Speed
                
                ' loop for stats
                For i = 1 To Stats.Stat_Count - 1
                    frmEditor_Item.scrlStatBonus(i).Value = .Add_Stat(i)
                Next
                
                frmEditor_Item.scrlPaperdoll = .Paperdoll
            Else
                frmEditor_Item.fraEquipment.Visible = False
            End If

    Essas linhas cuidam da leitura de caso o item seja um Equipamento. Abaixo do :
    Código:
    frmEditor_Item.cmbTool.ListIndex = .Data3

    Adicionem:

    Código:
      frmEditor_Item.scrlFogoAtk.Value = .FogoAtk
      frmEditor_Item.scrlFogoDef.Value = .FogoDef

    Pronto. Agora nosso editor na área do client, já irá ao abrir o item, adicionar os valores das variáveis ao nosso equipamento.

    Server-Side

    0.1 - Adicionando as Variaveis no Servidor
    [/center]
    Spoiler:

    Vá ao ModTypes, dentro do seu Server. Procure por :
    Vamos aos Itens:

    no ModTypes, procure por:

    Código:
    Private Type ItemRec

    Dentro dele, abaixo de:
    Código:
       instaCast As Byte

    Adicione:
    Código:
       'Elements - Prof ~
        FogoAtk As Long
        FogoDef As Long

    Variáveis prontas. Agora, vamos a parte de programar a batalha.

    0.2  - Alteração em Combate - ATK
    Spoiler:

    Vá ao ModCombat, obvio que dentro do Server; Procure por:

    Código:
    Function GetPlayerDamage(ByVal index As Long) As Long

    Abaixo dessa function, após o End Fuction dela, vamos criar uma Duas Funções, elas serão responsáveis por Lerem o Dano Adicional Elemental e por Resistir ao Dano Elemental adicional.

    Adicione isso:
    Código:
    Function GetPlayerElementAtk(ByVal index As Long) As Long
    Dim weaponNum As Long
    Dim FogoAtk As Long

    GetPlayerElementAtk = 0
    FogoAtk = 0

        ' Check for subscript out of range
        If IsPlaying(index) = False Or index <= 0 Or index > MAX_PLAYERS Then
            Exit Function
        End If
       
        'Verifica se o Player está usando Arma
        If GetPlayerEquipment(index, Weapon) > 0 Then
            weaponNum = GetPlayerEquipment(index, Weapon) 'da o valor da Arma para o Jogador
                If Item(weaponNum).FogoAtk > 0 Then 'Verifica se tem adicional de Dano Elemental de Fogo
                    FogoAtk = Item(weaponNum).FogoAtk
                End If
        End If
       
        If FogoAtk > 0 Then
            GetPlayerElementAtk = FogoAtk 'Da o valor da Function para o Dano de Fogo Atk.
        End If


    End Function

    Essa Function eh feita de forma única. Para adicionar mais variaveis dentro dela, você terá de fazer algumas modificações. Isso eu poderei mostrar em um pós-bonus ao tutorial.

    Ainda dentro do ModCombat procure por:

    Código:
    Public Sub TryPlayerAttackPlayer(ByVal attacker As Long, ByVal victim As Long)

    Eh a Sub responsável por calcular o dano do Player, em cima de outro jogador ;c

    Vamos lá.

    Dentro dela procure por:

    Código:
    Damage = GetPlayerDamage(attacker)

    Substitua por :

    Código:
    Damage = GetPlayerDamage(attacker) + GetPlayerElementAtk(attacker)

    Assim, ele adicionará o valor elemental ao dano do jogador contra outro jogador.

    0.3 -  Alterando Combate - Def
    Spoiler:


    Em nosso ModCombat, vamos criar outra Function. De preferência abaixo da GetPlayerElementAtk.

    Procure por:


    Código:
    Function GetPlayerDamage(ByVal index As Long) As Long

    Abaixo do End Function, adicione isto:


    Código:
    Function GetPlayerElementDef(ByVal index As Long) As Long
    Dim weaponNum As Long
    Dim FogoDef As Long

    GetPlayerElementDef = 0
    FogoDef = 0

        ' Check for subscript out of range
        If IsPlaying(index) = False Or index <= 0 Or index > MAX_PLAYERS Then
            Exit Function
        End If
       
        'Verifica se o Player está usando Arma
        If GetPlayerEquipment(index, Weapon) > 0 Then
            weaponNum = GetPlayerEquipment(index, Weapon) 'da o valor da Arma para o Jogador
                If Item(weaponNum).FogoDef > 0 Then 'Verifica se tem adicional de Def Elemental de Fogo
                    FogoDef = Item(weaponNum).FogoDef
                End If
        End If
       
        If FogoDef > 0 Then
            GetPlayerElementDef = FogoDef 'Da o valor da Function para  Fogo Def.
        End If


    End Function

    No ModCombat procure por:


    Código:
    Public Sub TryPlayerAttackPlayer(ByVal attacker As Long, ByVal victim As Long)

    Dentro dele, procure por:



    Código:
    Damage = GetPlayerDamage(attacker)



    Abaixo adicione:


    Código:
     If GetPlayerElementAtk(attacker) > 0 Then 'Analisa se o Atacante tem dano elemental
                Damage = Damage - GetPlayerElementDef(victim) 'adiciona a Resistência elemental contra o ataque
     End If
           

    Pronto.



    Com isso, você tem elementos em seu combate PVP. Com uma pequena modificação, você pode adicionar isso a monstros xD use sua criatividade.

    Caso tenham problemas, me informem; Tópico tendo um bom retorno em uso, eu aprimoro. Aqueles que tiverem vontade de maiores modificações postem ou mandem PM que ajudo.

    Isso é apenas algo infimo, e que pode ser trabalhado para se tornar um monstro de sistema.

    Testem, modifiquem, aprendam, vão conseguir fazer o que desejarem.


    Última edição por Profane ~ em Sex Maio 20, 2016 5:39 pm, editado 1 vez(es)


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4961
    Créditos : 1055

    Re: [Prof ~] Adicionando Elementos em Equipamentos

    Mensagem por Valentine em Sex Maio 20, 2016 5:38 pm

    Show de bola, jovem. Isso torna o jogo bem mais atrativo.


    _________________
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 728
    Créditos : 125

    Re: [Prof ~] Adicionando Elementos em Equipamentos

    Mensagem por Profane ~ em Sex Maio 20, 2016 5:41 pm

    @Valentine escreveu:Show de bola, jovem. Isso torna o jogo bem mais atrativo.

    Agradeço Valentine, isso foi um pedido do Hells;

    E como de fato é algo simples, resolvi trazer logo aos nossos pequenos.

    Estou tendo grande problema com a formatação das fontes e etc e.e Se conseguir modificar para mim, ficarei grato você que já tem mais experiência ><

    eh visivel as falhas nos centralizados, de forma alguma consegui corrigir essa bagaça -.-''


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    Uchiha ~
    Iniciante
    Iniciante

    Mensagens : 70
    Créditos : 1

    Re: [Prof ~] Adicionando Elementos em Equipamentos

    Mensagem por Uchiha ~ em Sex Maio 20, 2016 11:47 pm

    Inédito, muito bom. Very Happy


    _________________

    Conteúdo patrocinado

    Re: [Prof ~] Adicionando Elementos em Equipamentos

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sex Set 21, 2018 3:17 pm