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

📄 clsplayer.vb.svn-base

📁 MirUnleashed vb.net Module modMainServer Public WithEvents Socket As New WinsockServer Pub
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
Public Class clsPlayer

#Region "Player Variables"

    '==============================
    '        Player Variables     '
    '==============================

    '### Player Login Info ###'
    Public Username As String 'Login Id
    Public Password As String 'Login Password
    Public Certification As Integer 'Certification

    '### Player Id ###'
    Public StateId As Integer 'PlayerId

    '### Player Details ###'
    Public Name As String 'Player Name
    Public NameColour As Short 'Name Colour
    Public Level As Short 'Player Level
    Public Job As Jobs 'Class
    Public Dir As Byte 'Direction
    Public Gender As Genders 'Gender
    Public GuildName As String 'Guild Name
    Public GuildTitle As String 'Rank Title
    Public GuildRank As GuildRanks 'Rank Number (Leader, Co-Leader, Member)

    Public Gold As Long 'Gold
    Public Light As Byte 'Players Light

    '### Players Map Info ###'
    Public Map As String 'Map filename
    Public X, Y As Short 'X/Y of Player

    Public LastX, LastY As Short 'Last X/Y of Player

    Public HomeMap As String 'Players Home map filename
    Public HomeX, HomeY As Short 'Players Home X/Y

    '### Players Stats ###'
    Public HP, MaxHP As Integer 'HP/MaxHP
    Public MP, MaxMP As Integer 'MP/MaxMP
    Public AC, MaxAC As Integer 'AC/MaxAC
    Public AMC, MaxAMC As Integer 'AMC/MaxAMC
    Public DC, MaxDC As Integer 'DC/MaxDC
    Public MC, MaxMC As Integer 'MC/MaxMC
    Public SC, MaxSC As Integer 'SC/MaxSC
    Public Accuracy As Integer 'Accuracy
    Public Agility As Integer 'Agility
    Public ASpeed As Integer 'Attack Speed
    Public Holy, Inten As Integer 'Holy/Inten
    Public Luck, Curse As Integer 'Curse/Luck
    Public MPRecov, HPRecov As Integer 'MP Recovery/HP Recovery
    Public HPLeech, MPLeech As Integer 'HP Leech/MP Leech
    Public PoisonEvasion, MagicEvasion As Integer 'Anti Magic/Anti Poison
    Public PoisonRecov As Integer 'Poison Recovery
    Public PKPoint As Integer 'PK Point

    Public Exp As Long 'Current Exp
    Public MaxExp As Long 'Exp needed to level

    Public Weight, MaxWeight As Integer 'Weight/MaxWeight
    Public WearWeight, MaxWearWeight As Integer 'WearWeight/MaxWearWeight
    Public HandWeight, MaxHandWeight As Integer 'HandWeaigh/MaxHandWeight

    '### Player Info ###'
    Public AttackMode As AttackModes 'Current Attack Mode
    Public AllowGroup As Boolean 'Allow Group
    Public AllowGroupRecall As Boolean 'Allow Group Recall
    Public Reved As Boolean 'Reved
    Public MagicShield As Boolean 'Magic Shield
    Public IsDead As Boolean 'Dead or Not

    Public IncHealth As Integer 'Amount of Health to be added on
    Public IncMana As Integer 'Amount of Mana to be added on
    Public IncHealing As Integer 'Amount of Healing to be added on

    Public MoveSpeed As Long = 300 'Players move speed

    '### Player Timings ###'
    Public LastMove As Long 'Last move time
    Public LastHit As Long 'Last hit time
    Public LastCast As Long 'Last cast time
    Public LastEat As Long 'Last eat time
    Public LastProcess As Long 'Last process time

    '### Player Looks ###'
    Public Looks As Integer 'Armour looks
    Public Hair As Byte 'Hair looks
    Public Weapon As Integer 'Weapon looks
    Public Poison As Poisons 'Poison looks

    Public LocalDropItems As New Hashtable 'Key = ItemID, Items that surround the player
    Public LocalObjects As New Hashtable 'Key = ObjectID, Objects that surround the Player
    Public GroupMembers As New Hashtable 'Players in group

    Public Equipment(13) As clsPlayerItem 'Items Player is wearing
    Public BagItems(55) As clsPlayerItem 'Items in Players bag

    '### Player Attacking ###'
    Public AttackerId As Object
    Public Attacker As Races
    Public TargetId As Object
    Public Target As Races

    '### Player Magics ###'
    Public PlayerMagics As New Hashtable 'Key = MagicID, Value = PlayerMagic
    Public SkillAcuracy As Integer 'Acuracy gained from a skill
    Public SkillDamage As Integer 'Damage gained from a skill

