Skip to content

Commit a2f0933

Browse files
committed
Проверка файлов после запуска игры
1 parent e7aa87c commit a2f0933

File tree

5 files changed

+92
-77
lines changed

5 files changed

+92
-77
lines changed

FMXL3.dproj

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<MainSource>FMXL3.dpr</MainSource>
77
<Base>True</Base>
88
<Config Condition="'$(Config)'==''">Debug</Config>
9-
<Platform Condition="'$(Platform)'==''">Win64</Platform>
9+
<Platform Condition="'$(Platform)'==''">Win32</Platform>
1010
<TargetedPlatforms>3</TargetedPlatforms>
1111
<AppType>Application</AppType>
1212
</PropertyGroup>
@@ -264,7 +264,7 @@
264264
</Delphi.Personality>
265265
<Deployment Version="2">
266266
<DeployFile LocalName="Definitions.inc" Configuration="Debug" Class="ProjectFile">
267-
<Platform Name="Win64">
267+
<Platform Name="Win32">
268268
<RemoteDir>.\</RemoteDir>
269269
<Overwrite>true</Overwrite>
270270
</Platform>
@@ -314,15 +314,15 @@
314314
<Overwrite>true</Overwrite>
315315
</Platform>
316316
</DeployFile>
317-
<DeployFile LocalName="Definitions.inc" Configuration="Debug" Class="ProjectFile">
317+
<DeployFile LocalName="Win32\Debug\FMXL3.exe" Configuration="Debug" Class="ProjectOutput">
318318
<Platform Name="Win32">
319-
<RemoteDir>.\</RemoteDir>
319+
<RemoteName>FMXL3.exe</RemoteName>
320320
<Overwrite>true</Overwrite>
321321
</Platform>
322322
</DeployFile>
323-
<DeployFile LocalName="Win32\Debug\FMXL3.exe" Configuration="Debug" Class="ProjectOutput">
324-
<Platform Name="Win32">
325-
<RemoteName>FMXL3.exe</RemoteName>
323+
<DeployFile LocalName="Definitions.inc" Configuration="Debug" Class="ProjectFile">
324+
<Platform Name="Win64">
325+
<RemoteDir>.\</RemoteDir>
326326
<Overwrite>true</Overwrite>
327327
</Platform>
328328
</DeployFile>

