⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 combat.bas

📁 vb6的一个RPG源码
💻 BAS
📖 第 1 页 / 共 2 页
字号:
Attribute VB_Name = "Combat"

Public Sub Attack()
Dim TempHP As Integer
Dim TempAttack As Integer
Dim TempRnd As Integer
Dim TempRndA As Integer
Dim TempRndB As Integer
If NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter <> 0 Then NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter = NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter - 1
If NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter <> 0 Then GoTo SkipIt:
Randomize
If UserWear.WeapIndex = -1 Then Exit Sub
Select Case Facing
Case North:
If mbytMap(DudeCoord.X, DudeCoord.Y - 1).NPC = False Then Exit Sub
If NPCz(DudeCoord.X, DudeCoord.Y - 1).Duty <> 2 Then Exit Sub
If NPCz(DudeCoord.X, DudeCoord.Y - 1).Walking <> 0 Then Exit Sub
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
NPCz(DudeCoord.X, DudeCoord.Y - 1).State = Attacking
NPCz(DudeCoord.X, DudeCoord.Y - 1).LastStep = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Facing = South
If UserAtts.ASkill < NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.DSkill Then
    TempRnd = NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.DSkill - UserAtts.ASkill
    TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
    Else
    TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.HP - TempAttack
    If TempHP > 1 Then
    NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.HP = TempHP
    NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Yaxis = 0
    NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Xaxis = 0
    NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Sway = 0
    NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Damage = TempAttack
    Else:
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.HP = 0
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Mobile = False
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Step = 0
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Yaxis = 0
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Xaxis = 0
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Sway = 0
        NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Damage = TempAttack
        mbytMap(DudeCoord.X, DudeCoord.Y - 1).NPC = False
        mbytMap(DudeCoord.X, DudeCoord.Y - 1).Walkable = True
        NPCDeath DudeCoord.X, DudeCoord.Y - 1
        End If
End If
Case South:
If NPCz(DudeCoord.X, DudeCoord.Y + 1).Walking <> 0 Then Exit Sub
If mbytMap(DudeCoord.X, DudeCoord.Y + 1).NPC = False Then Exit Sub
If NPCz(DudeCoord.X, DudeCoord.Y + 1).Duty <> 2 Then Exit Sub
NPCz(DudeCoord.X, DudeCoord.Y + 1).State = Attacking
NPCz(DudeCoord.X, DudeCoord.Y + 1).LastStep = 3
NPCz(DudeCoord.X, DudeCoord.Y + 1).Facing = North
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
If UserAtts.ASkill < NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.DSkill Then
    TempRnd = NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.DSkill - UserAtts.ASkill
    TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
    Else
    TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.HP - TempAttack
    If TempHP > 1 Then
    NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.HP = TempHP
    NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Yaxis = 0
    NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Xaxis = 0
    NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Sway = 0
    NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Damage = TempAttack
    Else:
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.HP = 0
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Mobile = False
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Step = 0
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Yaxis = 0
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Xaxis = 0
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Sway = 0
        NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Damage = TempAttack
        mbytMap(DudeCoord.X, DudeCoord.Y + 1).NPC = False
        mbytMap(DudeCoord.X, DudeCoord.Y + 1).Walkable = True
        NPCDeath DudeCoord.X, DudeCoord.Y + 1
    End If
End If
Case West:
If NPCz(DudeCoord.X - 1, DudeCoord.Y).Walking <> 0 Then Exit Sub
If mbytMap(DudeCoord.X - 1, DudeCoord.Y).NPC = False Then Exit Sub
If NPCz(DudeCoord.X - 1, DudeCoord.Y).Duty <> 2 Then Exit Sub
NPCz(DudeCoord.X - 1, DudeCoord.Y).State = Attacking
NPCz(DudeCoord.X - 1, DudeCoord.Y).LastStep = 9
NPCz(DudeCoord.X - 1, DudeCoord.Y).Facing = East
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
If UserAtts.ASkill < NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.DSkill Then
    TempRnd = NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.DSkill - UserAtts.ASkill
    TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
    Else
    TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.HP - TempAttack
    If TempHP > 1 Then
    NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.HP = TempHP
    NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Yaxis = 0
    NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Xaxis = 0
    NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Sway = 0
    NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Damage = TempAttack
    Else:
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.HP = 0
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Mobile = False
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Step = 0
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Yaxis = 0
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Xaxis = 0
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Sway = 0
        NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Damage = TempAttack
        mbytMap(DudeCoord.X - 1, DudeCoord.Y).NPC = False
        mbytMap(DudeCoord.X - 1, DudeCoord.Y).Walkable = True
        NPCDeath DudeCoord.X - 1, DudeCoord.Y
    End If
End If
Case East:
If NPCz(DudeCoord.X + 1, DudeCoord.Y).Walking <> 0 Then Exit Sub
If mbytMap(DudeCoord.X + 1, DudeCoord.Y).NPC = False Then Exit Sub
If NPCz(DudeCoord.X + 1, DudeCoord.Y).Duty <> 2 Then Exit Sub
NPCz(DudeCoord.X + 1, DudeCoord.Y).State = Attacking
NPCz(DudeCoord.X + 1, DudeCoord.Y).LastStep = 6
NPCz(DudeCoord.X + 1, DudeCoord.Y).Facing = West
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
If UserAtts.ASkill < NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.DSkill Then
    TempRnd = NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.DSkill - UserAtts.ASkill
    TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
    Else
    TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP - TempAttack
    If TempHP > 1 Then
    NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP = TempHP
    NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Yaxis = 0
    NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Xaxis = 0
    NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Sway = 0
    NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Damage = TempAttack
    Else:
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP = 0
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Mobile = False
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Step = 0
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP = TempHP
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Yaxis = 0
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Xaxis = 0
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Sway = 0
        NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Damage = TempAttack
        mbytMap(DudeCoord.X + 1, DudeCoord.Y).NPC = False
        mbytMap(DudeCoord.X + 1, DudeCoord.Y).Walkable = True
        NPCDeath DudeCoord.X + 1, DudeCoord.Y
    End If
End If
End Select
NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter = UserAtts.Speed
SkipIt:
End Sub

Public Sub NPCManager()
Dim X As Integer
Dim Y As Integer
For X = 0 To 50
    For Y = 0 To 50
    If mbytMap(X, Y).NPC Then
    Select Case NPCz(X, Y).State
    Case Wandering:
        MoveNPC X, Y
    Case Attacking:
        AIAttack X, Y
    Case Patrolling:
        If Combat.GetDist(X, Y, DudeCoord.X, DudeCoord.Y) > NPCz(X, Y).Atts.Sight Then
            NPC.MoveNPC X, Y
            Else
                If NPCz(X, Y).Walking = 0 Then
                    AISeek X, Y
                Else
                    NPC.MoveNPC X, Y
                End If
        End If
    End Select
    End If
    Next
Next
End Sub

Private Sub AIAttack(X As Integer, Y As Integer)
Dim TempHP As Integer

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -