Sobre o Sistema
Esse é um sistema de transformação para o seu npc.
Ele sofrerá algumas mudanças quando atingir determinada % de vida. São elas:
Mudar a Sprite, Soltar uma animação no NPC, Aumentar o dano fisico e magico do NPC e
Aumentar a defesa do NPC.
Inicio - Client-Side
Inicio - Client-Side
Vá na frmEditor_NPC e crie 3 CheckBox, 1 HScrollBar, 5 TextBox, 6 Label.
1ª CheckBox:
1ª CheckBox:
Name: chkBossFight
Caption: Ativar Boss Fight?
Caption: Ativar Boss Fight?
2ª CheckBox:
Name: chkChangeAnim
Caption: Animação ao Mudar
3ª CheckBox:
Caption: Animação ao Mudar
3ª CheckBox:
Name: chkChangeSprite
Caption: Mudar Sprite
1ª HScrollBar:
1ª HScrollBar:
Name: scrollFormLifePercent
Min: 1
Max: 99
1ª TextBox:
Min: 1
Max: 99
1ª TextBox:
Name: txtPoderFisico
2ª TextBox:
Name: txtPoderMagico
3ª TextBox:
Name: txtDefesa
4ª TextBox:
Name: txtAnimacao
5ª TextBox:
Name: txtSprite
1ª Label:
Name: lblFormLifePercent
Caption: Mudar quando vida estiver abaixo de: x%
1ª Label:
Name: lblFormLifePercent
Caption: Mudar quando vida estiver abaixo de: x%
2ª Label:
Caption: Poder Fisico %
3ª Label:
Caption: Poder Magico %
3ª Label:
Caption: Defesa Fisica/Magica %
5ª Label:
Caption: Animação
6ª Label:
Caption: Mudar Sprite
No final do frmEditor_NPC adicione:
No final do frmEditor_NPC adicione:
- Código:
Private Sub chkBossFight_Click()
Npc(EditorIndex).BossFight = chkBossFight.Value
End Sub
Private Sub chkChangeAnim_Click()
Npc(EditorIndex).ChangeAnim = chkChangeAnim.Value
End Sub
Private Sub chkChangeSprite_Click()
Npc(EditorIndex).ChangeSprite = chkChangeSprite.Value
End Sub
Private Sub scrollFormLifePercent_Change()
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
lblFormLifePercent.Caption = "Mudar quando vida estiver abaixo de: " & scrollFormLifePercent.Value & "%"
Npc(EditorIndex).ChangeFormLife = scrollFormLifePercent.Value
' Error handler
Exit Sub
errorhandler:
HandleError "scrlSprite_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Private Sub txtPoderFisico_Change()
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Not Len(txtPoderFisico.text) <= 999 Then
MsgBox "Coloque um valor abaixo de 999"
End If
If Not IsNumeric(txtPoderFisico.text) Then
MsgBox "Você não pode usar letras aqui, seu animal!", vbCritical
End If
Npc(EditorIndex).AddAtkFisico = Val(txtPoderFisico.text)
' Error handler
Exit Sub
errorhandler:
HandleError "txtPoderFisico_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Private Sub txtPoderMagico_Change()
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Not Len(txtPoderFisico.text) <= 999 Then
MsgBox "Coloque um valor abaixo de 999"
End If
If Not IsNumeric(txtPoderMagico.text) Then
MsgBox "Você não pode usar letras aqui, seu animal!", vbCritical
End If
Npc(EditorIndex).AddAtkMagico = Val(txtPoderMagico.text)
' Error handler
Exit Sub
errorhandler:
HandleError "txtPoderMagico_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Private Sub txtAnimacao_Change()
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Not IsNumeric(txtAnimacao.text) Then
MsgBox "Você não pode usar letras aqui, seu animal!", vbCritical
End If
Npc(EditorIndex).BFAnim = Val(txtAnimacao.text)
' Error handler
Exit Sub
errorhandler:
HandleError "txtAnimacao_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Private Sub txtSprite_Change()
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Not IsNumeric(txtSprite.text) Then
MsgBox "Você não pode usar letras aqui, seu animal!", vbCritical
End If
Npc(EditorIndex).BFSprite = Val(txtSprite.text)
' Error handler
Exit Sub
errorhandler:
HandleError "txtSprite_Click", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Na modGameEditors, na sub NpcEditorInit procure por:
- Código:
.txtDamage.text = Npc(EditorIndex).Damage
Em baixo adicione:
- Código:
.scrollFormLifePercent.Value = Npc(EditorIndex).ChangeFormLife
.chkChangeAnim.Value = Npc(EditorIndex).ChangeAnim
.chkChangeSprite.Value = Npc(EditorIndex).ChangeSprite
.txtPoderFisico.text = Npc(EditorIndex).AddAtkFisico
.txtPoderMagico.text = Npc(EditorIndex).AddAtkMagico
.txtDefesa.text = Npc(EditorIndex).AddDefesa
.txtSprite.text = Npc(EditorIndex).BFSprite
.txtAnimacao.text = Npc(EditorIndex).BFAnim
.chkBossFight.Value = Npc(EditorIndex).BossFight
Na modTypes, na Private Type NpcRec, em baixo de
- Código:
Level As Long
adicione:
- Código:
BossFight As Byte
ChangeFormLife As Byte
AddAtkFisico As Long
AddAtkMagico As Long
AddDefesa As Long
ChangeSprite As Byte
ChangeAnim As Byte
BFAnim As Long
BFSprite As Long
No modDirectDraw7, na sub BltNpc, em baixo de:
- Código:
Dim attackspeed As Long
Adicione:
- Código:
Dim LifePercent As Currency
Na mesma sub procure por:
- Código:
For i = 1 To MAX_MAP_NPCS
npcnum = MapNpc(i).num
If npcnum > 0 Then
Sprite = Npc(MapNpc(MapNpcNum).num).Sprite
End If
Next
Troque para:
- Código:
For i = 1 To MAX_MAP_NPCS
npcnum = MapNpc(i).num
If npcnum > 0 Then
If Npc(MapNpcNum).ChangeSprite = 1 Then
If MapNpc(MapNpcNum).Vital(Vitals.HP) <= (Npc(MapNpcNum).HP * LifePercent) Then
Sprite = Npc(MapNpcNum).BFSprite
Else
Sprite = Npc(MapNpc(MapNpcNum).num).Sprite
End If
Else
Sprite = Npc(MapNpc(MapNpcNum).num).Sprite
End If
End If
Next
Client-Side Finalizado.
Server-Side
No modType, na Private Type NpcRec, em baixo de:
- Código:
Level As Long
Adicione:
- Código:
BossFight As Byte
ChangeFormLife As Byte
AddAtkFisico As Long
AddAtkMagico As Long
AddDefesa As Long
ChangeSprite As Byte
ChangeAnim As Byte
BFAnim As Long
BFSprite As Long
No modCombat, na Sub PlayerAttackNpc, em baixo de:
- Código:
Dim Buffer As clsBuffer
Adicione:
- Código:
Dim LifePercent As Currency, DefensePercentA As Currency, DefensePercentB As Currency
Na mesma sub, em baixo de:
- Código:
If GetPlayerEquipment(attacker, Weapon) > 0 Then
n = GetPlayerEquipment(attacker, Weapon)
End If
Adicione:
- Código:
'Boss Fight
LifePercent = Npc(npcNum).ChangeFormLife / 100
DefensePercentA = Npc(npcNum).AddDefesa / 100
DefensePercentB = DefensePercentA
If Npc(npcNum).BossFight = 1 Then
If MapNpc(npcNum).Npc(MapNpcNum).Vital(Vitals.HP) <= (GetNpcMaxVital(npcNum, Vitals.HP) * LifePercent) Then
Damage = Damage * DefensePercentB
End If
End If
Ainda no modCombat, na Sub TryNpcAttackPlayer, em baixo de:
- Código:
' randomise for up to 10% lower than max hit
'Damage = RAND(1, Damage)
Adicione:
- Código:
'Boss Fight
LifePercent = Npc(npcNum).ChangeFormLife / 100
AttackPercentA = Npc(npcNum).AddAtkFisico / 100
AttackPercentB = 1 + AttackPercentA
If Npc(npcNum).BossFight = 1 Then
If MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) <= (GetNpcMaxVital(npcNum, Vitals.HP) * LifePercent) Then
Damage = Damage * AttackPercentB
End If
End If
No final do modGameLogic adicione:
- Código:
Public Sub ChangeAnim() ', ByVal npcnum As Long, ByVal mapnpcnum As Long)
Dim LifePercent As Currency
Dim mapnum As Long, npcNum As Long, MapNpcNum As Long, i As Long
For MapNpcNum = 1 To MAX_MAP_NPCS
For i = 1 To Player_HighIndex
If IsPlaying(i) Then
' Try to attack a npc
mapnum = GetPlayerMap(i)
npcNum = MapNpc(mapnum).Npc(MapNpcNum).Num
If npcNum <= 0 Or npcNum >= MAX_NPCS Then Exit Sub
LifePercent = Npc(npcNum).ChangeFormLife / 100
If Npc(npcNum).BossFight = 1 Then
If MapNpc(mapnum).Npc(MapNpcNum).Vital(Vitals.HP) <= (GetNpcMaxVital(npcNum, Vitals.HP) * LifePercent) Then
If Not MapNpc(mapnum).Npc(MapNpcNum).Changed = 1 Then
Call SendAnimation(GetPlayerMap(i), Npc(npcNum).BFAnim, MapNpc(npcNum).Npc(MapNpcNum).x, MapNpc(npcNum).Npc(MapNpcNum).y)
MapNpc(mapnum).Npc(MapNpcNum).Changed = 1
End If
Else
MapNpc(mapnum).Npc(MapNpcNum).Changed = 0
End If
End If
End If
Next
Next
End Sub
No modServerLoop, acima de:
- Código:
frmServer.lblCPS.Caption = "CPS: " & Format$(GameCPS, "#,###,###,###")
Adicione:
- Código:
Call ChangeAnim
Delete todos os npcs, compile e teste.
Creditos: Eu(GalaxyHells)
Última edição por GalaxyHells em Ter Fev 19, 2019 9:27 pm, editado 1 vez(es)