Vamos agora dar emoção ao projeto! Adicionar passivas ás classes! Efeitos legais e únicos de classes, que poderão ser editados ao 'bel-prazer' de quem administra o projeto.
Nesse tópico, vou introduzir na sua engine o sistema de passivas, e já com o "Add-on" de "Mitigação de Dano"!!!
Abra seu "Server.Vbp" , e em "ModServerLoop" , na "Sub ServerLoop()" , procure por:
Logo abaixo, adicione isto:
Ainda na "Sub ServerLoop()" , procure por:
A abaixo, adicione isto:
Agora, em "ModPlayer" , na "Sub JoinGame()" , procure por:
E acima disto, adicione isto:
Agora, em "ModCombat" , na "Sub TryPlayerAttackNpc" , procure por isto:
E abaixo disto, adicione isto:
Ainda em "ModCombat" , mas na "Sub NpcAttackPlayer" , procure por:
E abaixo disto, adicione isso:
Ainda nesta "Sub NpcAttackPlayer" , procure por isso:
E acima disto, adicione isso:
Agora, mais abaixo, procure pela "Public Sub TryPlayerAttackPlayer" , e abaixo de
Adicione isso:
Agora na "Sub PlayerAttackPlayer" , procure por:
E abaixo disto, adicione isso:
Ainda na "Sub PlayerAttackPlayer" , procure por:
E abaixo disto, adicione isso
Agora, no final de "ModDatabase" , adicione isso:
Agora, em "ModTypes" , procure por:
E acima do "End Type" deste REC , adicione isso:
Ainda em "ModTypes" , procure por:
E antes do "End Type" deste REC, adicione isso:
Agora, em "ModGeneral" , na "Private Sub LoadGameData()" , procure por:
E abaixo disto, adicione isso:
Por fim, abra sua form "FrmServer", e de preferência na aba "Control" , adicione:
1x CommandButton
Name: CmdLoadPassives
Dê dois cliques, e dentro deste botão, adicione isso:
E pronto! Agora você tem classes com mitigação de dano!
Pontos a considerar:
- É mais um sistema que traz um leque de possibilidades! A primeira vez que terminar o sistema, "execute" o servidor, que ele irá criar o ".ini" dentro da pasta "\server\data" , e a partir daí, você edita qual classe quer que mitigue ou não.
- Explicação Geral:
1- O arquivo ".ini" vai vir com valores iniciais "= 0" caso seja a primeira vez que compilou o sistema, mas ele salva o valor que você abre e edita.
2- A mitigação é em PORCENTAGEM, e o tempo é em SEGUNDOS, ou seja:
Mitigation = 10
MitigationTime = 5
Significa que você irá mitigar 10% de todo o dano recebido por npc's e players , e quando parar de receber dano, terá ainda 5 segundos de duração com este dano acumulado.
- Dá pra colocar pra ganhar roubo de vida por vida perdida...dano aumentando a cada "%" de vida perdida , Drop ou Exp aumentando baseado na vida ou mana perdida...muita coisa limitada a imaginação e proposta do projeto...
Nesse tópico, vou introduzir na sua engine o sistema de passivas, e já com o "Add-on" de "Mitigação de Dano"!!!
-Server~Side-
Abra seu "Server.Vbp" , e em "ModServerLoop" , na "Sub ServerLoop()" , procure por:
- Spoiler:
- Dim LastUpdateSavePlayers, LastUpdateMapSpawnItems As Long, LastUpdatePlayerVitals As Long
Logo abaixo, adicione isto:
- Spoiler:
- Dim tmrMitigation As Long
Ainda na "Sub ServerLoop()" , procure por:
- Spoiler:
- If Tick > tmr1000 Then
If isShuttingDown Then
Call HandleShutdown
End If
tmr1000 = GetTickCount + 1000
End If
A abaixo, adicione isto:
- Spoiler:
- 'Check for mitigation time
If Tick > tmrMitigation Then
For i = 1 To MAX_PLAYERS
If IsPlaying(i) And TempPlayer(i).InGame Then
If TempPlayer(i).MitigationDamage > 0 Then
If TempPlayer(i).MitigationTime <= 0 Then
TempPlayer(i).MitigationTime = 0
TempPlayer(i).MitigationDamage = 0
End If
If TempPlayer(i).MitigationTime > 0 Then
TempPlayer(i).MitigationTime = TempPlayer(i).MitigationTime - 1
End If
End If
End If
Next
tmrMitigation = GetTickCount + 1000
End If
Agora, em "ModPlayer" , na "Sub JoinGame()" , procure por:
- Spoiler:
- ' Send the flag so they know they can start doing stuff
SendInGame index
E acima disto, adicione isto:
- Spoiler:
- 'Clear any stored mitigation in any case
TempPlayer(index).MitigationDamage = 0
Agora, em "ModCombat" , na "Sub TryPlayerAttackNpc" , procure por isto:
- Spoiler:
- ' randomise from 1 to max hit
Damage = RAND(1, Damage)
E abaixo disto, adicione isto:
- Spoiler:
- 'Increase damage based on mitigation
Damage = Damage + TempPlayer(index).MitigationDamage
Ainda em "ModCombat" , mas na "Sub NpcAttackPlayer" , procure por:
- Spoiler:
- Dim i as Long
E abaixo disto, adicione isso:
- Spoiler:
- Dim MitVal As Long, MitTime As Long, MitDmg As Long
Ainda nesta "Sub NpcAttackPlayer" , procure por isso:
- Spoiler:
- ' set the regen timer
MapNpc(MapNum).Npc(MapNpcNum).stopRegen = True
MapNpc(MapNum).Npc(MapNpcNum).stopRegenTimer = GetTickCount
E acima disto, adicione isso:
- Spoiler:
- MitVal = Class(GetPlayerClass(Victim)).Mitigation
MitTime = Class(GetPlayerClass(Victim)).MitigationTime
If MitVal > 0 Then
MitDmg = Damage * (MitVal / 100)
If MitDmg <= 0 Then MitDmg = 1 'get at least 1 point for too low mitigation
TempPlayer(Victim).MitigationDamage = TempPlayer(Victim).MitigationDamage + MitDmg
TempPlayer(Victim).MitigationTime = MitTime
End If
Agora, mais abaixo, procure pela "Public Sub TryPlayerAttackPlayer" , e abaixo de
- Spoiler:
- ' randomise for up to 10% lower than max hit
Damage = RAND(1, Damage)
Adicione isso:
- Spoiler:
- Damage = Damage + TempPlayer(Attacker).MitigationDamage
Agora na "Sub PlayerAttackPlayer" , procure por:
- Spoiler:
- Dim i As Long
E abaixo disto, adicione isso:
- Spoiler:
- Dim MitVal As Long, MitTime As Long, MitDmg As Long
Ainda na "Sub PlayerAttackPlayer" , procure por:
- Spoiler:
- ' set the regen timer
TempPlayer(Attacker).stopRegen = True
TempPlayer(Attacker).stopRegenTimer = GetTickCount
E abaixo disto, adicione isso
- Spoiler:
- MitVal = Class(GetPlayerClass(Victim)).Mitigation
MitTime = Class(GetPlayerClass(Victim)).MitigationTime
If MitVal > 0 Then
MitDmg = Damage * (MitVal / 100)
If MitDmg <= 0 Then MitDmg = 1 'get at least 1 point for too low mitigation
TempPlayer(Victim).MitigationDamage = TempPlayer(Victim).MitigationDamage + MitDmg
TempPlayer(Victim).MitigationTime = MitTime
End If
Agora, no final de "ModDatabase" , adicione isso:
- Spoiler:
- Public Sub SavePassives()
Dim fileName As String
Dim i As Long
fileName = App.Path & "\data\classpassives.ini"
For i = 1 To Max_Classes
PutVar fileName, "CLASS", "Name" & i, Trim$(Class(i).Name)
PutVar fileName, "CLASS", "Mitigation" & i, Val(Class(i).Mitigation)
PutVar fileName, "CLASS", "MitigationTime" & i, Val(Class(i).MitigationTime)
Next i
End Sub
Public Sub LoadPassives()
Dim fileName As String, i As Long
fileName = App.Path & "\data\classpassives.ini"
If FileExist(fileName, True) Then
For i = 1 To Max_Classes
Class(i).Mitigation = Val(GetVar(fileName, "CLASS", "Mitigation" & i))
Class(i).MitigationTime = Val(GetVar(fileName, "CLASS", "MitigationTime" & i))
Next i
Else
SavePassives
End If
End Sub
Agora, em "ModTypes" , procure por:
- Spoiler:
- Public Type TempPlayerRec
E acima do "End Type" deste REC , adicione isso:
- Spoiler:
- MitigationDamage As Long
MitigationTime As Long
Ainda em "ModTypes" , procure por:
- Spoiler:
- Private Type ClassRec
E antes do "End Type" deste REC, adicione isso:
- Spoiler:
- Mitigation As Long
MitigationTime As Long
Agora, em "ModGeneral" , na "Private Sub LoadGameData()" , procure por:
- Spoiler:
- Call SetStatus("Loading animations...")
Call LoadAnimations
E abaixo disto, adicione isso:
- Spoiler:
- Call SetStatus("Loading passives...")
Call LoadPassives
Por fim, abra sua form "FrmServer", e de preferência na aba "Control" , adicione:
1x CommandButton
Name: CmdLoadPassives
Dê dois cliques, e dentro deste botão, adicione isso:
- Spoiler:
- Call LoadPassives
Call TextAdd("All Passives reloaded.")
E pronto! Agora você tem classes com mitigação de dano!
Pontos a considerar:
- É mais um sistema que traz um leque de possibilidades! A primeira vez que terminar o sistema, "execute" o servidor, que ele irá criar o ".ini" dentro da pasta "\server\data" , e a partir daí, você edita qual classe quer que mitigue ou não.
- Explicação Geral:
1- O arquivo ".ini" vai vir com valores iniciais "= 0" caso seja a primeira vez que compilou o sistema, mas ele salva o valor que você abre e edita.
2- A mitigação é em PORCENTAGEM, e o tempo é em SEGUNDOS, ou seja:
Mitigation = 10
MitigationTime = 5
Significa que você irá mitigar 10% de todo o dano recebido por npc's e players , e quando parar de receber dano, terá ainda 5 segundos de duração com este dano acumulado.
- Dá pra colocar pra ganhar roubo de vida por vida perdida...dano aumentando a cada "%" de vida perdida , Drop ou Exp aumentando baseado na vida ou mana perdida...muita coisa limitada a imaginação e proposta do projeto...
Créditos
Eu - lucas100vzs/Kotol