#Region "Enums"

    Public Enum Jobs
        Warrior = 0
        Wizard = 1
        Taoist = 2
    End Enum

    Public Enum Genders
        Male = 0
        Female = 1
    End Enum

    Public Enum AttackModes
        Peaceful = 0
        GroupAttack = 1
        GuildAttack = 2
        RedBrownAttack = 3
        AttackAll = 4
        MarriageAttack = 5
    End Enum


    Public Enum Poisons
        None = 0
        Health = 1
        Defense = 2
        Paralysis = 3
        Agility = 4
        Accuracy = 5
    End Enum

    Public Enum Races
        None = 0
        Player = 1
        Npc = 2
        Monster = 3
    End Enum

    Public Enum GuildRanks
        NormalMember = 0
        CoLeader = 1
        Leader = 2
    End Enum

#End Region
#End Region
#Region "LoadPlayer"

    Public Sub LoadPlayer(ByVal PlayerName As String)
        Me.Name = PlayerName
        Me.IsDead = False

        GetPlayerValues()

        If Me.Level = 0 Then 'New Character
            Me.FirstLogin()
        End If

        UpdatePlayerStats()

        If Me.HP = 0 Then
            Me.HP = Me.MaxHP \ 5
            Me.MP = Me.MaxMP \ 10

            Dim p As Point = GetRandomSpot(Me.HomeX, Me.HomeY, Me.HomeMap, 6)
            Me.X = p.X
            Me.Y = p.Y
        End If

        If Level > 50 Then
            Me.MaxExp = MaxExpList(50)
        Else
            Me.MaxExp = MaxExpList(Level - 1)
        End If
        GetNameColour()

        LoadBagItems()
        LoadEquipmentItems()
        LoadMagics()
    End Sub

#Region "LoadBagItems"

    Private Sub LoadBagItems()
        Dim i As Integer = 0 'Count for items through the array
        Try
            Dim DR As System.Data.SqlClient.SqlDataReader
            Dim StrSql As String = "Select * From TBL_PlayerItems Where Character = '" & Me.Name & "' and Type = 14"
            Dim SqlComm As New System.Data.SqlClient.SqlCommand(StrSql, SqlConnAcc)
            DR = SqlComm.ExecuteReader

            Do While DR.Read()
                BagItems(i) = New clsPlayerItem

                BagItems(i).ItemIndex = DR.Item("ItemIndex")

                Dim rItem As clsItem
                Dim Weight As Integer
                rItem = ItemStatList(BagItems(i).ItemIndex)

                Weight += rItem.Weight

                BagItems(i).ItemID = DR.Item("ItemID")
                BagItems(i).Dura = DR.Item("Dura")
                BagItems(i).MaxDura = DR.Item("MaxDura")
                BagItems(i).Type = DR.Item("Type")
                If Not DR.Item("Character") Is DBNull.Value Then BagItems(i).Character = DR.Item("Character") Else BagItems(i).Character = ""
                If Not DR.Item("NamePrefix") Is DBNull.Value Then BagItems(i).NamePrefix = DR.Item("NamePrefix") Else BagItems(i).NamePrefix = ""
                BagItems(i).PlusAC = DR.Item("PlusAC")
                BagItems(i).PlusAccuracy = DR.Item("PlusAccuracy")
                BagItems(i).PlusAgility = DR.Item("PlusAgility")
                BagItems(i).PlusAMC = DR.Item("PlusAMC")
                BagItems(i).PlusASpeed = DR.Item("PlusASpeed")
                BagItems(i).PlusBWeight = DR.Item("PlusBWeight")
                BagItems(i).PlusHWeight = DR.Item("PlusHWeight")
                BagItems(i).PlusDC = DR.Item("PlusDC")
                BagItems(i).PlusHoly = DR.Item("PlusHoly")
                BagItems(i).PlusHPLeech = DR.Item("PlusHPLeech")
                BagItems(i).PlusHPRecov = DR.Item("PlusHPRecov")
                BagItems(i).PlusInten = DR.Item("PlusInten")
                BagItems(i).PlusLuck = DR.Item("PlusLuck")
                BagItems(i).PlusMagicEvasion = DR.Item("PlusMagicEvasion")
                BagItems(i).PlusMaxHP = DR.Item("PlusMaxHP")
                BagItems(i).PlusMaxMP = DR.Item("PlusMaxMP")
                BagItems(i).PlusMC = DR.Item("PlusMC")
                BagItems(i).PlusMPLeech = DR.Item("PlusMPLeech")
                BagItems(i).PlusMPRecov = DR.Item("PlusMPRecov")
                BagItems(i).PlusPoisonEvasion = DR.Item("PlusPoisonEvasion")
                BagItems(i).PlusPoisonRecov = DR.Item("PlusPoisonRecov")
                BagItems(i).PlusSC = DR.Item("PlusSC")
                i += 1

            Loop

            DR.Close()
            SqlComm.Dispose()
            DR = Nothing
            SqlComm = Nothing
        Catch ex As Exception
            MessageBox.Show("LoadBagItems: " & ex.Message)
        End Try
    End Sub

#End Region
#Region "LoadEquipmentItems"

    Private Sub LoadEquipmentItems()
        Dim i As Integer = 0 'Count for items through the array
        Try
            Dim DR As System.Data.SqlClient.SqlDataReader
            Dim StrSql As String = "Select * From TBL_PlayerItems Where Character = '" & Me.Name & "' and Type < 14"
            Dim SqlComm As New System.Data.SqlClient.SqlCommand(StrSql, SqlConnAcc)
            DR = SqlComm.ExecuteReader

            Do While DR.Read()
                i = DR.Item("Type")
                Equipment(i) = New clsPlayerItem

                Equipment(i).ItemIndex = DR.Item("ItemIndex")

                Dim rItem As clsItem
                Dim Weight As Integer
                rItem = ItemStatList(Equipment(i).ItemIndex)

                Weight += rItem.Weight

                Equipment(i).ItemID = DR.Item("ItemID")
                Equipment(i).Dura = DR.Item("Dura")
                Equipment(i).MaxDura = DR.Item("MaxDura")
                Equipment(i).Type = DR.Item("Type")
                If Not DR.Item("Character") Is DBNull.Value Then Equipment(i).Character = DR.Item("Character") Else Equipment(i).Character = ""
                If Not DR.Item("NamePrefix") Is DBNull.Value Then Equipment(i).NamePrefix = DR.Item("NamePrefix") Else Equipment(i).NamePrefix = ""
                Equipment(i).PlusAC = DR.Item("PlusAC")
                Equipment(i).PlusAccuracy = DR.Item("PlusAccuracy")
                Equipment(i).PlusAgility = DR.Item("PlusAgility")
                Equipment(i).PlusAMC = DR.Item("PlusAMC")
                Equipment(i).PlusASpeed = DR.Item("PlusASpeed")
                Equipment(i).PlusBWeight = DR.Item("PlusBWeight")
                Equipment(i).PlusHWeight = DR.Item("PlusHWeight")
                Equipment(i).PlusDC = DR.Item("PlusDC")
                Equipment(i).PlusHoly = DR.Item("PlusHoly")
                Equipment(i).PlusHPLeech = DR.Item("PlusHPLeech")
                Equipment(i).PlusHPRecov = DR.Item("PlusHPRecov")
                Equipment(i).PlusInten = DR.Item("PlusInten")
                Equipment(i).PlusLuck = DR.Item("PlusLuck")
                Equipment(i).PlusMagicEvasion = DR.Item("PlusMagicEvasion")
                Equipment(i).PlusMaxHP = DR.Item("PlusMaxHP")
                Equipment(i).PlusMaxMP = DR.Item("PlusMaxMP")
                Equipment(i).PlusMC = DR.Item("PlusMC")
                Equipment(i).PlusMPLeech = DR.Item("PlusMPLeech")
                Equipment(i).PlusMPRecov = DR.Item("PlusMPRecov")
                Equipment(i).PlusPoisonEvasion = DR.Item("PlusPoisonEvasion")
                Equipment(i).PlusPoisonRecov = DR.Item("PlusPoisonRecov")
                Equipment(i).PlusSC = DR.Item("PlusSC")

                AddItemStats(Equipment(i))

            Loop

            DR.Close()
            SqlComm.Dispose()
            DR = Nothing
            SqlComm = Nothing
        Catch ex As Exception
            MessageBox.Show("LoadEquipmentItems: " & ex.Message)
        End Try
    End Sub

