Random Coding - Jacob - 03-10-2008
ItemRec
Added the array to hold any values for modified stats / vitals.
Code: Type ItemRec
Name As String * NAME_LENGTH
Pic As Integer
Type As Byte
Data1 As Integer
Data2 As Integer
Data3 As Integer
ModVital(1 To Vitals.Vital_Count - 1) As Long
ModStat(1 To Stats.Stat_Count - 1) As Long
End Type
The following function will go though all your equipment and add up any stats plus the base stat value.
Code: '***************************************
' Calculate current modified stats
'***************************************
Public Function Current_ModStat(ByVal Index As Long, ByVal Stat As Stats) As Long
Dim i As Long, ItemNum As Long
Current_ModStat = Current_Stat(Index, Stat)
For i = 1 To Equipment.Equipment_Count - 1
If Current_EquipmentSlot(Index, i) > 0 Then
Current_ModStat = Current_ModStat + Item(Current_InvItemNum(Index, Current_EquipmentSlot(Index, i))).ModStat(Stat)
End If
Next
End Function
The following function will go though all your equipment and add up any vitals plus the base vital value.
Code: '***************************************
' Calculate current modified vitals
'***************************************
Public Function Current_ModVital(ByVal Index As Long, ByVal Vital As Vitals) As Long
Dim i As Long, ItemNum As Long
Current_ModVital = 0
For i = 1 To Equipment.Equipment_Count - 1
If Current_EquipmentSlot(Index, i) > 0 Then
Current_ModVital = Current_ModVital + Item(Current_InvItemNum(Index, Current_EquipmentSlot(Index, i))).ModVital(Vital)
End If
Next
End Function
Just using the new modStat and modVital to calculate the max vitals.
Code: '***************************************
' Calculate Max Vital
'***************************************
Public Function Current_MaxVital(ByVal Index As Long, ByVal Vital As Vitals) As Long
Select Case Vital
Case HP
Current_MaxVital = (Current_Level(Index) + Int(Current_ModStat(Index, Stats.Strength) / 2) + Class(Current_Class(Index)).Stat(Stats.Strength)) * 2
Case MP
Current_MaxVital = (Current_Level(Index) + Int(Current_ModStat(Index, Stats.Magic) / 2) + Class(Current_Class(Index)).Stat(Stats.Magic)) * 2
Case SP
Current_MaxVital = (Current_Level(Index) + Int(Current_ModStat(Index, Stats.Speed) / 2) + Class(Current_Class(Index)).Stat(Stats.Speed)) * 2
End Select
Current_MaxVital = Current_MaxVital + Current_ModVital(Index, Vital)
End Function
Just using the new modStat and modVital to calculate the max vitals.
Code: '***************************************
' Calculate base damage
'***************************************
Public Function Current_Damage(ByVal Index As Long) As Long
Current_Damage = 0
' Check for subscript out of range
If IsPlaying(Index) = False Or Index MAX_PLAYERS Then
Exit Function
End If
Current_Damage = Int(Current_ModStat(Index, Stats.Strength) / 2)
If Current_Damage 0 Then
Current_Damage = Current_Damage + Item(Current_InvItemNum(Index, Current_EquipmentSlot(Index, Weapon))).Data2
End If
End Function
You'll have to change "Current_" to "GetPlayer".
I was just messing around on how to do stats on equipment.
Re: Random Coding - Jacob - 05-10-2008
Just messing around again.
Code: Type PositionRec
Map As Long
X As Byte
Y As Byte
End Type
Code: Type PlayerRec
' General
Name As String * NAME_LENGTH
Sex As Byte
Class As Byte
Sprite As Integer
Level As Byte
Exp As Long
Access As Byte
PK As Byte
' Vitals
Vital(1 To Vitals.Vital_Count - 1) As Long
' Stats
Stat(1 To Stats.Stat_Count - 1) As Byte
POINTS As Byte
' Worn equipment
Equipment(1 To Equipment.Equipment_Count - 1) As Byte
' Inventory
Inv(1 To MAX_INV) As PlayerInvRec
Spell(1 To MAX_PLAYER_SPELLS) As Byte
' Position
Position As PositionRec
Bound As PositionRec
' Current Direction
Dir As Byte
End Type
Code: Public Function Current_Position(ByVal Index As Long) As PositionRec
Current_Position = Player(Index).Char(Current_CharNum(Index)).Position
End Function
Sub Update_Position(ByVal Index As Long, ByRef NewPosition As PositionRec)
Player(Index).Char(Current_CharNum(Index)).Position = NewPosition
End Sub
Code: Public Function Current_Bound(ByVal Index As Long) As PositionRec
Current_Bound = Player(Index).Char(Current_CharNum(Index)).Bound
End Function
Sub Update_Bound(ByVal Index As Long, ByRef NewBound As PositionRec)
Player(Index).Char(Current_CharNum(Index)).Bound = NewBound
End Sub
Code: Sub PlayerWarpPosition(ByVal Index As Long, ByRef NewPosition As PositionRec)
Dim ShopNum As Long, OldMap As Long
' Check for subscript out of range
If IsPlaying(Index) = False Or NewPosition.Map MAX_MAPS Then
Exit Sub
End If
' Check if there was an npc on the map the player is leaving, and if so say goodbye
ShopNum = Map(Current_Map(Index)).Shop
If ShopNum > 0 Then
If LenB(Trim$(Shop(ShopNum).LeaveSay)) > 0 Then
Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).LeaveSay) & "'", SayColor)
End If
End If
' Save old map to send erase player data to
OldMap = Current_Map(Index)
Call SendLeaveMap(Index, OldMap)
Update_Position Index, NewPosition
' Check if there is an npc on the map and say hello if so
ShopNum = Map(Current_Map(Index)).Shop
If ShopNum > 0 Then
If LenB(Trim$(Shop(ShopNum).JoinSay)) > 0 Then
Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).JoinSay) & "'", SayColor)
End If
End If
' Now we check if there were any players left on the map the player just left, and if not stop processing npcs
If GetTotalMapPlayers(OldMap) = 0 Then
PlayersOnMap(OldMap) = NO
End If
' Sets it so we know to process npcs on the map
PlayersOnMap(NewPosition.Map) = YES
TempPlayer(Index).GettingMap = YES
Call SendDataTo(Index, SCheckForMap & SEP_CHAR & NewPosition.Map & SEP_CHAR & Map(NewPosition.Map).Revision & END_CHAR)
End Sub
Code: Sub PlayerWarp(ByVal Index As Long, ByVal MapNum As Long, ByVal X As Long, ByVal Y As Long)
Dim ShopNum As Long, OldMap As Long
' Check for subscript out of range
If IsPlaying(Index) = False Or MapNum MAX_MAPS Then
Exit Sub
End If
' Check if there was an npc on the map the player is leaving, and if so say goodbye
ShopNum = Map(Current_Map(Index)).Shop
If ShopNum > 0 Then
If LenB(Trim$(Shop(ShopNum).LeaveSay)) > 0 Then
Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).LeaveSay) & "'", SayColor)
End If
End If
' Save old map to send erase player data to
OldMap = Current_Map(Index)
Call SendLeaveMap(Index, OldMap)
Update_Map Index, MapNum
Update_X Index, X
Update_Y Index, Y
' Check if there is an npc on the map and say hello if so
ShopNum = Map(Current_Map(Index)).Shop
If ShopNum > 0 Then
If LenB(Trim$(Shop(ShopNum).JoinSay)) > 0 Then
Call PlayerMsg(Index, Trim$(Shop(ShopNum).Name) & " says, '" & Trim$(Shop(ShopNum).JoinSay) & "'", SayColor)
End If
End If
' Now we check if there were any players left on the map the player just left, and if not stop processing npcs
If GetTotalMapPlayers(OldMap) = 0 Then
PlayersOnMap(OldMap) = NO
End If
' Sets it so we know to process npcs on the map
PlayersOnMap(MapNum) = YES
TempPlayer(Index).GettingMap = YES
Call SendDataTo(Index, SCheckForMap & SEP_CHAR & MapNum & SEP_CHAR & Map(MapNum).Revision & END_CHAR)
End Sub
Usage:
Current_Position(Index).Map
Current_Position(Index).X
Current_Position(Index).Y
|