Aldeia RPG

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

Suporte no desenvolvimento de jogos


    [E.O 2.0 com Passivas para Classes] Bônus de Dano por porcentagem de HP e MP perdidos com Limite

    lucas100vzs
    lucas100vzs
    Iniciante
    Iniciante

    Mensagens : 34
    Créditos : 8

     [E.O 2.0 com Passivas para Classes] Bônus de Dano por porcentagem de HP e MP perdidos com Limite  Empty [E.O 2.0 com Passivas para Classes] Bônus de Dano por porcentagem de HP e MP perdidos com Limite

    Mensagem por lucas100vzs Sex Jun 11, 2021 1:30 am

    Agora um Add-On ao sistema de passivas!
    Com funciona:

    Aqui a gente vai colocar assim, a cada "x%" da vida perdida, se ganha "x%" de bônus de dano, com limite de "x%" no bônus.
    Ou seja, se eu coloco "1% da vida = +10% de dano, até 50%" , com 100 de dano base, vai ser: +10 Dano com 1% da vida perdida/+20 de dano com 2% da vida perdida... até o limite de +50 ....

    Vamos lá, tenha em mente que esse tutorial é um "Add-On" ao tutorial de: 

    https://www.aldeiarpg.com/t14837-e-o-2-0-passivas-para-classesv1-0-passiva-mitigacao-de-dano-por-tempo


    -SERVER~SIDE-

    Abra seu "Server.Vbp" , e em "ModCombat", na "Public Sub TryPlayerAttackNpc", procure por:

    Spoiler:
    Dim Damage As Long

    E abaixo disto, adicione isso:

    Spoiler:
    Dim DmgHP As Long, DmgMP As Long
    Dim LostVital As Long

        DmgHP = 0
        DmgMP = 0
        LostVital = 0

    Ainda nesta SUB, procure por:

    Spoiler:
    ' * 1.5 if it's a crit!
            If CanPlayerCrit(Index) Then
                Damage = Damage * 1.5
                SendActionMsg MapNum, "Critical!", BrightCyan, 1, (GetPlayerX(Index) * 32), (GetPlayerY(Index) * 32)
            End If

    E acima disto, adicione isso:

    Spoiler:
    'Check if the class have it , to save readings
            If Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).AmountLost > 0 Then
            '//Bonus for HP//
            'Current lost hp amount already gives us a percent *-*
            LostVital = GetPlayerMaxVital(Index, Vitals.HP) - GetPlayerVital(Index, Vitals.HP)
            If LostVital <= 0 Then LostVital = 1 'Always check it when doing division
            LostVital = LostVital / 100
            If Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).PercentBonus > 0 Then
                LostVital = LostVital * Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).PercentBonus
            End If
            'Check for limit
            If Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).MaxBonus > 0 And LostVital > Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).MaxBonus Then
                 LostVital = Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).MaxBonus
            End If
            If LostVital > 0 Then
                DmgHP = Damage * LostVital / 100
            End If
            End If
            
            
            LostVital = 0 'We have could used it above, so zero it just in case
            
            'Check if the class have it , to save readings
            If Class(GetPlayerClass(Index)).DmgbyLost(Vitals.MP).AmountLost > 0 Then
            '//Bonus for MP//
            'Current lost hp amount already gives us a percent *-*
            LostVital = GetPlayerMaxVital(Index, Vitals.MP) - GetPlayerVital(Index, Vitals.MP)
            If LostVital <= 0 Then LostVital = 1 'Always check it when doing division
            LostVital = LostVital / 100
            If Class(GetPlayerClass(Index)).DmgbyLost(Vitals.MP).PercentBonus > 0 Then
                LostVital = LostVital * Class(GetPlayerClass(Index)).DmgbyLost(Vitals.HP).PercentBonus
            End If
            'Check for limit
            If Class(GetPlayerClass(Index)).DmgbyLost(Vitals.MP).MaxBonus > 0 And LostVital > Class(GetPlayerClass(Index)).DmgbyLost(Vitals.MP).MaxBonus Then
                 LostVital = Class(GetPlayerClass(Index)).DmgbyLost(Vitals.MP).MaxBonus
            End If
            If LostVital > 0 Then
                DmgMP = Damage * LostVital / 100
            End If
            End If
            
            
            'Add from HP and MP Lost
            Damage = Damage + DmgHP + DmgMP


    Agora, em "ModDatabase" , na "Public Sub SavePassives()" procure por:

    Spoiler:
    PutVar filename, "CLASS", "Mitigation" & i, Val(Class(i).Mitigation)
            PutVar filename, "CLASS", "MitigationTime" & i, Val(Class(i).MitigationTime)

    E abaixo disto, adicione isso:

    Spoiler:
    'Dmg by hp lost
            PutVar filename, "CLASS", "DmgHPAmount" & i, Val(Class(i).DmgbyLost(Vitals.HP).AmountLost)
            PutVar filename, "CLASS", "DmgHPBonus" & i, Val(Class(i).DmgbyLost(Vitals.HP).PercentBonus)
            PutVar filename, "CLASS", "DmgHPLimit" & i, Val(Class(i).DmgbyLost(Vitals.HP).MaxBonus)
            
            'Dmg by mp lost
            PutVar filename, "CLASS", "DmgMPAmount" & i, Val(Class(i).DmgbyLost(Vitals.MP).AmountLost)
            PutVar filename, "CLASS", "DmgMPBonus" & i, Val(Class(i).DmgbyLost(Vitals.MP).PercentBonus)
            PutVar filename, "CLASS", "DmgMPLimit" & i, Val(Class(i).DmgbyLost(Vitals.MP).MaxBonus)

    Agora, ainda em "ModDatabase" , na "Public Sub LoadPassives()" procure por:

    Spoiler:
    Class(i).Mitigation = Val(GetVar(filename, "CLASS", "Mitigation" & i))
                Class(i).MitigationTime = Val(GetVar(filename, "CLASS", "MitigationTime" & i))

    E abaixo disto, adicione isso:

    Spoiler:
    Class(i).DmgbyLost(Vitals.HP).AmountLost = Val(GetVar(filename, "CLASS", "DmgHPAmount" & i))
                Class(i).DmgbyLost(Vitals.HP).PercentBonus = Val(GetVar(filename, "CLASS", "DmgHPBonus" & i))
                Class(i).DmgbyLost(Vitals.HP).MaxBonus = Val(GetVar(filename, "CLASS", "DmgHPLimit" & i))
                
                Class(i).DmgbyLost(Vitals.MP).AmountLost = Val(GetVar(filename, "CLASS", "DmgMPAmount" & i))
                Class(i).DmgbyLost(Vitals.MP).PercentBonus = Val(GetVar(filename, "CLASS", "DmgMPBonus" & i))
                Class(i).DmgbyLost(Vitals.MP).MaxBonus = Val(GetVar(filename, "CLASS", "DmgMPLimit" & i))

    Agora, em "ModTypes" , procure pela REC: 

    Spoiler:
    Private Type ClassRec

    E acima disto, adicione isso:

    Spoiler:
    Private Type ClassPassiveRec
        AmountLost As Long
        PercentBonus As Long
        MaxBonus As Long
    End Type

    Ainda nesta REC "Private Type ClassRec" , procure por:

    Spoiler:
    Mitigation As Long
        MitigationTime As Long

    E abaixo disto, adicione isso:

    Spoiler:
    DmgbyLost(1 To Vitals.Vital_Count - 1) As ClassPassiveRec

    Por fim, vá na pasta do servidor, exclua o arquivo "classpassives.ini" , e execute 1x o servidor, para que ele recrie o arquivo com os "Headers" corretos dentro. (Ou ele vai criar mesmo assim, mas mais abaixo, então pra evitar arquivos muitos grandes...)

    E pronto, agora você tem bônus de dano, baseado na porcentagem de vida perdida, com limite e modificadores editáveis! Indignity

    Pontos a considerar:
    - Leitura do seu arquivo e edição:
    DmgHPAmount1=1 // A cada 1% da vida perdida
    DmgHPBonus1=5 // +5% de dano extra
    DmgHPLimit1=15 // Limite de 15% de dano extra

    -O dano só é calculado, quando há um valor MAIOR QUE ZERO, no "DmgHPAmount" do arquivo ".ini" no seu servidor, então caso não queira que a classe tenha esse atributo, é só mudar/deixar esse valor no zero.

    -Como o servidor não atualiza automaticamente esses valores após ligado, você pode modificar o arquivo a qualquer momento enquanto o servidor estiver ligado, mas para atualizar ele na database, é só apertar o botão de "Carregar Passivas" , sempre que o fizer, que ele atualiza para seu jogo. 


    ~Créditos~


    Eu - lucas100vzs/Kotol

    WillMaiaBR gosta desta mensagem


      Data/hora atual: Sex Jun 18, 2021 12:03 pm