Commit 22bbfa99 authored by rarnu's avatar rarnu

add: 修复override引起的内存问题

parent 44d4a1ce
...@@ -44,6 +44,7 @@ var ...@@ -44,6 +44,7 @@ var
json: TJSONObject; json: TJSONObject;
arr: TJSONArray; arr: TJSONArray;
jsub: TJSONObject; jsub: TJSONObject;
co: ICardOverride;
i: Integer; i: Integer;
begin begin
if ACard = nil then Exit(TJSONNull.Create); if ACard = nil then Exit(TJSONNull.Create);
...@@ -75,20 +76,22 @@ begin ...@@ -75,20 +76,22 @@ begin
json.AddPair('workAs', CardWorkAsToStr(ACard.GetWorkAs)); json.AddPair('workAs', CardWorkAsToStr(ACard.GetWorkAs));
jsub := TJSONObject.Create; jsub := TJSONObject.Create;
jsub.AddPair('useLevel', ACard.GetOverride.GetUseLevel); co := ACard.GetOverride;
jsub.AddPair('useRank', ACard.GetOverride.GetUseRank); if co <> nil then begin
jsub.AddPair('useAttr', ACard.GetOverride.GetUseAttr); jsub.AddPair('useLevel', co.GetUseLevel);
jsub.AddPair('useRace', ACard.GetOverride.GetUseRace); jsub.AddPair('useRank', co.GetUseRank);
jsub.AddPair('useAtk', ACard.GetOverride.GetUseAtk); jsub.AddPair('useAttr', co.GetUseAttr);
jsub.AddPair('useDef', ACard.GetOverride.GetUseDef); jsub.AddPair('useRace', co.GetUseRace);
jsub.AddPair('level', ACard.GetOverride.GetLevel); jsub.AddPair('useAtk', co.GetUseAtk);
jsub.AddPair('rank', ACard.GetOverride.GetRank); jsub.AddPair('useDef', co.GetUseDef);
jsub.AddPair('attr', ACard.GetOverride.GetAttr); jsub.AddPair('level', co.GetLevel);
jsub.AddPair('race', ACard.GetOverride.GetRace); jsub.AddPair('rank', co.GetRank);
jsub.AddPair('atk', ACard.GetOverride.GetAtk); jsub.AddPair('attr', co.GetAttr);
jsub.AddPair('def', ACard.GetOverride.GetDef); jsub.AddPair('race', co.GetRace);
jsub.AddPair('atk', co.GetAtk);
json.AddPair('override', jsub); jsub.AddPair('def', co.GetDef);
json.AddPair('override', jsub);
end;
Exit(json); Exit(json);
end; end;
...@@ -139,23 +142,28 @@ begin ...@@ -139,23 +142,28 @@ begin
c.SetWorkAs(StrToCardWorkAs(jobj.GetValue<String>('workAs'))); c.SetWorkAs(StrToCardWorkAs(jobj.GetValue<String>('workAs')));
jsub := jobj.GetValue<TJSONObject>('override'); try
jsub := jobj.GetValue<TJSONObject>('override');
co := TCardOverride.Create; except
co.SetUseLevel(jsub.GetValue<Boolean>('useLevel')); jsub := nil;
co.SetUseRank(jsub.GetValue<Boolean>('useRank')); end;
co.SetUseAttr(jsub.GetValue<Boolean>('useAttr'));
co.SetUseRace(jsub.GetValue<Boolean>('useRace')); if jsub <> nil then begin
co.SetUseAtk(jsub.GetValue<Boolean>('useAtk')); co := TCardOverride.Create;
co.SetUseDef(jsub.GetValue<Boolean>('useDef')); co.SetUseLevel(jsub.GetValue<Boolean>('useLevel'));
co.SetLevel(jsub.GetValue<Integer>('level')); co.SetUseRank(jsub.GetValue<Boolean>('useRank'));
co.SetRank(jsub.GetValue<Integer>('rank')); co.SetUseAttr(jsub.GetValue<Boolean>('useAttr'));
co.SetAttr(jsub.GetValue<Int64>('attr')); co.SetUseRace(jsub.GetValue<Boolean>('useRace'));
co.SetRace(jsub.GetValue<Int64>('race')); co.SetUseAtk(jsub.GetValue<Boolean>('useAtk'));
co.SetAtk(jsub.GetValue<Integer>('atk')); co.SetUseDef(jsub.GetValue<Boolean>('useDef'));
co.SetDef(jsub.GetValue<Integer>('def')); co.SetLevel(jsub.GetValue<Integer>('level'));
co.SetRank(jsub.GetValue<Integer>('rank'));
c.SetOverride(co); co.SetAttr(jsub.GetValue<Int64>('attr'));
co.SetRace(jsub.GetValue<Int64>('race'));
co.SetAtk(jsub.GetValue<Integer>('atk'));
co.SetDef(jsub.GetValue<Integer>('def'));
c.SetOverride(co);
end;
Exit(c); Exit(c);
end; end;
......
...@@ -462,44 +462,48 @@ end; ...@@ -462,44 +462,48 @@ end;
class function TScriptGenerator.GenerateOverride(ACard: ICard): string; class function TScriptGenerator.GenerateOverride(ACard: ICard): string;
var var
list: TStringList; list: TStringList;
co: ICardOverride;
begin begin
list := TStringList.Create; list := TStringList.Create;
if ACard.GetOverride.GetUseLevel then begin co := ACard.GetOverride;
list.Add(Format('Card.AssumeProperty(%s,ASSUME_LEVEL,%d)', [ if co <> nil then begin
CardToVarName(ACard), if ACard.GetOverride.GetUseLevel then begin
ACard.GetOverride.GetLevel list.Add(Format('Card.AssumeProperty(%s,ASSUME_LEVEL,%d)', [
])); CardToVarName(ACard),
end; ACard.GetOverride.GetLevel
if ACard.GetOverride.GetUseRank then begin ]));
list.Add(Format('Card.AssumeProperty(%s,ASSUME_RANK,%d)', [ end;
CardToVarName(ACard), if ACard.GetOverride.GetUseRank then begin
ACard.GetOverride.GetRank list.Add(Format('Card.AssumeProperty(%s,ASSUME_RANK,%d)', [
])); CardToVarName(ACard),
end; ACard.GetOverride.GetRank
if ACard.GetOverride.GetUseAttr then begin ]));
list.Add(Format('Card.AssumeProperty(%s,ASSUME_ATTRIBUTE,%s)', [ end;
CardToVarName(ACard), if ACard.GetOverride.GetUseAttr then begin
CardAttributeToStr(ACard.GetOverride.GetAttr) list.Add(Format('Card.AssumeProperty(%s,ASSUME_ATTRIBUTE,%s)', [
])); CardToVarName(ACard),
end; CardAttributeToStr(ACard.GetOverride.GetAttr)
if ACard.GetOverride.GetUseRace then begin ]));
list.Add(Format('Card.AssumeProperty(%s,ASSUME_RACE,%s)', [ end;
CardToVarName(ACard), if ACard.GetOverride.GetUseRace then begin
CardRaceToStr(ACard.GetOverride.GetRace) list.Add(Format('Card.AssumeProperty(%s,ASSUME_RACE,%s)', [
])); CardToVarName(ACard),
end; CardRaceToStr(ACard.GetOverride.GetRace)
if ACard.GetOverride.GetUseAtk then begin ]));
list.Add(Format('Card.AssumeProperty(%s,ASSUME_ATTACK,%d)', [ end;
CardToVarName(ACard), if ACard.GetOverride.GetUseAtk then begin
ACard.GetOverride.GetAtk list.Add(Format('Card.AssumeProperty(%s,ASSUME_ATTACK,%d)', [
])); CardToVarName(ACard),
end; ACard.GetOverride.GetAtk
if ACard.GetOverride.GetUseDef then begin ]));
list.Add(Format('Card.AssumeProperty(%s,ASSUME_DEFENSE,%d)', [ end;
CardToVarName(ACard), if ACard.GetOverride.GetUseDef then begin
ACard.GetOverride.GetDef list.Add(Format('Card.AssumeProperty(%s,ASSUME_DEFENSE,%d)', [
])); CardToVarName(ACard),
ACard.GetOverride.GetDef
]));
end;
end; end;
Result := list.Text; Result := list.Text;
......
...@@ -5,10 +5,11 @@ ...@@ -5,10 +5,11 @@
<FrameworkType>FMX</FrameworkType> <FrameworkType>FMX</FrameworkType>
<Base>True</Base> <Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config> <Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">OSXARM64</Platform> <Platform Condition="'$(Platform)'==''">Win64</Platform>
<TargetedPlatforms>163842</TargetedPlatforms> <TargetedPlatforms>163842</TargetedPlatforms>
<AppType>Application</AppType> <AppType>Application</AppType>
<MainSource>puzzle2.dpr</MainSource> <MainSource>puzzle2.dpr</MainSource>
<ProjectName Condition="'$(ProjectName)'==''">puzzle2</ProjectName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base> <Base>true</Base>
......
No preview for this file type
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