📄 clsplayer.vb.svn-base
字号:
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 + -