#End Region
#Region "LoadMagics"

    Private Sub LoadMagics()
        Try
            Dim DR As System.Data.SqlClient.SqlDataReader
            Dim StrSql As String = "Select * From TBL_Magic Where Character = '" & Me.Name & "'"
            Dim SqlComm As New System.Data.SqlClient.SqlCommand(StrSql, SqlConnAcc)
            Dim PlayerMagic As clsPlayerMagic
            Dim MagicName As String
            DR = SqlComm.ExecuteReader

            Do While DR.Read()
                PlayerMagic = New clsPlayerMagic

                MagicName = DR.Item("MagicName")
                Dim Magic As clsMagic = MagicList(MagicName)
                PlayerMagic.MagicId = Magic.MagicId
                PlayerMagic.Level = DR.Item("Level")
                PlayerMagic.Key = DR.Item("Key")
                PlayerMagic.CurrentExp = DR.Item("CurrentExp")

                PlayerMagics.Add(PlayerMagic.MagicId, PlayerMagic)
            Loop

            DR.Close()
            SqlComm.Dispose()
            DR = Nothing
            SqlComm = Nothing
        Catch ex As Exception
            MessageBox.Show("LoadMagics: " & ex.Message)
        End Try
    End Sub

#End Region


#End Region
#Region "FirstLogin"

    Private Sub FirstLogin()
        Me.HP = Me.MaxHP
        Me.MP = Me.MaxMP
        Me.Level = 1

        Me.HomeMap = Config.StartMap
        Me.HomeX = Config.StartX
        Me.HomeY = Config.StartY
        Me.Map = Config.StartMap

        Me.Gold = Config.StartGold

        Dim p As Point = GetRandomSpot(Me.HomeX, Me.HomeY, Me.HomeMap, 6)
        Me.X = p.X
        Me.Y = p.Y

        '### Add Start Items ###"
        Dim i As Integer
        For i = 1 To 5
            Dim rItem As clsItem = ItemStatList(GetItemIndex(StartItem(i).ToLower))

            If Not rItem Is Nothing Then
                If rItem.Type = ItemType.Armour Then
                    Select Case rItem.Type2
                        Case 1
                            'Male
                            If Me.Gender = Genders.Female Then GoTo Nexti
                        Case 2
                            'Female
                            If Me.Gender = Genders.Male Then GoTo Nexti
                    End Select
                End If

                Dim pItem As New clsPlayerItem

                pItem.ItemID = GenerateItemID()
                pItem.Dura = rItem.DuraMax
                pItem.ItemIndex = rItem.Index
                pItem.Type = EquipType.Bag
                pItem.NamePrefix = "Start-Item"
                Me.AddItemToBag(pItem)
                'Packets.SendPickupItem(Me.StateId, GetItemBuffer(pItem))
            End If
Nexti:
        Next i
    End Sub

#Region "StartItem"

    Private Function StartItem(ByVal Number As Integer) As String
        Select Case Number
            Case 1
                Return Config.StartItem1
            Case 2
                Return Config.StartItem2
            Case 3
                Return Config.StartItem3
            Case 4
                Return Config.StartItem4
            Case 5

⌨️ 快捷键说明

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