HoShiMin's API/FilesNotifier.pas

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ TFilesNotifier = class
3838
private const
3939
BufferSize = 8192;
4040
private
41+
FIsActive: Boolean;
4142
FBaseFolder: string;
4243
FFilesTypes: TStringArray;
4344
FExclusivesTypes: TStringArray;
@@ -127,11 +128,15 @@ procedure TFilesNotifier.StartWatching(WatchSubfolders: Boolean = True; NotifyFi
127128
I, J: Integer;
128129
NeedToAdd: Boolean;
129130
begin
131+
FIsActive := True;
132+
130133
GetMem(Buffer, BufferSize);
131134
FillChar(Buffer^, BufferSize, #0);
132135

133136
while ReadDirectoryChanges(FDirHandle, Buffer, BufferSize, WatchSubfolders, NotifyFilter, @BytesReturned, nil, nil) do
134137
begin
138+
if not FIsActive then Break;
139+
135140
FileNotifyInformation := Buffer;
136141

137142
NotifyStruct.ChangesCount := 0;
@@ -200,6 +205,7 @@ procedure TFilesNotifier.StartWatching(WatchSubfolders: Boolean = True; NotifyFi
200205

201206
procedure TFilesNotifier.StopWatching;
202207
begin
208+
FIsActive := False;
203209
//if (FDirHandle <> 0) and (FDirHandle <> INVALID_HANDLE_VALUE) then CancelIoEx(FDirHandle, nil);
204210
WaitForSingleObject(FWatcherHandle, INFINITE);
205211
FWatcherHandle := 0;

LauncherAPI/FilesValidation/FilesValidation.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,8 @@ procedure TFilesValidator.StartFoldersWatching(const ClientFolder: string;
465465
if NotifyStruct.ChangesCount = 0 then Exit;
466466

467467
for I := 0 to NotifyStruct.ChangesCount - 1 do
468-
ValidateFile(FilesNotifier.BaseFolder + '\' + NotifyStruct.Changes[I].FileName);
468+
if NotifyStruct.Changes[I].Action <> FILE_ACTION_REMOVED then
469+
ValidateFile(FilesNotifier.BaseFolder + '\' + NotifyStruct.Changes[I].FileName);
469470

470471
if FErrorFiles.Count > 0 then
471472
if Assigned(OnFilesMismatching) then

Main.fmx

Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ object MainForm: TMainForm
167167
Size.Width = 263.000000000000000000
168168
Size.Height = 38.000000000000000000
169169
Size.PlatformDefault = False
170-
TabOrder = 22
170+
TabOrder = 26
171171
Text = #1040#1074#1090#1086#1088#1080#1079#1086#1074#1072#1090#1100#1089#1103
172172
TextSettings.Font.Family = 'Raleway'
173173
TextSettings.Font.Size = 14.000000000000000000
@@ -1233,14 +1233,14 @@ object MainForm: TMainForm
12331233
Size.Width = 139.000000000000000000
12341234
Size.Height = 40.000000000000000000
12351235
Size.PlatformDefault = False
1236-
TabOrder = 21
1236+
TabOrder = 26
12371237
Text = #1053#1072#1079#1072#1076
12381238
TextSettings.Font.Family = 'Raleway'
12391239
OnClick = BackButtonClick
12401240
end
12411241
object JavaVersionEdit: TEdit
12421242
Touch.InteractiveGestures = [LongTap, DoubleTap]
1243-
TabOrder = 22
1243+
TabOrder = 27
12441244
FilterChar = '0123456789'
12451245
Text = '8'
12461246
TextSettings.FontColor = claWhite
@@ -9103,25 +9103,25 @@ object MainForm: TMainForm
91039103
89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
91049104
61000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
91059105
026D49444154384FC5524D48545114FEDE7B77DE8C338E4CF843E5A466089392
9106-
8266194341D93A6AE1225BB868D12AA8452B8368D32688C0751B17114242912D
9107-
244237D626887E2CDA182383CE64F3EBBCFF776FE7BE5E12616D3B70DEF9B9DF
9108-
FDCE39F73CFC775142BBABCCCD4D6839737239914C652D3F0E9D31685E15CA87
9109-
1B892BB7DF1812A306C8BF48CE985CEEEE1DCC8E8F8DE2FCE9211C1DECC3FEAE
9110-
3ED4BA6E2D86907F1334B57466FB7BDA5171546CD47C788A869E741B9A92ADD9
9111-
1002B6FA6CE46D82EFEBFF73169B6DAD3FAD7344A33AAA750F5C50CE1388310D
9112-
428B862822A895B54CE6D29388A2100581820FF99EB5D51B5D588365BB707D8A
9113-
25833C2598655A812F456D6E1616B8033B7F1FC6D71918B95998B979682C828E
9114-
661F9BC53212BA82788CA1251EC146C9056BACE3DEE5D12949C074D3530511F8
9115-
8E0E4155B89983DB2860BBB8849154273EE5F7E0F5DA10544D8749DD28D5759C
9116-
DC5B4621DD3D73F342D16688B018F74C38B414E134E0D66B4866A6106B3D8C36
9117-
DAF2C1602E4E87D20ABC5FD9C4FCCB2531313C96DCA8141F285F1E1E77FA2EBE
9118-
8AC8317E01A90F0AF3F02A2F20FC2A04ED5E7835F2B7114B4FE3F9DD336EC13A
9119-
E2B996DBC4501242F8F40CC6BB9F60BF4EE00AB85B0E626209F392A041056C1C
9120-
4875F8E7AE2FC6E51BA8251A5D705A93FB8DAA4A2D042A28162EF932EF6EEDA8
9121-
109EBCB7236AB461D3667CAA5A22FD4E9708246DA0D485EC2050EACC977F2F8D
9122-
F99BA87187972D235F5D59D5B96724E1D9EDB49134B87F887480DE6318423D01
9123-
68A7A0B0713C7EB4202282D9E17D289FEF0C5C83AA1CF3043FEB2A5A32CCEF2E
9124-
B408558113F5F96C66FAE35500F801958453BCC1D33F820000000049454E44AE
9106+
8266194341D93A6AE1225BB868D12AA8452B8368D32688C0751B172E0C84225B
9107+
48846EAC4D10FD58B43146069DC9E6D779BFF7BDDBB9AF974458DB0E9C777EEE
9108+
77BF73CE3D0FFF5D94D0EE29F3F3135ACE9C5C49245359CB8B43670C1AAF42F9
9109+
702B71EDEE1B4362D400F917C919932BDDBD83D9F1B1515C3C3B84E3837D38D8
9110+
D5875AD79DA510F26F82A696CE6C7F4F3B2A8E8ACD9A07AE68E849B7A129D99A
9111+
0D21606BCF46DE26FC03FD7FCE62B3ED8DA7751FD1A88E6A9DC31794E30231A6
9112+
4168D1104504B5B296C95C79125114A22050F0219F5BDBBDD1C57558B60BD7A3
9113+
5832C8538259A615F852D4E66661C17760E71FC2F83A0323370B33B7008D45D0
9114+
D1EC61AB58464257108F31B4C423D82CB9608D0D3CB83A3A2509986E72551081
9115+
E7E81054C53773701B05EC14973192EAC4A7FC3EBC5E1F82AAE930A91BA5BA81
9116+
D3FBCB28A4BB676E5F2ADA0C1116F3B9098796229C06DC7A0DC9CC1462AD47D1
9117+
465B3E1CCCE5D3A1B402EF57B7B0F072594C0C8F25372BC547CA97B9934EDFE5
9118+
571139C62F20F541611EBCF202C2AB42D0EE05AF91BF83587A1ACFEF9F730BD6
9119+
31EE5A6E13434908E1D13318EF7E82BD3A812BF0DD7210134B9897040D2A60E3
9120+
50AAC3BB7073292EDF402DD1E8C2A735B9DFA8AAD442A08262E1922FF3EEF6AE
9121+
0AC1E5BD5D51A30D9B36E351D512E977BA44206903A52E64078152679EFC7B69
9122+
CCDF448D3B7ED932F2D5D535DDE74612DC6EA78DA4E17B474807E83D8621D453
9123+
8076060A1BC7E3B9451111CC0EEF43F97C6FE00654E50417FE7957D192617E6F
9124+
A145A80A9CA8E7CF66A63F5E07801F944253B811C297750000000049454E44AE
91259125
426082}
91269126
StyleLookup = 'menuitemstyle'
91279127
Text = #1054#1090#1082#1088#1099#1090#1100' '#1087#1072#1087#1082#1091
@@ -9219,28 +9219,28 @@ object MainForm: TMainForm
92199219
89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
92209220
61000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
92219221
02CD49444154384F55524B48546114FEEE6BEE9D71B4B09C1AECE1E88C61600F
9222-
CC9EB688326C9420A83611241405E22A82162DDA042EDA448BA04D0411911BA3
9223-
88D21E539662095139A239F61073CAD4EB303A4E3373FFDBF9FF3B091EE63CE6
9224-
3FE7FBFE73CE7F2590D45F7A754A5FA69F5024D42C2461B80B21CE85B5C9D80C
9225-
59C6461353ECB9F93D7E61B0FD7846E44944E1A12B6FBA6FB7D6544D8E8D2EF7
9226-
970515D82227C416B18D3F7359DCED9F45EC4B2A65FEF85AFCE47AF82FCFC8C2
9227-
28D2060E4E7A2B95D8B48298A96084FCD09484E86FA07FDC42A0A4103B2A5722
9228-
18747B4A43EBCC86D6C7FA22417621E95D1B08292E458646272AF54521682448
9229-
A4B26894C15FE44253AD1F8160913BE3356E2D12689E22310AFF237300A19628
9230-
31C56716B0DE9BC5C662096776AD8032A11EFB8F11C267551552625009E074E1
9231-
C4BCB3D8B484BEB11C222329E89A02A942CE719C20E060BE2B55929D1B29E660
9232-
4D10712F43772930846A544B1554CBC5212065A454BBA475899E9093689C4C95
9233-
A913053A795EEBBC4E9E805133FC4024B88A2CDD43594EC44713DD8891645854
9234-
C8958BCA0D63B603123F0ECE4B3EA45EF079F80106620F914C99C8E6B290BF95
9235-
08AC30829183C9E789491C3471E3DDC07D4C24BBB0AFAE166B8A437819ED404A
9236-
EB56B77BFD579D0E4C9B0A6D5CFE90A1BB28A65DD8FC1326365BB25110BD83A3
9237-
8D0761C91636FBEBF16CB01D3BAB77632876AF45ECC08405CB027D281AC24103
9238-
E172030DE53AEA433A0E541830937168921787AB5A7939CEEFBF890ADF2618F0
9239-
1882C02D33F62212B13344D2FBD3426F3C87BE5F16FAE38ECECC25109DE8415B
9240-
57B32068EB6CC6E8E427A4914AD37E01DF9693A72F9EAD534BE33D5A63B55FDA
9241-
EB63D8E3B35047DA542621974BA377F811CA5695612A358EC4FC24DE7EECC6FC
9242-
2CBB468302DBCE3D6DC9E6EC23B2AC6C6598F3F03321F957E02E91E950577B5F
9243-
D3CED248C26515B040E7FB1B91F03F02CF12C416081F7C0000000049454E44AE
9222+
CC9EBA88326A9420A83611241408E22A5A042DDA042EDA448BA04D0411911BA3
9223+
885233CB522C212A4734C71E624E997A1D46C76966EE7F3BFF7F27C1C39CC7FC
9224+
E77CDF7FCEF9AF0492BA2BAFCEE9ABF4338A84AAA5040C773EC4B9B036199B21
9225+
C3D8787C86BD30BFC72E0DB79D4E8B3C89283C76ED4DEFDD96AA8AE989F1D5FE
9226+
92A0025BE484D822B6F1672183FB83F3887E4926CD1F5F0B9FDD0CFFE5195918
9227+
45DAC2C1096FB9129D551035158C911F999110F90D0C4E5A0814E5634FF95A04
9228+
836E4F71689379B4E5A9BE4C90594A783706428A4B91A1D1894A7D51081A0912
9229+
A92C1A65F017B8D050ED472058E04E7B8D3BCB049AA7408CC2FFC81C40A8154A
9230+
4CB1B9256CF666B0B550C2857D6BA04CA9A7FE6384F059558594185402385D38
9231+
31EF2C3A2B6160228B9EB124744D81542667394E107030DF952AC9CE8D1473B0
9232+
2688B897A1BB14184235AAA50AAAE5E210903252AA5DD1BA444FC849344EA6CA
9233+
D489029D3CAF755E2747C0A8197E20125C4596EEA12C27E2A3896EC448322C2A
9234+
E4CA45E58631DB01891F07E72417522FF83CFA0843D1C748244D64B219C8DF8A
9235+
045618C1C8C1E473C4240E9AB8F16EE821A6129D3858538D0D8521BC8CB423A9
9236+
F5AABBBDFEEB4E07A64D8536AE7E48D35D14D32E6CFE09139B2DD9C88BDCC3C9
9237+
FA23B0640BDBFD75E81A6EC3DECAFD18893E68163B3061C1B2401F8A8670D040
9238+
B8D4C0D1521D75211D87CB0C98891834C98BE3152DBC1C170FDD46996F1B0C78
9239+
0C41E09619EBEAEEB6D344D2FFD3427F2C8B815F1606638ECE2DC41199EA436B
9240+
67A32068ED68C4F8F427A4904CD17E01DF8EB3E72F37D5AAC5B13EADBED22FD5
9241+
FA180EF82CD490369448C86653E81F7D8292752598494E22BE388DB71F7BB138
9242+
CF6ED0A0C0AEA6E7CD99AC7D4296959D0C0B1E7E2624F70ADCC5D3EDEA7AEF6B
9243+
DA590A09B8AC3C16E8787FAB27FC0FFFD212C168E9934F0000000049454E44AE
92449244
426082}
92459245
Locked = True
92469246
Text = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1089#1082#1080#1085
@@ -9341,28 +9341,28 @@ object MainForm: TMainForm
93419341
89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
93429342
61000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
93439343
02CD49444154384F55524B48546114FEEE6BEE9D71B4B09C1AECE1E88C61600F
9344-
CC9EB688326C9420A83611241405E22A82162DDA042EDA448BA04D0411911BA3
9345-
88D21E539662095139A239F61073CAD4EB303A4E3373FFDBF9FF3B091EE63CE6
9346-
3FE7FBFE73CE7F2590D45F7A754A5FA69F5024D42C2461B80B21CE85B5C9D80C
9347-
59C6461353ECB9F93D7E61B0FD7846E44944E1A12B6FBA6FB7D6544D8E8D2EF7
9348-
970515D82227C416B18D3F7359DCED9F45EC4B2A65FEF85AFCE47AF82FCFC8C2
9349-
28D2060E4E7A2B95D8B48298A96084FCD09484E86FA07FDC42A0A4103B2A5722
9350-
18747B4A43EBCC86D6C7FA22417621E95D1B08292E458646272AF54521682448
9351-
A4B26894C15FE44253AD1F8160913BE3356E2D12689E22310AFF237300A19628
9352-
31C56716B0DE9BC5C662096776AD8032A11EFB8F11C267551552625009E074E1
9353-
C4BCB3D8B484BEB11C222329E89A02A942CE719C20E060BE2B55929D1B29E660
9354-
4D10712F43772930846A544B1554CBC5212065A454BBA475899E9093689C4C95
9355-
A913053A795EEBBC4E9E805133FC4024B88A2CDD43594EC44713DD8891645854
9356-
C8958BCA0D63B603123F0ECE4B3EA45EF079F80106620F914C99C8E6B290BF95
9357-
08AC30829183C9E789491C3471E3DDC07D4C24BBB0AFAE166B8A437819ED404A
9358-
EB56B77BFD579D0E4C9B0A6D5CFE90A1BB28A65DD8FC1326365BB25110BD83A3
9359-
8D0761C91636FBEBF16CB01D3BAB77632876AF45ECC08405CB027D281AC24103
9360-
E172030DE53AEA433A0E541830937168921787AB5A7939CEEFBF890ADF2618F0
9361-
1882C02D33F62212B13344D2FBD3426F3C87BE5F16FAE38ECECC25109DE8415B
9362-
57B32068EB6CC6E8E427A4914AD37E01DF9693A72F9EAD534BE33D5A63B55FDA
9363-
EB63D8E3B35047DA542621974BA377F811CA5695612A358EC4FC24DE7EECC6FC
9364-
2CBB468302DBCE3D6DC9E6EC23B2AC6C6598F3F03321F957E02E91E950577B5F
9365-
D3CED248C26515B040E7FB1B91F03F02CF12C416081F7C0000000049454E44AE
9344+
CC9EBA88326A9420A83611241408E22A5A042DDA042EDA448BA04D0411911BA3
9345+
885233CB522C212A4734C71E624E997A1D46C76966EE7F3BFF7F27C1C39CC7FC
9346+
E77CDF7FCEF9AF0492BA2BAFCEE9ABF4338A84AAA5040C773EC4B9B036199B21
9347+
C3D8787C86BD30BFC72E0DB79D4E8B3C89283C76ED4DEFDD96AA8AE989F1D5FE
9348+
92A0025BE484D822B6F1672183FB83F3887E4926CD1F5F0B9FDD0CFFE5195918
9349+
45DAC2C1096FB9129D551035158C911F999110F90D0C4E5A0814E5634FF95A04
9350+
836E4F71689379B4E5A9BE4C90594A783706428A4B91A1D1894A7D51081A0912
9351+
A92C1A65F017B8D050ED472058E04E7B8D3BCB049AA7408CC2FFC81C40A8154A
9352+
4CB1B9256CF666B0B550C2857D6BA04CA9A7FE6384F059558594185402385D38
9353+
31EF2C3A2B6160228B9EB124744D81542667394E107030DF952AC9CE8D1473B0
9354+
2688B897A1BB14184235AAA50AAAE5E210903252AA5DD1BA444FC849344EA6CA
9355+
D489029D3CAF755E2747C0A8197E20125C4596EEA12C27E2A3896EC448322C2A
9356+
E4CA45E58631DB01891F07E72417522FF83CFA0843D1C748244D64B219C8DF8A
9357+
045618C1C8C1E473C4240E9AB8F16EE821A6129D3858538D0D8521BC8CB423A9
9358+
F5AABBBDFEEB4E07A64D8536AE7E48D35D14D32E6CFE09139B2DD9C88BDCC3C9
9359+
FA23B0640BDBFD75E81A6EC3DECAFD18893E68163B3061C1B2401F8A8670D040
9360+
B8D4C0D1521D75211D87CB0C98891834C98BE3152DBC1C170FDD46996F1B0C78
9361+
0C41E09619EBEAEEB6D344D2FFD3427F2C8B815F1606638ECE2DC41199EA436B
9362+
67A32068ED68C4F8F427A4904CD17E01DF8EB3E72F37D5AAC5B13EADBED22FD5
9363+
FA180EF82CD490369448C86653E81F7D8292752598494E22BE388DB71F7BB138
9364+
CF6ED0A0C0AEA6E7CD99AC7D4296959D0C0B1E7E2624F70ADCC5D3EDEA7AEF6B
9365+
DA590A09B8AC3C16E8787FAB27FC0FFFD212C168E9934F0000000049454E44AE
93669366
426082}
93679367
Locked = True
93689368
Text = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1087#1083#1072#1097

Main.pas

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,15 @@ procedure TMainForm.LaunchClient(ClientNumber: Integer);
11361136
);
11371137
ExitProcess(0);
11381138
end);
1139+
1140+
FLauncherAPI.ValidateClient(ClientNumber, True, procedure(ClientNumber: Integer; ClientValidationStatus, JavaValidationStatus: VALIDATION_STATUS)
1141+
begin
1142+
if (ClientValidationStatus <> VALIDATION_STATUS_SUCCESS) or (JavaValidationStatus <> VALIDATION_STATUS_SUCCESS) then
1143+
begin
1144+
MessageBoxTimeout(0, 'Обнаружено изменение клиента!', 'Внимание!', MB_ICONERROR, 0, 5000);
1145+
ExitProcess(0);
1146+
end;
1147+
end);
11391148
{$ENDIF}
11401149
end;
11411150
end;
@@ -1202,8 +1211,6 @@ procedure TMainForm.ValidateClient(ClientNumber: Integer;
12021211
end;
12031212

12041213

1205-
1206-
12071214
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
12081215
// Запуск игры
12091216
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
@@ -1237,7 +1244,7 @@ procedure TMainForm.AttemptToLaunchClient;
12371244
GlobalMemoryStatusEx(MemoryStatusEx);
12381245
CurrentRAM := StrToInt(RAMEdit.Text);
12391246
Delta := (Int64(MemoryStatusEx.ullAvailPhys) div 1048576) - CurrentRAM;
1240-
if Delta < 80 then
1247+
if Delta < 128 then
12411248
begin
12421249
ShowErrorMessage('Недостаточно памяти для запуска игры!' + #13#10 + 'Уменьшите количество памяти в настройках!');
12431250
Exit;
@@ -1586,6 +1593,7 @@ procedure TMainForm.DeleteCloakItemClick(Sender: TObject);
15861593
end;
15871594

15881595

1596+
15891597
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
15901598
// 3D-скины
15911599
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

0 commit comments

Comments
 (0)