Commit 22bbfa99 authored by rarnu's avatar rarnu

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

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