📄 gtasagarageocx.ctl
字号:
GetIniVals = GetIniVals & "," & UCase(Hex(.bytTuneArr(iModCtr)))
Next iModCtr
End With
Exit Function
errGetIniValues:
GetIniVals = "0,1,1,1,1,1,0,0"
End Function
Public Function GetFullGarageValuesToByteArray(ByRef bParking() As Byte) As Boolean
'helper function
CopyMemory bParking(0), tNowParking, Len(tNowParking)
End Function
Public Function SetValuesFromOnlineGarageByteArray(ByRef bParking() As Byte) As Boolean
On Error Resume Next
Static iModCtr As Integer
'copy nowparking to lastparking to compare later:
CopyMemory tLastParking, tNowParking, Len(tNowParking)
'get the full garage block from parent form and assign to now parking:
CopyMemory tNowParking, bParking(0), Len(tNowParking)
'garage is not locked (otherwise cursor does not come here), show current values:
isInit = True
For iCarCtr = 0 To 3
If tNowParking.ParkingSlots(iCarCtr).intCarCode = 0 Then
cboSelectCar(iCarCtr).ListIndex = 0
Else
cboSelectCar(iCarCtr).ListIndex = GarageListMatrix(iCarCtr, tNowParking.ParkingSlots(iCarCtr).intCarCode)
End If
'8:DP/4:EP/2:FP/1:BP
chkDP(iCarCtr).Value = Abs(CInt(CInt((tNowParking.ParkingSlots(iCarCtr).intSpecials And 8)) = 8))
chkEP(iCarCtr).Value = Abs(CInt(CInt((tNowParking.ParkingSlots(iCarCtr).intSpecials And 4)) = 4))
chkFP(iCarCtr).Value = Abs(CInt(CInt((tNowParking.ParkingSlots(iCarCtr).intSpecials And 2)) = 2))
chkBP(iCarCtr).Value = Abs(CInt(CInt((tNowParking.ParkingSlots(iCarCtr).intSpecials And 1)) = 1))
picMajor(iCarCtr).Tag = tNowParking.ParkingSlots(iCarCtr).bytMajorColor
picMajor(iCarCtr).BackColor = GTASAColors(tNowParking.ParkingSlots(iCarCtr).bytMajorColor).lngRGB
picMinor(iCarCtr).Tag = tNowParking.ParkingSlots(iCarCtr).bytMinorColor
picMinor(iCarCtr).BackColor = GTASAColors(tNowParking.ParkingSlots(iCarCtr).bytMinorColor).lngRGB
'check the modifications:
isResetMods(iCarCtr) = True
For iModCtr = 0 To 7
If tNowParking.ParkingSlots(iCarCtr).intTuneArr(iModCtr) <> -1 Or _
tNowParking.ParkingSlots(iCarCtr).intTuneArr(iModCtr + 7) <> -1 Then
isResetMods(iCarCtr) = False
End If
Next iModCtr
If tNowParking.ParkingSlots(iCarCtr).bytTuneArr(6) <> &HFF Then isResetMods(iCarCtr) = False
If isResetMods(iCarCtr) Then
lblModStatus(iCarCtr).Caption = "Not Modded"
Else
lblModStatus(iCarCtr).Caption = "Modded"
End If
Next iCarCtr
isInit = False
SetVisibility
isReparkNeeded = False
isDirty = False
End Function
Public Function UpdateValuesOfGarageStructByteArray(ByRef bParking() As Byte) As Boolean
On Error GoTo errUpdateValuesOfGarageStructByteArray
Static iModCtr As Integer
'get the full garage block from parent form and assign to now parking:
CopyMemory tTempGarage, bParking(0), Len(tTempGarage)
For iCarCtr = 0 To 3
With tTempGarage.ParkingSlots(iCarCtr)
.intCarCode = ParkedCarMatrix(iCarCtr, cboSelectCar(iCarCtr).ListIndex)
If ParkedCarMatrix(iCarCtr, cboSelectCar(iCarCtr).ListIndex) = 0 Then
.lngHandling = 0
Else
.lngHandling = ParkedCars(ParkedCarMatrix(iCarCtr, cboSelectCar(iCarCtr).ListIndex)).iHandling
End If
.intSpecials = (chkDP(iCarCtr).Value * 8) + (chkEP(iCarCtr).Value * 4) + (chkFP(iCarCtr).Value * 2) + chkBP(iCarCtr).Value
.bytMajorColor = CByte(picMajor(iCarCtr).Tag)
.bytMinorColor = CByte(picMinor(iCarCtr).Tag)
'modifications come here...
If (.lngAngle = 0) Or isResetMods(iCarCtr) Then
'there has been no cars here, or we need to reset the modifications:
For iModCtr = 0 To 7
.intTuneArr(iModCtr) = -1
.intTuneArr(iModCtr + 7) = -1
Next iModCtr
'&HFF 02 00 00
' 3 2 1 0
.bytTuneArr(0) = &H0 'keep zero.this is actually for stripe type. &H78 used for camper, &H3E used for cement truck etc.
.bytTuneArr(1) = &H0 'keep zero
.bytTuneArr(2) = &H2 'not really known yet
.bytTuneArr(3) = 0 '&HFF (extras1. if no extras, ignored by game)
'&H00 FF 00 FF
' 7 6 5 4
.bytTuneArr(4) = &HFE 'FF/0/1/2/3/4 Exhaust, body parts for bikes, etc. (keep &HFE, so that all bits are checked)
.bytTuneArr(5) = &H0 '0, related with paint job
.bytTuneArr(6) = &HFF 'paint job ordinal. FF/0/1/2/3
.bytTuneArr(7) = &H0 'Extras.
Else
'set selected mods to online:
For iModCtr = 0 To 7
.intTuneArr(iModCtr) = tNowParking.ParkingSlots(iCarCtr).intTuneArr(iModCtr)
.intTuneArr(iModCtr + 7) = tNowParking.ParkingSlots(iCarCtr).intTuneArr(iModCtr + 7)
.bytTuneArr(iModCtr) = tNowParking.ParkingSlots(iCarCtr).bytTuneArr(iModCtr)
Next iModCtr
' If .intCarCode = 522 Then
' lng Was 2 = &H50000 'special case
' lng Was 3 = &HFF0004
' End If
End If
'plausibility check comes here:
If .lngAngle = 0 Then .lngAngle = &HFF9D00 'there has been no cars here.
End With
Next iCarCtr
'get the full garage block from parent form and assign to now parking:
CopyMemory bParking(0), tTempGarage, Len(tTempGarage)
UpdateValuesOfGarageStructByteArray = True
Exit Function
errUpdateValuesOfGarageStructByteArray:
Err.Clear
End Function
Private Sub SetVisibility()
Static isPreInit As Boolean
Static iCtr As Integer
isPreInit = isInit
isInit = True
'set visibility of all controls according to selected combo's:
If cboSelectCar(0).ListIndex < 1 Then
'disable all
For iCtr = 0 To 3
If iCtr < 1 Then 'special case for select car combo
cboSelectCar(iCtr).Visible = True
cmdCarPics(iCtr).Visible = True
Else
cmdCarPics(iCtr).Visible = False
cboSelectCar(iCtr).Visible = False
cboSelectCar(iCtr).ListIndex = 0
End If
chkEP(iCtr).Visible = False
chkBP(iCtr).Visible = False
chkDP(iCtr).Visible = False
chkFP(iCtr).Visible = False
picMajor(iCtr).Visible = False
picMinor(iCtr).Visible = False
lblModNA(iCtr).Visible = False
lblModStatus(iCtr).Visible = False
cmdClearMods(iCtr).Visible = False
cmdEditMods(iCtr).Visible = False
Next iCtr
ElseIf cboSelectCar(1).ListIndex < 1 Then
'disable all but index 0
For iCtr = 0 To 3
If iCtr < 2 Then 'special case for select car combo
cboSelectCar(iCtr).Visible = True
cmdCarPics(iCtr).Visible = True
Else
cmdCarPics(iCtr).Visible = False
cboSelectCar(iCtr).Visible = False
cboSelectCar(iCtr).ListIndex = 0
End If
chkEP(iCtr).Visible = (iCtr < 1)
chkBP(iCtr).Visible = (iCtr < 1)
chkDP(iCtr).Visible = (iCtr < 1)
chkFP(iCtr).Visible = (iCtr < 1)
picMajor(iCtr).Visible = (iCtr < 1)
picMinor(iCtr).Visible = (iCtr < 1)
If (iCtr < 1) And (cboSelectCar(iCtr).ListIndex > 0) Then
cmdEditMods(iCtr).Enabled = ParkedCars(ParkedCarMatrix(iCtr, cboSelectCar(iCtr).ListIndex)).isHasMods
Else
cmdEditMods(iCtr).Enabled = False
End If
If cmdEditMods(iCtr).Enabled Then
lblModNA(iCtr).Visible = False
lblModStatus(iCtr).Visible = (iCtr < 1)
cmdClearMods(iCtr).Visible = (iCtr < 1)
cmdEditMods(iCtr).Visible = (iCtr < 1)
Else
lblModNA(iCtr).Visible = (iCtr < 1)
lblModStatus(iCtr).Visible = False
cmdClearMods(iCtr).Visible = False
cmdEditMods(iCtr).Visible = False
End If
Next iCtr
ElseIf cboSelectCar(2).ListIndex < 1 Then
'disable all but index 0 and 1
For iCtr = 0 To 3
If iCtr < 3 Then 'special case for select car combo
cboSelectCar(iCtr).Visible = True
cmdCarPics(iCtr).Visible = True
Else
cmdCarPics(iCtr).Visible = False
cboSelectCar(iCtr).Visible = False
cboSelectCar(iCtr).ListIndex = 0
End If
chkEP(iCtr).Visible = (iCtr < 2)
chkBP(iCtr).Visible = (iCtr < 2)
chkDP(iCtr).Visible = (iCtr < 2)
chkFP(iCtr).Visible = (iCtr < 2)
picMajor(iCtr).Visible = (iCtr < 2)
picMinor(iCtr).Visible = (iCtr < 2)
If (iCtr < 2) And (cboSelectCar(iCtr).ListIndex > 0) Then
cmdEditMods(iCtr).Enabled = ParkedCars(ParkedCarMatrix(iCtr, cboSelectCar(iCtr).ListIndex)).isHasMods
Else
cmdEditMods(iCtr).Enabled = False
End If
If cmdEditMods(iCtr).Enabled Then
lblModNA(iCtr).Visible = False
lblModStatus(iCtr).Visible = (iCtr < 2)
cmdClearMods(iCtr).Visible = (iCtr < 2)
cmdEditMods(iCtr).Visible = (iCtr < 2)
Else
lblModNA(iCtr).Visible = (iCtr < 2)
lblModStatus(iCtr).Visible = False
cmdClearMods(iCtr).Visible = False
cmdEditMods(iCtr).Visible = False
End If
Next iCtr
ElseIf cboSelectCar(3).ListIndex < 1 Then
'disable all but index 0 and 1 and 2
For iCtr = 0 To 3
'special case for select car combo:
cboSelectCar(iCtr).Visible = True
cmdCarPics(iCtr).Visible = True
chkEP(iCtr).Visible = (iCtr < 3)
chkBP(iCtr).Visible = (iCtr < 3)
chkDP(iCtr).Visible = (iCtr < 3)
chkFP(iCtr).Visible = (iCtr < 3)
picMajor(iCtr).Visible = (iCtr < 3)
picMinor(iCtr).Visible = (iCtr < 3)
If (iCtr < 3) And (cboSelectCar(iCtr).ListIndex > 0) Then
cmdEditMods(iCtr).Enabled = ParkedCars(ParkedCarMatrix(iCtr, cboSelectCar(iCtr).ListIndex)).isHasMods
Else
cmdEditMods(iCtr).Enabled = False
End If
If cmdEditMods(iCtr).Enabled Then
lblModNA(iCtr).Visible = False
lblModStatus(iCtr).Visible = (iCtr < 3)
cmdClearMods(iCtr).Visible = (iCtr < 3)
cmdEditMods(iCtr).Visible = (iCtr < 3)
Else
lblModNA(iCtr).Visible = (iCtr < 3)
lblModStatus(iCtr).Visible = False
cmdClearMods(iCtr).Visible = False
cmdEditMods(iCtr).Visible = False
End If
Next iCtr
Else
'enable all:
For iCtr = 0 To 3
'special case for select car combo:
cboSelectCar(iCtr).Visible = True
cmdCarPics(iCtr).Visible = True
chkEP(iCtr).Visible = True
chkBP(iCtr).Visible = True
chkDP(iCtr).Visible = True
chkFP(iCtr).Visible = True
picMajor(iCtr).Visible = True
picMinor(iCtr).Visible = True
If cboSelectCar(iCtr).ListIndex > 0 Then
cmdEditMods(iCtr).Enabled = ParkedCars(ParkedCarMatrix(iCtr, cboSelectCar(iCtr).ListIndex)).isHasMods
Else
cmdEditMods(iCtr).Enabled = False
End If
lblModNA(iCtr).Visible = Not cmdEditMods(iCtr).Enabled
lblModStatus(iCtr).Visible = cmdEditMods(iCtr).Enabled
cmdClearMods(iCtr).Visible = cmdEditMods(iCtr).Enabled
cmdEditMods(iCtr).Visible = cmdEditMods(iCtr).Enabled
Next iCtr
End If
isInit = isPreInit
End Sub
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MappingInfo=chkLockGarage,chkLockGarage,-1,Caption
Public Property Get GarageName() As String
Attribute GarageName.VB_Description = "Returns/sets the text displayed in an object's title bar or below an object's icon."
GarageName = chkLockGarage.Caption
End Property
Public Property Let GarageName(ByVal New_GarageName As String)
chkLockGarage.Caption() = New_GarageName
PropertyChanged "GarageName"
End Property
Private Sub UserControl_Initialize()
On Error Resume Next
Dim iModCtr As Integer
'initialise to zeroed parking structures:
For iCarCtr = 0 To 3
With tLastParking.ParkingSlots(iCarCtr)
.sngXcoord = 0
.sngYcoord = 0
.sngZcoord = 0
.lngHandling = 0
.intSpecials = 0
.intCarCode = 0
For iModCtr = 0 To 7
.intTuneArr(iModCtr) = -1
.intTuneArr(iModCtr + 7) = -1
Next iModCtr
.bytMajorColor = 1 'white
.bytMinorColor = 1
'&HFF 02 00 00
' 3 2 1 0
.bytTuneArr(0) = &H0 'keep zero.this is actually for stripe type. &H78 used for camper, &H3E used for cement truck etc.
.bytTuneArr(1) = &H0 'keep zero
.bytTuneArr(2) = &H2 'not really known yet
.bytTuneArr(3) = 0 '&HFF (extras1. if no extras, ignored by game)
'&H00 FF 00 FF
' 7 6 5 4
.bytTuneArr(4) = &HFE 'FF/0/1/2/3/4 Exhaust, body parts for bikes, etc. (keep &HFE, so that all bits are checked)
.bytTuneArr(5) = &H0 '0, related with paint job
.bytTuneArr(6) = &HFF 'paint job ordinal. FF/0/1/2/3
.bytTuneArr(7) = &H0 'not known yet
.lngAngle = &HFF6300
End With
Next iCarCtr
'copy this zero structure to other private structures:
CopyMemory tNowParking, tLastParking, Len(tLastParking)
CopyMemory tOnlineGarage, tLastParking, Len(tLastParking)
CopyMemory tTempGarage, tLastParking, Len(tLastParking)
End Sub
'Load property values from storage
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
chkLockGarage.Caption = PropBag.ReadProperty("GarageName", "Garage Caption:")
End Sub
'Write property values to storage
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("GarageName", chkLockGarage.Caption, "Garage Caption:")
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -