Commit 4021fc87 authored by rarnu's avatar rarnu

add: 更新图标,修复读取MDPro3安装信息的方式,增加调用MDPro3进行测试

parent cbe6afdb
......@@ -211,6 +211,9 @@
<Item>
<Name Value="RunError(103)"/>
</Item>
<Item>
<Name Value="ESocketError"/>
</Item>
</Exceptions>
</Debugging>
</CONFIG>
......@@ -11,18 +11,16 @@ uses
{$ENDIF}
Interfaces, // this includes the LCL widgetset
SysUtils,
Forms, Dialogs, opensslsockets, untData, frmHome;
Forms, Dialogs, opensslsockets, untData, frmHome, untConfig;
{$R *.res}
var
AMDPro3Path: string;
ADataPath: string;
begin
AMDPro3Path:= ExtractFilePath(ParamStr(0)) + 'MDPro3.exe';
ADataPath:= ExtractFilePath(ParamStr(0)) + 'Data';
if (not FileExists(AMDPro3Path)) or (not DirectoryExists(ADataPath)) then begin
ShowMessage('请将残局编辑器放置到 MDPro3 的安装目录下');
AMDPro3Path:= TConfigReader.GetMDPro3InstallPath();
if (AMDPro3Path = '') or (not DirectoryExists(AMDPro3Path)) then begin
MessageDlg('提示', '没有安装 MDPro3,请先进行安装', mtError, [mbOK], 0);
Exit;
end;
......
......@@ -44,40 +44,72 @@ object FormHome: TFormHome
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA86400000368494441545847B5974D
4F13511486AF2C5CC0C2C4E8CA8D0B1317FC0BA3919FE0D28DF80334C144234B
26D11F202E30C61D311A3F0A22C6B030BAE01B2A525A68994E5BE837054A292D
C7F3B67387E1A6B4C32D347903CCB4F3BCE73DA76718219ABC22232260F9C4A3
66EF39D373E63771D97D416B44101B1894C71263A2CB3F2C2E9E29545E6C755C
5CB23E8ABDA84FBCA17ED181E36E036CEE86F54944F9D8DB733140242E4447C4
10A0D28434E08217F9DCAD7331808BC20447FEAA061EEB7C9FF9D34D995F37C7
A35F44988F15AD5171FBDCE0F2C230111FEB1AAA987D544D0ED261DCA0C25C0F
2D7F10C4FDD7D6E27047F844F3A64FFCAB556D2BF3BB9BE1AFA9F6AA6ED361AC
DF39E7BCEFFB55DAF86B5002F2D715975A342866CBE29FA1899E9AF1130DF045
1F63DAA5103B2A079CF6FC54319F5276E10165167A1DE5432FA874C0A7CB7515
F78976593BA5BAB6F7880AACAD2291B530D0DC80DB5962545C47CF0B7377B9F2
E70C7F46C9896B949EB947E5830AED33142A49B002DF56E0793610F56A40C231
70E839E2AE57FDB0F67B8A4D94CA9523B85DF5AE52B5AC1CF0DCAE4703B1CFA2
33F2559880C77CE20E7A260D940FAA949EBD5FFF7BE949CBC8117B9EC1806777
88CC790F2DC086E3197827BFE78E81F9DE7AE4FB5586F7512E3274ACDF8D2277
C3336C60DD8B017542A581341B70FAED31725939E0699E637D03E35728177C79
BAC8EDD8253CC50622731E5AD02881847F808A1EA65C8D3CC350549E2A102559
DA06E26C00DF6D67CA79DA31E1EA94AB91BBE19B5B4461DD0460A0D1623936E5
0D22979503BE0103B39A2D882D0E909729572347EC129EC813ADB5634027F21A
9CC180C7DB3160710288FBB4913BF01C518CB53AA3D902DC44B04E5B4DB91A79
AD721B6E65DB30809B0826BCD594AB91BBE130109AD64C0006B21EA65C8D3CC6
5080A399BAB40DE026828DE64C392F17C4DD2C7237DC64B899260AEA26801D8E
A5A22E1677E46ABF65E580AF331C0A4E69B60006B0CBDD8BE558BF79D06AFD56
2297F008C32329A2155D031136A046DEACDF3272540D70D896BE01DEE1495E2A
A78D5CC2D792BC05598149CD16E026D234727BD2D5C85139C0ABD026D1723B06
742297F010C3216D03819F3D7C2331686DC6E0757AA4D034FFAFCF0ADA5A9932
78D00C0A484D1A0C3DD2D28F16CF058D1E18F024D3CE9390FAD9939E8CFE037F
A24D8E4721D9C60000000049454E44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000076D49444154785EED9C69
881C4514C7D7FB42F1BEC003414151BCF042541444FCA011258A784413B23B47
D6180415AF100C2AA828DE4A24AC0782244605F1CE7E48B2533D59138F78B006
83C14D76A76A369BC48812CDF87F3D3332D35D3DDDD55DDD53EDF642137AD255
F5EA57AFEAD57BF5BA7B7AB2BF8C402A08F4952A27172C9E2F3031BF9B57BECC
0B3DB5DA6EA98046424E5F57DB1BC05E2C30BEAB60899A09579E89975203316F
F1E74D80E6942115100BAB264EC833FE8F89004926E32142C83B4C85D794CB68
88F992982B993AB30AD6F859495C3956B9443280C3588F275B7F3716A21460B9
7259521670EEDA2D07BB07902FEE5B2DCE4F05445301D200A602A2C9005301D1
7480C6434C0340A321A605A0B110D304D048886903681CC43402340A625A011A
0331CD008D809876805D87F87F00D85588DD06D83B3CBA7F9CE1B4BED2961363
0D8C741B20750E01DD7571419C120011B6BA2D0318719E400B1F8DE3506B4A68
60933D8E33CFC3B1EAB3D0C665612E44ADD73B35794A018CA8C43D385D7C2603
1881620630023CDB9A671A188D6006301ABF4C0323F2EBC9317161DE126FE0DA
DE342699150E41F59EAF371F50B02AB3B1ADF93103180260B3C8FC5A6DF7F983
B53D2354E15FD4045FD85FCA7A0A5E6ED5E62349A3EE2A8D1D45F741CAC5FE8C
89004973E6ACAE5E0CAF64012CEB67F8F737999B87B56E14BF7F4E6E601EE928
D3DFADED113B30670326019CBDBA720C802CB4C18448F444B931248A3E912F57
8F4B0CA40900F32B260F01B8A701E08F30E05C6518FF0BBFBDD03BBCEDF0D841
761B200208D7C05A6ED602CEA9B58CF38255BD315688DD0248EB15699D2F38E4
6D43337FC6731FE07A95BC0DDCBF62DF33F153A01018F2BF7B876B7BC502B21B
00EDA4F67AC84A9ED05E4F76FF32678919FD6B361DD1A9E3456BEB61D0E25B61
683EED041386E6133A3ED00E316980B42F6B6893141EB4EB23CA8C0DD351F4E5
D44E0383A5E20BEDDB9FA40136A69F041E9FC85BD5E961C039CB4013A7E1C2FA
27D3703EA0A38DFFEA4812A0E7D907D6B27C79EC249D1DEB1D9E381EED7D2783
88E9DCABADADA400D21E0F0660ABBB43FC7BBF752E6C67A95EB4F9AD7B9B2376
68F3919302088BF9B6441BC64953C2020A520EEBE9D1B627E39ECECB8294F77D
26098073D8F8992E0B094B5BB4AA57F90AD8F240AEC4AF852178AA581237A894
4364E652E9CB442571814A3DD267930048313AC9D4555ACC51477FFB7B23FC5E
95CE6306BC2CF15896AAD4D11580E4A6416BFE6C131EAE96AABF0A0DB6DA01F0
1F543A4F911CC8F17BDB20587C274D71957A5CCFC6AD8110D8F52A19A6D36255
A1D1F9B50E801B54EBB0DF4875AC85F6ABB551FEE20688A9F78E53687ABD4B55
661D003170E74A2CF287AAB2B43D1F3740B705E4D530713B1D00A9E332798C05
386B68F2505D23AE0BA06C46A8AEC789696071A8728EC4FA3ED669C429FC042D
5944EB64EB85DFAAED06406C973CB308CFDDD2B97EF19053268A7E87D6C238A7
30EDF354166D72B17CC35B0122D54526EEF60282FEDE29D9CE4C3312A0EDD43B
3A4C212ACFCED9E71F3ABED9C04B9E6D307E9D6B5099B8DD4880E43948849DE5
252C4D5D2D00E1367AB6C12A37BB648A12058A730AD74FD6DA352A67F1FBBC01
C26F756D98D5341246E22BFA0E84B796B77B34249FAA4B999811A110957BB4F9
EB7ED365E64A7E20BDC9DE7AB9A22A8CFFEA7CA69F8983FCEAC6003DE71AD472
F574BF729EFF1FA706D27ECF75D286185D1861756D63B04C949CEEDC8CC10DFB
8691C92E132740BB7E8BAF70F8C1BB8A2BF9B1AA02EB0058DF97F2BFDBE5116B
5465496C0A3776FE0B249BE979AA42EB0088E9DB2731524FAACA9228C05CB972
B6C412AF574DFA71028466FFA2D4717C8B4B169D8EB4894E620A37B4F01B1744
6C685500385D30DCBFAF52BEEEE1B45B743A6F8EFC7DAEB8D7407B9098C0877C
5CC28FD1996E500876DE8C2596438B76D2BAAAE2BF9275C6F4DD28594AE6046D
BF2B56B8D9289DC5D294734F65FE5E640D08400003F896640047E70D6DDC2F40
F1CE8F24A181B61696C5F5322F8352D32277A2430598A60F4ADB453683967693
0268AF858C2FF570D51ED6D2194725D8B2DCEF31681F6BD3FC240136F6611BE4
10F900E536EB00491B634CDBD7A4F0ECDCC388E720AD42260990DA2D0E55CF70
7E54ACA5A32338B2BC320A44CA54A5E472E92031B183C2FA51EA77954D1A2009
20FBA858BB7B2506296F30E85E915CC65CB97A356560794673EAF02ED70ACF5E
DC65DF0F2C576FA2D4071D975764C48E5633B1A963F88A1284987833C77811D7
157D4C9C4632511616C18065CF619D1B401DE33E61B071445C2ED20EAFBEB08B
995A62709D02A14C3C2013BE9E762196C7D93E40AF54D9332A432E5A95530265
79468914DB59A63C27138E32F2E96C169A34A11524BE8049A1FD302780CA10E5
A9176A814CDFCE1344E69D8ED148345FE83C3CF2ADD79D173D0923F2782209E6
4DD294FA0A0D59A22C6C28ADE48BFA4746F6F11A65DA821428EC4E7B46C77754
3BC8B78D7C633A91D3B51552D6422A60BFACC7C423F544EEF82E4AB40C22204D
3F321C94B94ADA4B9A65BFD24AEF82D03D8C1D6D8B1299A64104CE9EC9086404
4C24F02FB926629EA467F4960000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 64
BitmapSize = 40
BitmapPadding = 2
end
object btnOpen: TD2ToolButton
......@@ -93,54 +125,48 @@ object FormHome: TFormHome
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000051A494441545847ED967B
4C95751CC6DFE69673B5C96C6BF5076CCEC9EC0F0332900EA122655E4008A20B
28927641292F74212F111410898A629AB730B40C69CB588524036F8344044538
7814413D8AE03807389C1F0CF48FA7E7F776CEF19C4387CBC2FF3CDBB3B1F7F2
FB3CDFE7F73EEF8BA28CD2AFC3CF2FAC4BA339D1E5EF2F3ABCBC8461E2C4E3AD
6E6EA1A3B4FCE0CB980203334548087A2322D0131A8AEEA020747A7BA3DDDD1D
B7C78E4D7FA026E4E412DE171B8BBBF1F1E88F8B434F58184C1A0D0C9327A36D
FC78DC529490076642C62E2797702427E35E42027AA3A2D03D63068C53A6E0CE
84096851943297060A0A94317505CA86FA02454FC185F4F21A79ADF3425DBEBE
6619BB9C5CC2FB972D434F78384C0101307A7AA2CDCD0D3714A5DBA5010BDC15
D8E1B8BCD679213E7066B9E7327639B9849B8383D1E9E383760F0FB48E1B879B
8A627269C03AB9B9793B603EF79F92E72CC9E89D17924FBB7CE0E49ECBD8E5E4
126E9834C91ABFDC82D2C10CA88BBB825B8F3B6F4D41DE7CACDEF9272237DFC6
C2B4162C5F710C7F042D55639793B72F7047C7DEA9E83AED0763F954DC2E7B1A
8D8563B4038C58171ECA407389B76D3BB2F7A5226697C092BDBD58B4BB079139
DD98BBB1139A947664CC4981317132441D6BA9652DEB59CBF3AC65256B798AB5
2C71AAE5700D580D9EA9BFA4C2E3F3FAB0EAD05DAC38D08FC53411966DC2AC34
037CD6B5A1A8682DFAAEB0964DAC65236B59CF5A56B396E5AC65296B596C57CB
911A589FDFAA4E2EE1C985C09AFC7B58BAAF1711DBBA313BC388E7D6DF414CD6
09158E16D6F21A6BD9C05AD6B09615AC65196B596457CB911A88CAE954639793
4B78C2C17EC4EEE941F85626906E5413F04E6A522797F0FE46D652CB5A56B396
15AC65196B596C57CB911A08DF6254F75CC62E2797F0A8ED66CCCBEA44406A3B
A626B5C227E9AA1ABB9C5CC2CD1758CBB3ACE569D6B284B52CB6ABE5480DACCC
BDA53E7072CF65EC7272099FC9FD9FC6F83D135B109D59A4EEB98C5D4E2EE186
72D6F238E32F56D072D4AE968E06AAD07CECD961BD9406796B0EFBFE8B3F2BA7
157B03BD37F70FFBE6D130C037EB350703AD55D1AA01FDA90510370EFD4FFD04
71FD00B51FE2DAF710CD7BA8EF209A76407F3248E5D41D5636D919A8C2E5DF9F
524F18B55F8E10FE23417904E552FB08DA6D817D0B71751B950DD1B889FA06E2
4A0674BFB9A91CED2FCA749B819E9BB9EA415DE11384D3BDAB04AE1F24EC070B
6C2F41BB38D54E6A3B415BA92D04651194A9C2C4E5AFA814085D32C4A5F53054
C7DABE2B80F288CDC0C0F85D47289A722C536D266CA305964E1093D349D8E784
ADA33E8368F8844A84D0AE86A8FF10FA52AFFBF1CB0F83F561B2C55FCF1B078D
F06B82D2A85482BEA03610B4964A22E86382D650AB08FB805AC16FC2FB1017DF
A19642D42E81EEC863F7E3B737A0C6CFBD1157E554AE2354610D9F521F59602B
094A206839F51E41CBA8B7098B85B81043BD0571FE752A12868A998EF13B1BD0
1F0F1832C27FA78AA7DEB54C1547D8620BEC4D82A2206A22A97088EA508A8D3A
37977A19FABF3C1CE3773660ACA6E3212214B58B088B26E80DEA358222A83082
4208994FBD0251F512351BE2EC4CEA45884A0DC499E9D0FDFAA863FCF6067447
1E1F324251F32A410B2D53CD236C8E051644D00C8224EC05C2FCA8E721FEF6B1
C970D27360FCF606F425CF70B2C1231455C104CDA20209E27655FA13E44BC834
07983DD8FAB7FEE89303E377DE82D178BD0EB54643BEE2EFF06F596D81621AEA
A6513B7F5829575F3E0F7F0F13B04BE01F8D6351538EDEC3CA0000000049454E
44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000045749444154785EEDDC3D
68D5401C00F0FA81A08BE8E2E0228A4E224E4E82A083834807E9E0E20742DFCB
AB5604075DAC82A288D0497171109C0471119DC4416C2EAF151707C141B416DB
77D7670741FC8CFF7BAF91D7E4F2EE92CB25FF4B530894F65D92F7CBFFEE9FDC
470606AA9F4AC00A8151777693E3B2930E61971A848D15B5C1F12F0E4FCDACB3
022D3849803BDBF0D877D87C24DB736B1001EC0412B4F0C5C38F38F4D05F0555
E60B52400E8A1BD171DBBB10E305118917D169B6F685011D8FDD6C7873BBF3DA
E078334BCE81D08FF0B7F7A1F3C289280484849267066C78F4432F1634296F6A
136CB315885801F905B4021133A01588D801D123DA00881AD11640B4883601A2
44B40D101DA28D80A8106D0544836833200A44DB010B472C0360A1882800097B
67AC4B8DD041A31D2328003D7ABF02D4B8CC9D7E47427F1A415C0E11C8ED1BA4
75D4C8A0D67201E4884E73762B44E255D81E01E6E3A41B74C0BE8E44F17202D4
68053A45EB1E3B5E016A28C250C0B10A500310AAFE6004D06DEFD5D8A5BC2886
DB18F959AA7D62E8ADBF06105FFD4724F4E998EFAF542B9DF2536502E404632F
FCD57542F7F3EF651CAF9BF904E3C2390F6BA6BCF6388A55809AD7A102AC0023
02CECB850DC353EDF59A346AC5CB14817CA6194C0ABDED10FAC7F1E82FF8FDC6
80EFAF509348F9A9B2002E4ED37B10992845D81DA38865008CC30B30E109C51C
A2ED80323CE3883603AAE21945B415B01F1E249069A8B62D51076DE6D5D94640
19DE99C9B96DF5E6FCCE5C106D0354C10B6E487241B40930095E6E88B600A6C1
5341E437DE296FA1BBC56C0094655B481A976508FDAAF388CB8EC8CAC7FE1F3B
A00CAF936909FD0B8875198270CC04CAF3651DB2B256022AE1056BFB2488B549
B607A017C4B736AD43A503ECDBE6F1A56984FE100C200923B13F1EBB9E1A0F6B
1BA892309C263DAC8268140F23A00A5E10313244E378D80093E0292112F62DE6
714EAFDAF6D6792C59380D9E1451B0781C1EEFB2C3C312813A78491033C7C300
98055E8008AB3E2FC44D9133825734609678B9240CD1FD4E516D6029F08A8AC0
D2E01501582ABCBC014B8797276029F1F20294F5AA8C78F307551FE80BCBB671
27683A0BCBF0F87D1B1F45E30341324474787944207456DE5559FF2143448967
1AF0D4C4C2463ED147D06F17EDCBEB138968F14C03D6DCAF5BA26F45A2D3235E
6B073C5A45260289AA336ABC8200C7F97155B2327ABC22016588D031F0397E0C
23E32E2959F6EAF77F935938A60A772230F851C9D2A1F76A65DB9FA783577404
264534D625A583587404F62242A43DC9BD3F4F072F2E02A1FDB9C2AB5FD22DFC
CED3982A7C4FB45F38E6012BDABC3078F7258B19BD7836B4B4540498F45828AB
ED92469CAF2FF3E87CD22F26FC7CC680E8F10248C0183501C8DF4B9D76BFD6E0
7510612D053C8B5E8348FC9DF60B2F4EF289BC21031EE59E25DDA75D783DF5B9
E6B6B6C3173E0F98E369363E852CDCC69E9BF8B416E6E09D56DA1F61B71CA231
D14737A356E52B814AA08C02FF00BDC136C379D4EFF00000000049454E44AE42
6082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 64
BitmapSize = 40
BitmapPadding = 2
end
object btnSave: TD2ToolButton
......@@ -156,51 +182,42 @@ object FormHome: TFormHome
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000004C7494441545847CD966F
4C557518C7CF8B36E72B99EFB13585F1221BE4D602923F528AC015C248114102
71246BCD5B8BA58B648A53C810B142B13F4A6B6DBDD14D81322E9AC2CC45B9FC
D3263162702F10F772B95C402E6E7E7BBE87FB63B7CDE33D477AD1D99EF9E6E0
E7FB7D9EE7FB9CAB69FFB767D7D700ABAC05283D0B9448BD71061819FDDB5265
7F0A647DE89CB39D78986DC9E3BFE002267CC757C0C0A0D352D93E11012780E4
C6D1407AC3439B69113B9573011707E1455F02F7FAFE32ACCD4DC0AB9F0139E2
5ABD47786623B0F138905EEFBD6F5A80DE76C2C5359D13BEFD0BE0D61FBD86A5
E06CBB7A6F01DE00AC97322D802D57F0C220BCE073E0979B770D8BCE3749CBD9
76F59EEE9CF063C02B52A605E8700187C2F34F035D377E372C0567DBD57BA1F0
B47A0B02D87205DF26CE09DFDA0C38AEF5582ADDB980095FF7B1050185326FCE
3C14FEFA29A0CD71DD5285C2538E5A10501002DF22CE09CF3B0970D37383DBCE
65D3DB1EDCF40CD9F67499F986E0CC5FA673714DE784277F64418072FE28788E
444DC155CCCCC0D7D65910B05566AEE0435E3CF133E099774EF84BB5160428F8
6BD2F6C53E0A9E70C48200CE9C70CE5C3D2E970B564AFD1D9D131E7FD8820005
E7757B1201A3E7CE61AAA202BED4540CAF79119D89F978ABB4CDFC210ABDEB56
4730DBD484A9AC2CCCE4E662DA66C3A488F0C6C6622C3212AE254B6A4C5D4375
D719332BCFDC952B3A7CB6A80873E5E5081417633A3B1BBE8404B8A3A230B26C
1986342D2BAC8885BB2E19B73282F1B232DD39E1A8AAC20319C34C5E1E269392
E08989C1E8F2E5706A9A23AC8085036351C0444A8ADE763A273C505A8AE99C1C
F81213E1898EC648440406346D32AC80D0EB666504DEF8787DE66C3B9D13EE4F
4B83372E0E632B566078E9520C6A9A2FAC007EC7D575B322C0979FAF2F1C67CE
B6D339E1EE952B55FB39828EB00232F81D0FDE75ECD2E407E2E3EBBA3D03FB6A
2E22AFCE854D079D7873F70FB8905AA2B79DCEC7322331DEBC1A13575FC078F7
73F7DDD79EE91CFE31C2F8279A82F347443878CB07D528689AC28EE6196C3F39
8DCDC727915EEB45C2FE311C5ABF1F1E7B14A66E492CEF482C6F4B2C7F9358FE
2CB1FC496279C92096FCA211AEBE68A9F2354B919B9E1472D779DD926BE77478
F99959BCFDCD1C769F0DA0504464D7FB9072D08DB8BD23686D7D1FB3F724967D
12CB5E89E56D89658FC4B24B62D921B16C7F442C159C9F5223384F6BC6D179E7
84579D07F67CFB0025A76790DB308975873C787EDF280AEA2EEB70382596FD12
CBBB12CB5F2596DD124B87C4B2D5442C8D9626A376C2CFB6D339E1152D01149D
9A46CE31E9408D47EF406C659FEE9CF040AFC4F28EC4B24762D92DB174482CDB
4DC4D248C08623E37ECE9C6DA773C2F31AFDD858E74562F51856570E23AEF24F
BDED744EB8FFA6C4F286C4F2AAC4F292C4B2DD442C8D04ACAD767772E13873B6
9DCE094F96F9AF91F647DB9DD876B8559F39DB4EE784BBBB24969DD2FE760DCE
3613B1341210B777D8C66DE7C271E66C3B9D131EF3AE4B1770FEBB2DFAC271E6
6C3B9D13EEFAFE295DC0609B9619F62E3CEE8567DF73D570D65C38FECBB6131C
AC038C1AB79D0BC799B3EDBAF3F93AB028B8FAE355F6A1AC28BBD3F1B4BDDFCF
5AB5C7D911F5CEE08233468DDBDE7F41F3B3D8F6453BFF4F9407FF937F00D296
D8E9FC8D61A90000000049454E44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000003AC49444154785EED9CCD
6B143118C6ABA0DE54D083200A0A0A0AE2077814C18B17C1939E1451A1DDD969
A917BD69F124E25D51D0FE017E9DEAB122429B59AA452808BDE841B0DD645D2D
2888D6F109DBC26E777693124813F629848526EFECBBBF79F2FD267D7DFC2381
A008A459ED743953E365A17EE233EFF594646A2EC9E4E3A452DB657C51C9A41A
2E0BF9AFD7A115FDFE44A82AF81CE808516782F41FC2EB5CEBA0C6779D010A75
87F0CC4D56A9523D5A0811EA7B5600F025FED73D09F9BDC5AED1769AEDFC9619
5FF9DB50253F9AFCD48A6B6322E4D942804B0F6BE9348C8D260AC091E9D62F91
9F6CEC7C962967F347DA41A811930FA54C5D224050224093540CF90448808E04
9ACCA1A61D18E43FC078F5555291176C9E4C05360314326BEDF53BF48AADD0D9
89681E43426D2E186A3D34A9900A5C22343C5DDFDA3E9E93A304682240809684
0CC5A840478E044880ED047CCE85A9402A900AC40C28DEE52C5661C72ADC3F95
6FC0407AA179308D36F896E9B19C893411C2DECD6554A3DF0D88F2439AFDD846
8026022BF2FBA716B60F08757024CFD7DB9852813694BA942140027424E0681E
9502D12B7E4D2AD5934125A1AE86BC2BF726CE0D79999884ED655B13F06E4607
10F13F6956DD1F04C0FEA96F5B10D5F039268868661E99E0E97C2F0AD45F9454
E6F616864104161E9708B90878F7CFCDE41B8302A89DD183DA92A89E280999EA
30B9E0123A924151DF63036EB98C3705AEC6A998CA12A0E3DB2240027424E068
4E0512A0230147732A90001D09389A538104E848C0D19C0A244047028EE65460
0C00F5D210F6676FEB139E58D27A1D411AC362EA191BB65E14087077635A4C5D
DA90FF9B4E548F99207A0118C3426AF1F15579230880A8BE4FE253A0CAF5C1F2
2000EA300B2C95BF00C81A3EEBA127F8F9053E1AD5E7754FC4F42663CDF7D206
C60AC7C66F02B4A1D4A50C01C602105B99A774A4284E518E849FE4750403ECB6
61EB4581007625B6610C7A613530A1769A20FA0198C9C9D8006A7F53A1AE0501
103391B1180122CEFA62100007C5FC611D131815449C761F9A9DDD140440ED84
76269DA81D6A4482869D0626ABFB4CE096F3BDB481B6CEC4588E001DDF1A0112
A0230147732A90001D09389A538104E848C0D17C750A14F279D1A53698788FF6
6CCAE4DBD5DC1F782FAAE9D81A1DA1C08567C70B85DD98D3CA4542EC7209AD90
337D79BEAE63CB10E5B12D5F4AC45DB1369BF1B82EB3761E8BA4EF799F744389
58AEFB85A36C4F6DCED6B52853AFB0E85B327A3DD95E2BE0D8E1D39C0448606D
08FC0771B0369F7C7AB9CE0000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 64
BitmapSize = 40
BitmapPadding = 2
end
object btnConfig: TD2ToolButton
......@@ -217,97 +234,129 @@ object FormHome: TFormHome
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA86400000441494441545847ED967F
48DC7518C79F3A8BC68A15CBD95D41B5726050A051A331FAD21FC156A0D07672
E7E9DDB9B3382644248DC4E44ECDE944B34509EA562D4CDDCD3C7F2068138F5A
8CA4C0ADD92C31F5F2CE711EDC3CEF526F6EF7F43CDFFACA79DEE9790A5BD017
3EDCF1E5FBF9BC5FCFF3BC9FE7FB05F8FFBA1332600348B804F0E14472F2A837
3373286836E723E25DF1B069341AB956AB6DA0DF19FAF5D2FA86D6A36B9ED509
F0F177007899967DCF1E2408BC653637A2C974F74620B2B2B25EC9C9C9F15554
5404FAFAFAD066B3615151D1CDECEC6C0FDDDF19F12C0B80EC0B001F41E06620
28E2B48C8C8C05ABD58AA3A3A3E2EAE9E941BABF486007A306C20026801B5F11
40BC108220245084CEEAEAEAE0F8F8384E4E4E627F7FFFFAE212552940D32704
102F0445A8341A8D7EBBDD8E0E87039D4E27B6B7B7A35EAF1F8C14F9AA725402
EC20889FE385D0E9749F97979707A7A7A7D1E572A1DBED16B340B55F52ABD50F
87427039D813AB8C5901F0504C1011BA232F2FEF07AE370B7B3C1E9C9D9D45AF
D78BC5C5C57E02F848826071F6041B93B2D3B62A3BB140044DA6B7C3371A0C86
FEAEAE2E51DCE7F3E1FCFCBCB886868644088A980507599C4107060690B2E689
684C2E4709C060B4725C3F74E86AF846B55A5B6B3299821C390B2F2D2D898BFF
7326B81CEC09362677476F6F2FFBE35AD4CE08CDC499B0EE18DBBD7B7CC5C6C3
17B73D9DD5F9D35BC67C3103E1000CC5A561634E4C4C880004BB481EF86CCD19
130DA23D2D6D2A3131F17E7133896FCB19F9F6BDB38B68C83F861D1D9D2B4AC0
E5602836267707B7286742A552CDD14A5A77C87139CC00676A0116BE04F8AB6E
EF5EBF6B6A0A0B0B0B6D0FBC90BFF31FF1001E3B17406DCD15D4EA0D68B5762C
1B91C567666690BB83CBD0DCDC7C8B8715995258573CF4817A807B7860A5A4A4
245756563AFE74BAF029C3F7D725715DC31C1E38E1C67D053F62E691023CF2E6
514E73B0BBBB5B9C86656565419E1364BC298A3C7543E2E10F3F9976F0D96734
1716C3C5530B1DA8308E61826A18E5AF1E1FCBD4E84FE6E6E6DAA8432EF2CB89
5AF00DA55229DB94B85873CDC8F968E232D5AF082F375C02A17EC5F0D99CA8B4
FB4E17DF7EA0CE7F5FEAD1C7B726DAD05362887CD7EB0D377EFBC3C1DD7161B9
45B784240671104E5F7EECF9C32F727770CB6D1D446CE25741F8F4110E566AD1
AD81500EDFBBAEDB85C65F60FFC9C4D04C33445555959321CC66F3D74D4D4DF1
79627BCEC8F1355B2D82B804C210F465646B6B6BF3B6B6B62EB4B4B49CB0582C
3B36648977CE069C3C5EA509270D19B1CFF79F1A91D21EED50127E8D16862C77
494949ECE3F7DD73017B64F1D357C2D31E0D82E6FE7909A0B4B414D3D3D3FD49
49494FC494095DFDDCFB3CDB57464EE22FD5ED8AE9007A88009EABA9A9B9F9AF
382A140AFAF68DF1525A5046E21F28F27EBF26530DCF82D0780A84DA0763DCBE
FC18891750E42897CBE9A57A9B2E8A7CDF6D92FE8FC8FE0DBA3AE32A325DA977
0000000049454E44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000042C49444154785EED9C4D
6813411480EB1FA80711C5831E444444F460F5A2A0205850F12AFE1C1429D534
BBDB5204B17A2845C54B8B082A5EC483201E14EAAD201EE241B2B36950112F5E
140B5AB33369AD88F883AE6FAA4D93FDC94EF2B669367985A187CC9BDDF7EDDB
376FDE9BD99616FA2302754320C9F85EDD127D3A13FDD44A1968A6683F997AB7
38F061698C27009E43AD0C03C68783015AE225C10B37202DF369BD2F44CD1229
02581EA066F15FDDCF3FAEF20598646227BCC68220FA430436BF758B9F2F3B61
25B21F96EA56AE55368D890E374CB0D281E9DF1BEEBF691FF4E8CBC4BD693D8D
677C4D45B3BD96B1F7780634454F4583C4A873A739B1CE6B30FC5AD52A1040E1
80CF2380AA164416A84A2AA01F01248048024871B24002882480146F080B34D2
F67688C56E42D47F3970C9840415241E7B809D4C6C86D5CFF7E9601662B057FD
8E337F967879868D3D408077C1BD12905009A02281A904AE271F996B55144777
8BBD051240A40DA802D4193F01AFFB18F8C849986C2E212F5B106F0A0B3C3D62
AF06803F4B5F75DE1605C4A600389B1922028834C3BA0798C88EAFD532FC7832
636FF3D355C50736AD05768DE4774139E0DB94EF62FC0F4C004937440258E615
82D972A8C4F133FE9E0056E073DC2553003A410009607902513AEC5A5BA0614D
AE8460FB16F8DB2770EDEE16C79917F6BCEB7A16AE354028803F2EF6B9B2C64D
008180EA5BF16F17C1CC0E0398F51F12C00A00FA6C4F7944000960D12B35CB61
0C5960C17F952654557D60C301847062D8352B8EB97D52D2E2BD6EC5BBB27C53
713FDD143B3C7018EFF406E5FC47E92422EEC7DA07EA56FE885C03CF148CC480
47E9746E03841B5F0B8A336EB9E3B744D6590433ECEB19387CDC6FDB19F4B95D
340E5C377F20D600E5CD436CD6064A0DCA8C4C50B5CDB0EC8D10725C010067BB
9958E6A77447FAF30AB9D15166A383B6DBF6A79C85FFF7370ECA4446183CF97B
5D07D22A0ACC751F02887C02049000220920C5C90209209200529C2C90002209
20C56B638116BF21D7A38DD9F247233D2702CB9F2D74EC4BF4556DD872B905EB
D7D1A68608C98BAA014A41C3B48F352B40953280125CC3CA9F02885F9A06E454
D688DF95072F9500A974EA7931B1DC30C52138F6DE1345831BBCE8CDEB89A7A1
63C324E63D51C98742E5D4EFBB5D87B49A0A9339ED536DC8A09A919E53E56A71
710288A44C0009209200529C2C9000220920C5C90209209200529C2C90002209
20C5C90209209200529C2C9000220920C5C90209209200529C2CD005F04C7A74
8984A2DA74737CB74F09F14E98BC96F1961E65763B4CAEF877790807F9FCA315
879AC97E79F62D2E35137986447E48325A0A88D1A07AF5362EF08AEFB38BE5B6
22D48E4EB4645F738C3EA30CF7BD2F3A0A8891A0F87E3D6E1608F0DE48BF8D50
3B3AD1C30F9C05F25324D0AECA4F66D67D63FC5CADBFCB151D6D1A8908108188
09FC05B97D7C246CC6C69B0000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 64
BitmapSize = 40
BitmapPadding = 2
end
object btnExport: TD2ToolButton
object btnDebug: TD2ToolButton
Align = vaLeft
Position.Point = '(272,0)'
Width = 64
Height = 64
Hint = '导出脚本'
Hint = '使用 MDPro3 进行调试'
ShowHint = True
OnClick = btnExportClick
OnClick = btnDebugClick
TabOrder = 4
StaysPressed = False
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA86400000382494441545847E5954B
4C134118C7217A205E7C265E147C26405B31120D42709102E599C88183F100B1
B4BB2D4A43832242ED45120F180D698808D876979587124C20A680520A0828A2
C6100FBE108D07134C50DA9A0A749C292CD675FBD82D89079BCC69FEF3FF7EDF
7FBE9D86C9CA7BE6D32F0E80400B2B1C58C2B4564776A5F54B8E7E7824B3DA5A
23AD1E948485FA43853B9E8280AB6DC20D5A46174093CD096ABB6781DAF0C695
A71FB6E7EA6CD6B48AFE48C11CC102704122A842E3F442966E70F678D5C32841
10A1003050BAAB538B39FAA197FF0CA00326917D79745E5A654DE30DB11609A0
24AA6BC7DCD9D5B69BBC0182FD0A327416A7BC61CA498F2F720EACA1EF1BC8D5
0FBDE60D10EC81D4CA07DB65BAC12E04C13590A6111780C33817AC9F201D82C8
B864E104687DB204328A5A160419F339E46F66D01E1F2F41DAFF0F00BBD0FF59
5AD107989559442EF87ABAD19EB736F57CAF5C50CCDE8752B4F7A598D6E2A8EF
9F0BF87FC180A90DAF5C6915BD9398DE1A11320032482DBB978F697B1C0D03DF
0342E86BA716D3B5DD330965ED5BD6A43863925C7AA710D3D28EE641BB4F087D
FD843BA9B4730E53B7EF5BD3E28CD9B192568DACBCD36E1AFEF11784C1F21560
676847124125845C3C5ED9B0418C93D7E234C64D6CB36495B926EB5CA79D7AE4
5A8568B2CE831479A3330937E5B3F5C8037921CFA0C124384949080A8809F231
2784A2B92E1742D0633F0135EA0232A2CD7E14BFA5E12C0E3D9017F20C1A200E
37EE1211D4343A28224C93B172F64081F0C4E29BF489CA4E7B1E9C8B4479E375
B679BCB263A398A0C691473461FC14AB26F9CD458CBA258A81102BA8676C8882
828E7589A76F744390AEB03010EE0DB05C7CA57305F9917771C60C41C412D47B
CF7570407045CA2E2E5298F6061D3D97900D115D62DEEACBD033705E9D0B2A0E
5FAFF5EC75B0F4EE7E98C28C84B8E296E0D4495F0068CFA3815A7486CBCB6F1A
92626A876762B9968ADE735873BB545E6703FE16D248A0D6A70FACE113C21F40
ACD21C7944D3860702401AA4150480C8B862431DC528CCEF50BC87CED2A70A8D
D608AE85F690C6A38567785F0157342255EB4ED8CDDB958E5EC42BE96D3E6740
456F86BA098F5669FA70A098DC1DD217B0126550C59942B0F3DF1070180543A0
E2CBB17B86D26FE7EC2ED910E83A7825F147719C7CEE2F767F6FC2EA75A04F98
0F84082769E6F5F3F7F004EA0A9D452FA8E73F057A72E97F011DBE8117990DAC
590000000049454E44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000007AC49444154785EED5C59
6C1C45100D9738C50DE2100101E28B0FF842080484FB101F5C0204824088E3DD
C5822807F90147C0077F118720114228E4235C1224812FB08394C43BB3592556
3884CC616239046FF7DA8E130725182FAF7AD66177BA67F698A999493296565E
7BBAABBADE5477555757F5AC59E94F8A408A40C211C8F68D5C39AF6FFCEC840F
3379C35BD8377472C692DF666D59C9D8E29FAC2517266F94091E51D6120B08BC
990F8198B3F79C93E021276B68D0B8EE5A009DEF23D7246B94091E4D0A60C097
9302980218108180DD530D4C010C884080EE5DDBFE3C0F6ECCF7A9156E034402
0F3EDF0E1D3C38D485BF2E6F83E4D1D3C50F3C00BAEE8844A2D312B7666CB932
6389A51DC55DA7F809B9A87FF7A9595B2C43DB0F4D1F188E9F4D9A87FFF534A2
7D58828BA9D689B56ABA66BB65751447CF300943FF477BCB03A0435B36C3F3A3
033C3F1053F05C2AE5D63CB7D690A6CD68620A5E8BE0B9347176CBD3164B02FA
7C16FB9AF7F4C6C193B276E9262CD68BB170AFC65AB50503FB03BFC76B346602
7F0FE1791E86E0237C5F427DA8AF691D6BA479DAFA6589034677041A9ADB2C2E
7A61FBD899EE0F199AD80C4297254FC780E7E2F31500D9DFC682ED2CE6969C24
B72153104F66378E9C46027982A740124F34AB69B5D33B36A0DC8CBBB68E5C01
A1DF4304775FDBA0D5042F5D3426F0F717B5D6F6D073800790EFA7F134B3D625
0EBC057DF262E54F51C8DB1B003F17A1FD6735E0CDBC505F10D11ECF672742EB
1EF9B4721CA6CDA2EA546B0A04473BC54FE8F31DA6F7974AAB6CD95BDD739296
3545C799E2FF6B9E1B103F1013A1810BF2639741EBFA1A090C9076A1DDFBB97C
E931B587AC548EF17BFBD92DA39702DC8701F4BB0068A7277D1FF09AD1C45841
CCE5E51DD0A2516FF0C41406F839DADCD65DA91CDBF67401D8648D01E8B63A5E
4D8097581021CCB30066CA081E6DA72CB9868C49DBA0193A760D0C9C08BA6F40
93FFF59BB65E3C1B1896E8B6687EFE1784FB216797AF0F133837AD4CA1747336
5FBAB71D1E0D0CCB927668B6D447F975351BF65A0D04B06F7B39BD2D31616E4C
7EA2D9A1962B595943BBE6D0D4F1F0F0E7B2320F8938F9891E324C53282C2436
3A19C7C793251D3C39D95928DFC3C63844C27EE0D1B214222B17296505658F41
F30E66ACD27D7C8CC3A31C1F789041190DA3635B9A1F9E887C9462054F9D4819
7C3D728AF9440E8F72ACE09118D0BE155A80D292BFCE4445C213357C4AB18337
7F6BE94253188A7620E18B1B2E45F213BDAC2DAFC1A89103D3F43583F66D0857
541E6AB9BCB8C5C35F8DE638B2A35839016ECB6E37809D85D2B53C22874F1563
7FC7A000FB28D01B3E371745350574CBDBCBCE384406748E0119060C72F03BFD
58273E7033A6505488F24542CA8918D5C716B1AE7FCDCE9CE277F5A123394989
D6EC8CC366409B00573C910C23EB9E3D6797AE326CD9D6872D5B54F45450D6A5
856464D8F867ADD2E306000FDBB47E8A6C6BC6D0162F3102285ED700CC8FDEC8
C69099301D1E1914620D1B5BAC116B35953FCC6B22204FDD41159D8530022836
D5054A7182C6C62C22C27A86A91866630D0DECAFD74031C8C62C22C2EE701C1D
ABB2B146F465B03E542FFBD998454418F2D0B973DD59331B6B58ADDF5C671D3B
D8984544385200A1DEDBEB9D68B1332239D9D8409E5ED7ACDACBC9AC2E7C4F9E
3B1BB388086359FAD1A514436CACE9505CDF808F5CC0C6909B30B6737AA698C8
B3B1858FB45CF3DC398FFCD8247108532E4EA48E3422180FE91A289631CBC946
3E53283FAAC705C5523686A6AD0F95BBB33164260CF0566900223D8495ADDB95
81277FD0ABE68275200189535698169AB3E5DFACE12CB56E58E24D7D3F5C7E2E
A03C917757E928710454553E9E1ED22F468E40408600F0130DC0BC7C2620D9C6
DD49F5B5690C405903918D87D5520BCA4F74E76B933B13C9A1128DD4A9D3709D
27586273A3F4DC96A4646CAC6A4DF459B48A91653D692A3AC11418D3C3E1C93F
5CCAE6E575EE7361CA6CA5E38AC800748C897CC5F01647286726D281B4C0CC49
053655988BD52D9009A769B5A676589FCA724352A732C07BCBB0F39884437D49
38A8B4482553900F1AB490EE905ADE2229F6E698314F19C78A026C76E67E0CF0
563FD6DFAA98464279627C438077A729A188EA58BA37568E8F1540C7A020AD4D
B36A622A092066EDF2DDE64A29314AC540B18237C31CB9D05763DAEE3169A29A
CE0DAA8FB884A017684C65431D4BE252F154AE8947DD2D34607D94D699928728
53D6B4E6291706C5405C2F2D105DCFCC4FBA9C1029712A0989591B61D86E0770
A6CC2B2A3EA42A73C6ACFB40F0399D49138DD3B9BA46E2D9268E6D1FDDD907E0
D619B5CEA9DC3C8867734310919F845A138D86A56EFB57449B79414261EAFA4D
2728AA975AD4DE2A893A168ABEF04B1E2207A7F64C4F0531189A03D08E6FAA17
DDCCE9DCB2FB7CAF6164368D9FF5FCD6F20D394BBE48DAD664E57B0F15038528
5AB4A41C675B683B16CFA9A62E7395FBE9E209CA84A0A3547CFF1DDFF7FAF531
B851A36ABD635E732341D3D9F6C9974D0188D640695CAD5E057F454771E2DC48
848B9249358AB3D8144F0C0A245979BCA057A904234A99E2E145E9B5C82BA4E3
0168CC2FED832786D5750176F92EAA1E8847980470A5453E67CB07D4759A7478
0FA3524D2319206D55DF9D4B28D6528D0AF99374737802869E0E21452045E0C8
47E03FFD85632A58B84AF80000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 64
BitmapSize = 40
BitmapPadding = 2
end
object btnAbout: TD2ToolButton
......@@ -321,45 +370,52 @@ object FormHome: TFormHome
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA86400000415494441545847D597D9
6F8C6114C68B1BFC3922962EF6D8C5EE069190702121A215445B15D5753A5AB3
68620BA155115B9499CED48DEDDFB05C50AE860B9D74BEC7F9CDD76FB453DAEF
D33662923779F3BEE73CCFD9DEF39D2929F95F7E3D3D9A15493B4B22A95C28FC
7CE84DF8C9E0E7BAC7992C8B3D67D1BE5C6B2CE554203B657E855E3B7362699D
6C49FC1868EE95EA9F48758FA4DA8752CD0377B1E78C3B6430289A724EA03B29
43E2696757F879F663C353E9AC119CBE2F55DD938E754B47BBA42377DCC59E33
EE9041169D7022FB3E927276043642D28C689FCED6F6641C3C3B65A0101CBE2D
1DBC29EDBF21EDBB26EDBDEA2EF69C71870CB2E8E4236518913E35D6D66AA62F
4310EC48E5EE369A0784B7B2C7053D60047BAE48BB3AA56D71697354DA147117
7BCEB843065974D005032CAB9D6E5F464453B90614AA4D114F0EDD72BDDC79D9
25DB7849DA606B7DC7E8C51977C8208B0EBA60809537A22F777EDC2890F39667
AED52812D2DDE6D196980B0EE9BA7669ADAD6A0BEF976FEE3A6345C81977C820
8B0EBA6080952F564B47ACDFD9FE5B23A8588A86BC113AAC0780F0E2DD3A035E
73515A6D6B55581A3062EF379071CFB843065974D005032C30C1A6A83B1F6BEE
1823A269E714954BF1903F4288177972F3CC235ED9262D0F990146EAFD3EDB9E
33EE3C43D041170CB0C0041B0E9EE82803681CBC739E0FE1A288C823A1C41B8F
7C85912C6B9596B4B84F0E2320AFB43D67DC21533062381D608109361CCDBD83
9F4635AB68BFB39406C21BC6522A9962229F84144080971A4145B354D6249536
4A8B87177BCEB843C633025D30C002136C38E0B2A7595E8882557E1B5D0CAF28
1A9E53DEFBE1D0135ABC83A0D4881619E1C20669C10577B1E78C3B64904587C8
8101169860C30197BD88968201EDC9A1B7140821A2A1F0A6C91F958DF7E49710
E3254490CEAF97E69D77177BCEB843065974D005032C30C18603AEB6E4D0AB82
01E49F7E4E4BA5AB51BD5EF847793FEC3984470C881A60B1E78C48908E9151F0
D20026D870C0451D140C684B640679A7F4752AD6CB3F21F40C28B7D092733CC5
6B8A6FE42BE08C3B64901D9906AF0EC08603AEBA44E6C7A40CF845EFEE2665C0
DFA4A0D88049A58061226811161B10B4082F26875EFE7A8636C9047D86C50604
7E86C95C53C100C6A8A08DA8D880A08DC85A7F69C100DA22635490565C6C40D0
563C6636E00311E463546C40908F9145FCF898AFE1F5179ADDDA9B7DE7F773CC
1CE0FDD8FBFD1C8712D90F7F1C561920191AFC0C2435D64EBF7E77177BBF0349
3CE56C1D772AB2D9BE7EBA4632FBE89D9B7030A5381820A77C284DE6BA7C0DA5
5868B9FD7763F9C81031403227FEED1F138A7AC29C4F94135E472CED54F1F9F4
FBD70C596B3495E84E84EFFB3E5F1B364631C9304C40C2679C95DFDB99155973
BCDF29F39D6BDFECD328F813BC87D43A3A34391D0000000049454E44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000004EA49444154785EED9C4D
68D44014C7EB17F8ADA8207A10515111918A47A5E2C10FE841445450A4A0B8DD
645B4BD18B22F4A288E0071EBC78514110F4A8E8CD1E2CDD64BBD28278AE881F
DD9D6CBF0EA288C637DBDA66B3D9CCCB4CB24DF42DCC29339337BFBCFFCC9BB7
933434D08F082482806E161AB51CD3B5ACD5212CB9A10DCE41B51BD652611B8F
7ED3263BE98693C95AFB317DA54DAB25D3C3D6CE38DC547E78996658CF75D3B2
D1C560879D86B76647D6A3DB3AEE03F7ED7703D00CF600DD97C17EE8867579E6
20DAF62C30F635DAE0BF838F0BC0297BACCE1981A89BA54381E171A3E306D0B4
C62F0C7C5D5477889AC96EFF23006D90FEBEFA03F4986F34A3D8ACE58A7BFD4A
C61C5BE934B6A57B70BEA88DE77583ED720F3A9D635B847D19D6F5AA07EF5245
5D607A4DD81DFD23CBEB7273859BF0159800124005028A4DC903150142B07D54
37D9A0B3F0005CB1DBE0CD933A07061F69442D08A0225802480015092836E75B
32D88C77390B0F8AB1DD76F67E5C505E110D760B7635779250207EBCD296675B
B1638CAC5E3A57DA0EC03E486D0583647E22A80B53D72FEE3491C111757CB677
740518F02589F02A6C3658AB68AC915C873CDEA5C4C32B7B36FBD465DBB32381
E4D729C07BF16F00B4ECF6BEC246698020C37B301F8C380BCF508B3AD44CABDB
0910E6C2319E958E7BE18B5CF5832F348AC65BF3BA6C1C5805101E82B411756C
588E36AA162502887E0404108DCABB220124808A04149B9307124045028ACDC9
03E306309D2BEE9CC8C84C9754DE9E27B293E2401121C1750248001D07A91476
22B21CC90327C9A5F2E3ABDC09004C7A87004E02A46402CF092A48980012C040
D33805D2817055572680045091806273F24002A84840B1397960DC00C25F98EB
7820E92CC79EDA734476D24E444488B2318A84082001F42210FA22E2F5524B57
B73D57849FE640CAC684935095C9C6700F050F7C5B71B888CEC64CBF2BECF7AA
976E169BE00FA877EE033AFC749748F671B81EFA1C88F5C0737DC53570A8F231
C0FBED752E90003A8E7CB93D50CF0EEFE1E7FFFC0E5412401F809EEFA5B9CED8
11400228374563E6C00A0F843990CF85B00A0FD02A0CCC03012CAFBEC526FEA8
28900E1048674CEB082CFF9DCE1D4A9400F9B76060B57F08F7F8C63D9DDF5F4E
5FFFD97F22FC501328E2224C0DE31E71E62BBDB7B04915640471A075DF6D2CE6
9B09617B20FFE206BCF4F2DE3F54B2BE83675E4DE53F2F94051901C062B3FB7D
0FBDBBB05864605800B95CA1AF27415EDAE1EFE7C9CA3A74801C147C7CE73818
F50C067183EF3844F0C25844FCE48A85095E1B58D69100C40073D751F140945C
61F18070E900D4BD0B0FF7672DA8502790AC130D102557838DC2C369AF58F1B3
C33B00E21BDFF91129EB440244C9B59CA4608FCE6787567B2A827F24CD60A701
EE90604FEE2BEBC401C4CAB5ADAFB41B33954C7CAA4F5ED68901282B570CC4F2
222629EBD8030C45AE588A12B28E35C0B0E58AE51844D63C540BF57557AC91A2
30A656A67ACA588FD555F6DEB5DA6164ED6DA7C2115FD941B8E3C09A2BA36875
9535A0563BA4AC2BED8D29409E49C1AEAE6173C4C87A1A62DC00D641AE58E028
59AB9CD2C71AE2AE0773C9CB2AD9D65BAE58E305B2CE98C5CDD8AE42ABA7E54A
272AB338332757ECA0BC640D91436F0300C6F6116ABD8C593A089BF99BB0053B
85394F13EACD153A6B35AC6DB0B7BEC693B7677AD81285AEA829112002F127F0
07FCFE28CB9212DEF10000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 32
BitmapSize = 40
BitmapPadding = 2
end
object btnUpload: TD2ToolButton
......@@ -367,35 +423,51 @@ object FormHome: TFormHome
Position.Point = '(336,0)'
Width = 64
Height = 64
Hint = '上传残局到服务器'
ShowHint = True
OnClick = btnUploadClick
TabOrder = 7
StaysPressed = False
IsPressed = False
TextAlign = d2TextAlignCenter
Bitmap.PNG = {
89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA86400000211494441545847ED95DB
6EE2401044F3B8211736402E1F002404438CF939C0378C0DF9ECDED3336396DD
44919CCDB08A0452C92F4875AA7AA6E7ECECF43B35F09D1B88AA0789CA07F92F
19A2EDBD44152AEF65868E0A31DF91DC01A8F96C7327213A0A44B42335E6B3ED
9DCC2A545AF3B0B835F20A61CC0F004200C2F2565E36A8E8C9748DF29E1F88F9
2BB53B803ABD35C754CD8B2E005D99E428EB7E2DC4FCD525DF51B9568FC20AF3
B2E700305D7730EF489039A59DAF813007AE4E6E0098758531E6D30DA949AEE6
417E23E34CF553C6294AACFEE94C1C9A2B8435273900D312730026C58D046B6B
FC9CB5E539458953CC37FE24C47CEBAE9A3176B503A0E62FC69CCA6BF3DC9A8F
301F25D7328AAFE509E9D7AADDAC096BEE00EA2BB79F7B9D9CDA35F9DE1CD3E4
0AE32B798C2FE571C5173D1901B16A08F1DEECCCDC493F217D40FABFCDADF165
B3B44D0E497DF0264547C66B6ACFA93C23794ADA04F3F84286AB0B7F00F5A9FF
B3FA43F3960C962D8F007AE5486F01F4D0D9B96BF59A7CB06A497F79EE19803B
FF76F65ABDA63F97FEC2278059B500E89D77576E9F9EEA357D7FF1C363030004
1F0190DE6F03BC74BAEB75E5BEDBC03100260A9002C09E371B8F4533E4EEEBE9
1F2C1883D7334003FAD4FE06681B005D3EC325B7C03B406601029E5A7DE974C7
EB9AD5956B012C4493E5D6E8BF5305486B00C6C04B3702C0B4B0AC5BF0B8091B
D19EFEFC5D1AF805EC6EB3FDDDBB8E6F0000000049454E44AE426082
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000003D449444154785EEDDCCD
8BD3401400F0AA2028225E3C888A5FA027C183881EC493A0E075D9ABF8D5A6B5
2C7A56D7AB171504054114114551D4BFC093ED4CBAEE5E040F7EE1AE8AED4CAC
3745D4F8266B6BB79BEE6E3A79C99B6616E6B274A6935FDE4C929997E672F6CF
0A18295070C536C715C52293A36916D5879CEF2F320671E8A5BFD461F27A9189
3F452E7D0A05FA73D51844D5590A68DD7D3002F1246B6E7298F84D1150F5893C
22CC7547A8E2B5FA451AD1A9CA9190A173B4C8EB3B922805D6D81B7202C7603E
FED6F97FB288A1806E635F5257C09189E6AAD92750DCCCD7E42E2310A902AA13
68042265402310A903924734019034A2298064114D022489681A203944130149
219A0A4806D164401288A603A68E380880A922A60D587C565F81B99C96AF3637
A22E8CA40DA80E0E96AA5E6121660210F00E5B40CD710280173036B53211812D
FB60FD8F8BCB80F9B89F0253C19BEE48CE14A06610E71C2E2E59400D450BA881
175CCD6D04EA096606B05495FB1D2EEFC19EF435C7F5D6EBB1FDAF9D09C01217
3BE14AFBABBD69CEC554B956DF120762260001EECCAC7DE09810330108437638
ECA9030E5E3B12330138EAFB8BE186F70E06622600D55C37F4C05F82810827E5
6C573ECD8F5395C96571CCAF3DDB486B350603B13CFE79757B650792451DEE9D
46C50B6E3EC3B2B3124A2EC24054D9B625EEED71DC2F9BD1F1D206C41CCE89E0
5100341E31CD21DC1925C170E6F22EC6D519351AA900069108F317003EED8598
AFC8B5A818FD344E09707E44F99A1C223540E310A30296995C0977FC5760BE7A
01F75C13330A17EF60A1E07D4CE563AF8D26F86E3A91181510367E6E61EDA045
6A978947FD4C59B1D7890A08D1075146E0753026DFC68ED14F83910199B84F01
1086F1937E8E37F63A5101A79F3715626C735DF89CC9C464EF39504CA16F572E
543A2AE042DBD5F91CC633B24E7FE6AC4B0DD0283C2ACFC2AD336C1C1E254023
F1A8001A8B4701D068BCB40131F0A6335EBD03A58AB71DEDCADBD9705A57610C
BCE3B5C61A78D4FCD0BE7F845F1F41474C0310032F184D5C9C9F71F3CDC4CF13
639F96A322260E08BF0783B1A5F90F70F0F3036D6682E678B0B9319A80363B4B
1350552FB8DE41B5A213FCDCD4F3AF1B626832682233B931718175B763013565
2DA005D414D0AC6E23D0026A0A6856B7116801350534AB138A406F586D1B9A56
00F046E22F1B423AEC310A1BE5687D800556CDC09EBB7A8937B662BCE88C0612
25AD84C97154BC56E39026719BC40147C199EFB390A50FC171281140B56A0BF3
C7C30142FC0EC7534804AFF34B0A4CEE86159273EA6A6668B908A3A90C398CEB
12C7B35F6805AC001581BF23B97782CB75922D0000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 64
BitmapSize = 40
BitmapPadding = 2
end
object lblLoginUser: TD2Label
......@@ -404,7 +476,7 @@ object FormHome: TFormHome
Width = 200
Height = 64
Padding.Rect = '(0,0,16,0)'
TabOrder = 8
TabOrder = 6
Font.Family = 'Microsoft Yahei'
Font.Size = 18
TextAlign = d2TextAlignFar
......@@ -431,7 +503,7 @@ object FormHome: TFormHome
Padding.Rect = '(16,0,0,0)'
OnClick = fieldElementClick
TabOrder = 0
StaysPressed = False
StaysPressed = True
IsPressed = False
Font.Family = 'Microsoft Yahei'
Font.Size = 16
......@@ -4027,7 +4099,7 @@ object FormHome: TFormHome
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C383429064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C393029064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
......
......@@ -5,8 +5,8 @@ unit frmHome;
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, orca_scene2d, fgl, untData, untConstant, untCard, untUtils,
untAPI;
Windows, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, orca_scene2d, fgl, untData, untConstant, untCard, untUtils,
untAPI, ShellApi;
type
......@@ -209,7 +209,7 @@ type
btnOpen: TD2ToolButton;
btnSave: TD2ToolButton;
btnConfig: TD2ToolButton;
btnExport: TD2ToolButton;
btnDebug: TD2ToolButton;
txtOwner: TD2Text;
procedure btnAboutClick(Sender: TObject);
procedure btnAddCardClick(Sender: TObject);
......@@ -218,7 +218,7 @@ type
procedure btnConfigClick(Sender: TObject);
procedure btnDelCardClick(Sender: TObject);
procedure btnEditCardListClick(Sender: TObject);
procedure btnExportClick(Sender: TObject);
procedure btnDebugClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure btnOpenClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
......@@ -1031,8 +1031,39 @@ begin
end;
procedure TFormHome.UploadPuzzle();
var
APuzzleCode: string;
AP: TEntityPuzzle;
ARet: TSavePuzzleResult;
begin
// TODO: upload puzzle
// upload puzzle
if FPuzzle = nil then Exit;
if FUserInfo = nil then Exit;
if FUserInfo.id = 0 then Exit;
if FUserToken = '' then Exit;
btnUpload.Enabled:= False;
APuzzleCode:= TScriptGenerator.Generate(FPuzzle);
AP := TEntityPuzzle.Create;
AP.id:= FPuzzle.PuzzleId;
AP.name:= FPuzzle.PuzzleName;
AP.userId:= FUserInfo.id;
AP.contributor:= FUserInfo.username;
AP.message:= FPuzzle.Message;
AP.solution:= FPuzzle.Solution;
AP.coverCard:= GetFirstCardFromScriptCode(APuzzleCode);
AP.luaScript:= APuzzleCode;
ARet := TAPI.SavePuzzle(AP, FUserInfo.id, FUserToken);
if ARet <> nil then begin
FPuzzle.PuzzleId:= Aret.data;
SavePuzzle();
ARet.Free;
MessageDlg('提示', '上传残局成功', mtConfirmation, [mbOK], 0);
end else begin
MessageDlg('提示', '上传残局失败', mtError, [mbOK], 0);
end;
btnUpload.Enabled:= True;
end;
procedure TFormHome.btnNewClick(Sender: TObject);
......@@ -1046,12 +1077,14 @@ procedure TFormHome.btnConfigClick(Sender: TObject);
begin
// config
with TFormPuzzleConfig.Create(Self) do begin
PPuzzleName:= FPuzzle.PuzzleName;
PAIName:= FPuzzle.AIName;
P0LP:= FPuzzle.LPSelf;
P1LP:= FPuzzle.LPOpponent;
PMessage:= FPuzzle.Message;
PSolution:= FPuzzle.Solution;
if ShowModal = mrOK then begin
FPuzzle.PuzzleName:= PPuzzleName;
FPuzzle.AIName:= PAIName;
FPuzzle.LPSelf:= P0LP;
FPuzzle.LPOpponent:= P1LP;
......@@ -1267,8 +1300,6 @@ begin
FillCardIds(cardIds);
if ShowModal = mrOK then begin
// CardList;
ShowMessage(Format('Changed %d', [CardList.Count]));
case FFieldInfo.Owner of
foSelf:
begin
......@@ -1339,23 +1370,29 @@ begin
cardIds.Free;
end;
procedure TFormHome.btnExportClick(Sender: TObject);
procedure TFormHome.btnDebugClick(Sender: TObject);
const
DEBUG_NAME = '._debug_';
var
ADir: string;
ALuaFileName: string;
ACode: string;
AMDPro3Path: string;
begin
SavePuzzle();
if (FFilePath <> '') then begin
// export
ALuaFileName := ChangeFileExt(FFilePath, '.lua');
ACode := TScriptGenerator.Generate(FPuzzle);
if (FFilePath = '') then Exit;
ADir:= TConfigReader.GetMDPro3InstallPath();
ALuaFileName:= ADir + DirectorySeparator + 'Puzzle' + DirectorySeparator + DEBUG_NAME + '.lua';
ACode:= TScriptGenerator.Generate(FPuzzle);
with TStringList.Create do begin
Text:= ACode;
SaveToFile(ALuaFileName);
Free;
end;
ShowMessage('导出残局脚本完成!');
end;
// debug
AMDPro3Path:= ADir + DirectorySeparator + 'MDPro3.exe';
ShellExecute(0, 'open', PChar(AMDPro3Path), PChar(Format('-s %s', [DEBUG_NAME])), PChar(ADir), SW_SHOWNORMAL);
end;
procedure TFormHome.btnOpenClick(Sender: TObject);
......
......@@ -26,7 +26,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
HitTest = False
object Layout1: TD2Layout
Align = vaTop
Position.Point = '(8,58)'
Position.Point = '(8,108)'
Width = 584
Height = 50
object Label1: TD2Label
......@@ -62,7 +62,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
end
object Layout2: TD2Layout
Align = vaTop
Position.Point = '(8,108)'
Position.Point = '(8,158)'
Width = 584
Height = 50
object Label2: TD2Label
......@@ -98,9 +98,9 @@ object FormPuzzleConfig: TFormPuzzleConfig
end
object Layout3: TD2Layout
Align = vaTop
Position.Point = '(8,158)'
Position.Point = '(8,208)'
Width = 584
Height = 300
Height = 265
object Label3: TD2Label
Align = vaTop
Position.Point = '(8,0)'
......@@ -119,7 +119,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
Align = vaClient
Position.Point = '(8,50)'
Width = 568
Height = 242
Height = 207
Padding.Rect = '(8,0,8,8)'
TabOrder = 1
UseSmallScrollBars = True
......@@ -130,9 +130,9 @@ object FormPuzzleConfig: TFormPuzzleConfig
end
object Layout4: TD2Layout
Align = vaClient
Position.Point = '(8,458)'
Position.Point = '(8,473)'
Width = 584
Height = 284
Height = 269
object Label4: TD2Label
Align = vaTop
Position.Point = '(8,0)'
......@@ -151,7 +151,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
Align = vaClient
Position.Point = '(8,50)'
Width = 568
Height = 226
Height = 211
Padding.Rect = '(8,0,8,8)'
TabOrder = 1
UseSmallScrollBars = True
......@@ -204,7 +204,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
end
object Layout6: TD2Layout
Align = vaTop
Position.Point = '(8,8)'
Position.Point = '(8,58)'
Width = 584
Height = 50
object Label5: TD2Label
......@@ -222,6 +222,39 @@ object FormPuzzleConfig: TFormPuzzleConfig
Text = 'AI 名称'
end
object edtAIName: TD2TextBox
Align = vaClient
Position.Point = '(136,8)'
Width = 440
Height = 34
Padding.Rect = '(8,8,8,8)'
TabOrder = 1
Font.Family = 'Microsoft Yahei'
Font.Size = 18
ReadOnly = False
Password = False
Text = '我的AI'
end
end
object Layout7: TD2Layout
Align = vaTop
Position.Point = '(8,8)'
Width = 584
Height = 50
object Label6: TD2Label
Align = vaLeft
Position.Point = '(8,0)'
Width = 120
Height = 50
Padding.Rect = '(8,0,0,0)'
TabOrder = 0
Font.Family = 'Microsoft yahei'
Font.Size = 18
Font.Style = d2FontBold
TextAlign = d2TextAlignNear
VertTextAlign = d2TextAlignCenter
Text = '残局名称'
end
object edtPuzzleName: TD2TextBox
Align = vaClient
Position.Point = '(136,8)'
Width = 440
......@@ -1859,7 +1892,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C383429064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C383629064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
......
......@@ -20,6 +20,7 @@ type
Label3: TD2Label;
Label4: TD2Label;
Label5: TD2Label;
Label6: TD2Label;
Layout1: TD2Layout;
Layout2: TD2Layout;
Layout3: TD2Layout;
......@@ -28,26 +29,31 @@ type
edtSelfLP: TD2NumberBox;
edtOpponentLP: TD2NumberBox;
Layout6: TD2Layout;
Layout7: TD2Layout;
mmMessage: TD2Memo;
mmSolution: TD2Memo;
Root: TD2Background;
Scene: TD2Scene;
edtAIName: TD2TextBox;
edtPuzzleName: TD2TextBox;
private
function GetAIName: string;
function GetP0LP: Integer;
function GetP1LP: Integer;
function GetPMessage: string;
function GetPPuzzleName: string;
function GetPSolution: string;
procedure SetAIName(AValue: string);
procedure SetP0LP(AValue: Integer);
procedure SetP1LP(AValue: Integer);
procedure SetPMessage(AValue: string);
procedure SetPPuzzleName(AValue: string);
procedure SetPSolution(AValue: string);
public
published
property PPuzzleName: string read GetPPuzzleName write SetPPuzzleName;
property PAIName: string read GetAIName write SetAIName;
property P0LP: Integer read GetP0LP write SetP0LP;
property P1LP: Integer read GetP1LP write SetP1LP;
......@@ -84,6 +90,11 @@ begin
Exit(mmMessage.Lines.Text);
end;
function TFormPuzzleConfig.GetPPuzzleName: string;
begin
Exit(edtPuzzleName.Text);
end;
function TFormPuzzleConfig.GetPSolution: string;
begin
Exit(mmSolution.Lines.Text);
......@@ -109,6 +120,11 @@ begin
mmMessage.Lines.Text:= AValue;
end;
procedure TFormPuzzleConfig.SetPPuzzleName(AValue: string);
begin
edtPuzzleName.Text:= AValue;
end;
procedure TFormPuzzleConfig.SetPSolution(AValue: string);
begin
mmSolution.Lines.Text:= AValue;
......
......@@ -52,7 +52,6 @@ object FormSearchCard: TFormSearchCard
Font.Size = 18
ReadOnly = False
Password = False
Text = '百夫'
end
object btnSearchCard: TD2CornerButton
Align = vaLeft
......@@ -1751,7 +1750,7 @@ object FormSearchCard: TFormSearchCard
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C383229064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C383429064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
......
images/menu_about.png

1.29 KB | W: | H:

images/menu_about.png

10.2 KB | W: | H:

images/menu_about.png
images/menu_about.png
images/menu_about.png
images/menu_about.png
  • 2-up
  • Swipe
  • Onion skin
images/menu_config.png

1.44 KB | W: | H:

images/menu_config.png

9.91 KB | W: | H:

images/menu_config.png
images/menu_config.png
images/menu_config.png
images/menu_config.png
  • 2-up
  • Swipe
  • Onion skin
images/menu_new.png

829 Bytes | W: | H:

images/menu_new.png

10.8 KB | W: | H:

images/menu_new.png
images/menu_new.png
images/menu_new.png
images/menu_new.png
  • 2-up
  • Swipe
  • Onion skin
images/menu_open.png

1.16 KB | W: | H:

images/menu_open.png

10 KB | W: | H:

images/menu_open.png
images/menu_open.png
images/menu_open.png
images/menu_open.png
  • 2-up
  • Swipe
  • Onion skin
images/menu_save.png

1.18 KB | W: | H:

images/menu_save.png

9.83 KB | W: | H:

images/menu_save.png
images/menu_save.png
images/menu_save.png
images/menu_save.png
  • 2-up
  • Swipe
  • Onion skin
images/menu_upload.png

449 Bytes | W: | H:

images/menu_upload.png

9.94 KB | W: | H:

images/menu_upload.png
images/menu_upload.png
images/menu_upload.png
images/menu_upload.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -11,7 +11,7 @@ const
BASE_URL = 'https://sapi.moecube.com:444';
API_ACC_SIGNIN = '/accounts/signin';
API_ACC_AUTHUSER = '/accounts/authUser';
PUZZLE_URL = 'http://rarnu.xyz:38383/api/mdpro3/puzzle';
PUZZLE_URL = 'http://rarnu.xyz:38383/api/mdpro3/puzzle/save';
type
TCommonResult = class(TPersistent)
......@@ -66,8 +66,9 @@ type
{ TEntityPuzzleAdd }
TEntityPuzzleAdd = class(TPersistent)
TEntityPuzzle = class(TPersistent)
private
Fid: Int64;
Fcontributor: string;
FcoverCard: Int64;
FluaScript: String;
......@@ -76,6 +77,7 @@ type
Fsolution: string;
FuserId: Int64;
published
property id: Int64 read Fid write Fid;
property name: string read Fname write Fname;
property userId: Int64 read FuserId write FuserId;
property contributor: string read Fcontributor write Fcontributor;
......@@ -85,25 +87,25 @@ type
property luaScript: String read FluaScript write FluaScript;
end;
{ TEntityPuzzleUpdate }
type
{ TAPI }
TEntityPuzzleUpdate = class(TEntityPuzzleAdd)
TSavePuzzleResult = class(TCommonResult)
private
Fid: Int64;
Fdata: Int64;
published
property id: Int64 read Fid write Fid;
property data: Int64 read Fdata write Fdata;
end;
type
{ TAPI }
TAPI = class
public
class function MCLogin(AAccount: String; APassword: String): TMCUserWithToken;
class function MCValidate(AToken: String): TMCUser;
class function AddPuzzle(AP: TEntityPuzzleAdd; AUserId: Int64; AToken: String): Boolean;
class function UpdatePuzzle(AP: TEntityPuzzleUpdate; AuserId: Int64; AToken: String): Boolean;
// class function AddPuzzle(AP: TEntityPuzzle; AUserId: Int64; AToken: String): Boolean;
// class function UpdatePuzzle(AP: TEntityPuzzle; AuserId: Int64; AToken: String): Boolean;
class function SavePuzzle(AP: TEntityPuzzle; AUserId: Int64; AToken: String): TSavePuzzleResult;
end;
implementation
......@@ -175,7 +177,9 @@ begin
end;
end;
class function TAPI.AddPuzzle(AP: TEntityPuzzleAdd; AUserId: Int64;
(*
class function TAPI.AddPuzzle(AP: TEntityPuzzle; AUserId: Int64;
AToken: String): Boolean;
var
AUrl: String;
......@@ -190,7 +194,7 @@ begin
AHeader.Add('ReqSource', 'MDPro3');
AHeader.Add('userId', AUserId.ToString());
AHeader.Add('token', AToken);
AReqJson := ISCObjectToJSONString<TEntityPuzzleAdd>(AP);
AReqJson := ISCObjectToJSONString<TEntityPuzzle>(AP);
ARetJson := ISCHttpPost(AUrl, AReqJson, AHeader);
AHeader.Free;
AResult := ISCJSONStringToObject<TCommonResult>(ARetJson);
......@@ -198,7 +202,12 @@ begin
AResult.Free;
end;
class function TAPI.UpdatePuzzle(AP: TEntityPuzzleUpdate; AuserId: Int64;
*)
(*
class function TAPI.UpdatePuzzle(AP: TEntityPuzzle; AuserId: Int64;
AToken: String): Boolean;
var
AUrl: String;
......@@ -213,7 +222,7 @@ begin
AHeader.Add('ReqSource', 'MDPro3');
AHeader.Add('userId', AUserId.ToString());
AHeader.Add('token', AToken);
AReqJson := ISCObjectToJSONString<TEntityPuzzleAdd>(AP);
AReqJson := ISCObjectToJSONString<TEntityPuzzle>(AP);
ARetJson := ISCHttpPut(AUrl, AReqJson, AHeader);
AHeader.Free;
AResult := ISCJSONStringToObject<TCommonResult>(ARetJson);
......@@ -221,5 +230,32 @@ begin
AResult.Free;
end;
*)
class function TAPI.SavePuzzle(AP: TEntityPuzzle; AUserId: Int64; AToken: String): TSavePuzzleResult;
var
AUrl: String;
AHeader: TFPGMap<String, String>;
AReqJson: string;
ARetJson: string;
AResult: TSavePuzzleResult;
begin
AUrl := PUZZLE_URL;
AHeader := TFPGMap<String, String>.Create;
AHeader.Add('ReqSource', 'MDPro3');
AHeader.Add('userId', AUserId.ToString());
AHeader.Add('token', AToken);
AReqJson := ISCObjectToJSONString<TEntityPuzzle>(AP);
ARetJson := ISCHttpPost(AUrl, AReqJson, AHeader);
AHeader.Free;
AResult := ISCJSONStringToObject<TSavePuzzleResult>(ARetJson);
if (AResult.message = 'true') then begin
Exit(AResult);
end else begin
AResult.Free;
Exit(Nil);
end;;
end;
end.
......@@ -101,6 +101,8 @@ type
FP1Grave: TFPGList<TCard>;
FP1Hand: TFPGList<TCard>;
FP1Removed: TFPGList<TCard>;
FPuzzleId: Int64;
FPuzzleName: string;
FSCards: array [0..1, 0..5] of TCard;
FExtraMonsterCards: array [5..6] of TCard;
FLPOpponent: Integer;
......@@ -121,6 +123,7 @@ type
procedure Optimize();
published
property PuzzleId: Int64 read FPuzzleId write FPuzzleId;
property PuzzleName: string read FPuzzleName write FPuzzleName;
property P0Hand: TFPGList<TCard> read FP0Hand write FP0Hand;
property P0Deck: TFPGList<TCard> read FP0Deck write FP0Deck;
property P0ExtraDeck: TFPGList<TCard> read FP0ExtraDeck write FP0ExtraDeck;
......@@ -291,6 +294,7 @@ var
i, j: Integer;
begin
FPuzzleId := 0;
FPuzzleName:= '';
FAIName:= '';
FLPOpponent:= 0;
FLPSelf:= 0;
......
......@@ -127,6 +127,7 @@ begin
json := TJSONObject.Create();
json.Int64s['puzzleId'] := APuzzle.PuzzleId;
json.Strings['puzzleName'] := APuzzle.PuzzleName;
json.Strings['aiName'] := APuzzle.AIName;
......@@ -245,6 +246,7 @@ begin
puz := TPuzzleField.Create;
puz.PuzzleId:= j.Int64s['puzzleId'];
puz.PuzzleName:= j.Strings['puzzleName'];
puz.AIName := j.Strings['aiName'];
......
......@@ -5,7 +5,7 @@ unit untConfig;
interface
uses
Classes, SysUtils;
Classes, SysUtils, Registry;
type
......@@ -15,6 +15,7 @@ type
public
class function GetMCToken(): string;
class procedure SaveMCToken(AToken: string);
class function GetMDPro3InstallPath(): string;
end;
implementation
......@@ -27,7 +28,7 @@ var
i: Integer;
AToken: String = '';
begin
ACfgPath:= ExtractFilePath(ParamStr(0)) + DirectorySeparator + 'Data' + DirectorySeparator + 'config.conf';
ACfgPath:= GetMDPro3InstallPath() + DirectorySeparator + 'Data' + DirectorySeparator + 'config.conf';
with TStringList.Create do begin
LoadFromFile(ACfgPath);
// MyCardToken->
......@@ -48,7 +49,7 @@ var
AFound: Boolean = False;
i: Integer;
begin
ACfgPath:= ExtractFilePath(ParamStr(0)) + DirectorySeparator + 'Data' + DirectorySeparator + 'config.conf';
ACfgPath:= GetMDPro3InstallPath() + DirectorySeparator + 'Data' + DirectorySeparator + 'config.conf';
with TStringList.Create do begin
LoadFromFile(ACfgPath);
for i := 0 to Count - 1 do begin
......@@ -67,5 +68,23 @@ begin
end;
class function TConfigReader.GetMDPro3InstallPath(): string;
var
AOpened: Boolean;
APath: string = '';
begin
// GetMDPro3InstallPath
with TRegistry.Create do begin
RootKey:= HKEY_CURRENT_USER;
AOpened := OpenKey('Software\MDPro3\MDPro3Install', False);
if AOpened then begin
APath := ReadString('InstallPath');
CloseKey;
end;
Free;
end;
Exit(APath);
end;
end.
......@@ -41,13 +41,16 @@ var
implementation
uses
untConfig;
{ TCardDatabase }
constructor TCardDatabase.Create;
var
APath: string;
begin
APath:= ExtractFilePath(ParamStr(0)) + DirectorySeparator + 'Data' + DirectorySeparator + 'locales' + DirectorySeparator + 'zh-CN' + DirectorySeparator + 'cards.cdb';
APath:= TConfigReader.GetMDPro3InstallPath() + DirectorySeparator + 'Data' + DirectorySeparator + 'locales' + DirectorySeparator + 'zh-CN' + DirectorySeparator + 'cards.cdb';
if (not FileExists(APath)) then raise EFileNotFoundException.CreateFmt('数据库 [%s] 不存在,请重新安装 MDPro3', [APath]);
FTrans := TSQLTransaction.Create(nil);
FDatabase := TSQLite3Connection.Create(nil);
......
......@@ -15,6 +15,8 @@ function CardTypeToReadable(ct: TCardType): string;
function PickOneCardFromList(list: TFPGList<TCard>; ACardId: Int64; AOwner: TCardOwner; APlayer: TCardPlayer; ALocation: TCardLocation; ASeq: Integer): TCard;
function WorkAsToCodeName(cwa: TCardWorkAs): String;
function GetFirstCardFromScriptCode(ACode: string): Int64;
implementation
function ElementNameToFieldRec(AName: string): TFieldRec;
......@@ -164,5 +166,26 @@ begin
Exit('');
end;
function GetFirstCardFromScriptCode(ACode: string): Int64;
var
i: Integer;
tmp: string;
begin
// GetFirstCardFromScriptCode
with TStringList.Create do begin
Text:= ACode;
for i := 0 to Count - 1 do begin
if (Strings[i].Contains('Debug.AddCard(')) then begin
tmp := Strings[i];
tmp := tmp.Substring(tmp.IndexOf('(') + 1);
tmp := tmp.Substring(0, tmp.IndexOf(','));
Break;
end;
end;
Free;
end;
Exit(StrToInt64(tmp));
end;
end.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment