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
Abra seu "Server.Vbp" , e em "ModCombat", na "Public Sub TryPlayerAttackNpc", procure por:
E abaixo disto, adicione isso:
Ainda nesta SUB, procure por:
E acima disto, adicione isso:
Agora, em "ModDatabase" , na "Public Sub SavePassives()" procure por:
E abaixo disto, adicione isso:
Agora, ainda em "ModDatabase" , na "Public Sub LoadPassives()" procure por:
E abaixo disto, adicione isso:
Agora, em "ModTypes" , procure pela REC:
E acima disto, adicione isso:
Ainda nesta REC "Private Type ClassRec" , procure por:
E abaixo disto, adicione isso:
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!
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.
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!
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