improvements

This commit is contained in:
AlessandroCH
2025-08-09 17:41:24 +02:00
parent 96048df57c
commit f210746859
12 changed files with 123 additions and 282 deletions

View File

@@ -21,15 +21,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CsvHelper" Version="33.0.1" />
<PackageReference Include="Google.Protobuf" Version="3.27.2" /> <PackageReference Include="Google.Protobuf" Version="3.27.2" />
<PackageReference Include="HttpServerLite" Version="2.1.5" /> <PackageReference Include="HttpServerLite" Version="2.1.5" />
<PackageReference Include="MongoDB.Driver" Version="3.0.0" /> <PackageReference Include="MongoDB.Driver" Version="3.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLua" Version="1.7.3" />
<PackageReference Include="Pastel" Version="5.1.0" /> <PackageReference Include="Pastel" Version="5.1.0" />
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
<PackageReference Include="SQLiteNetExtensions" Version="2.1.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.3" /> <PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.3" />
</ItemGroup> </ItemGroup>

View File

@@ -18,7 +18,7 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
public uint inputCacheId = 0; public uint inputCacheId = 0;
public uint outputCacheId = 0; public uint outputCacheId = 0;
public uint producerId = 0; public uint producerId = 0;
public int currentProgress = 0; public long timestampFinish = 0;
public override void Init(FactoryChapter chapter, FactoryNode node) public override void Init(FactoryChapter chapter, FactoryNode node)
{ {
FComponentCache cache1 = (FComponentCache)new FComponentCache(chapter.nextCompV(), FCComponentPos.CacheIn1).Init(); FComponentCache cache1 = (FComponentCache)new FComponentCache(chapter.nextCompV(), FCComponentPos.CacheIn1).Init();
@@ -71,11 +71,14 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
producer.inProduce = true; producer.inProduce = true;
producer.lastFormulaId = recipe; producer.lastFormulaId = recipe;
producer.progress += craftingRecipe.totalProgress/craftingRecipe.progressRound; if (timestampFinish == 0)
currentProgress++;
if (currentProgress >= craftingRecipe.progressRound)
{ {
currentProgress = 0; timestampFinish = DateTime.UtcNow.ToUnixTimestampMilliseconds() + 1000 * craftingRecipe.progressRound;
}
producer.progress = (DateTime.UtcNow.ToUnixTimestampMilliseconds()/timestampFinish)* craftingRecipe.totalProgress;
if (DateTime.UtcNow.ToUnixTimestampMilliseconds() >= timestampFinish)
{
timestampFinish= DateTime.UtcNow.ToUnixTimestampMilliseconds()+1000* craftingRecipe.progressRound;
List<ItemCount> toConsume = craftingRecipe.GetIngredients(); List<ItemCount> toConsume = craftingRecipe.GetIngredients();
inCache.ConsumeItems(toConsume); inCache.ConsumeItems(toConsume);
craftingRecipe.outcomes.ForEach(e => craftingRecipe.outcomes.ForEach(e =>
@@ -92,6 +95,7 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
{ {
producer.inProduce = false; producer.inProduce = false;
producer.progress = 0; producer.progress = 0;
timestampFinish = 0;
} }
} }
else else
@@ -99,6 +103,7 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
producer.inBlock = false; producer.inBlock = false;
producer.inProduce = false; producer.inProduce = false;
producer.progress = 0; producer.progress = 0;
timestampFinish = 0;
} }
} }

View File

@@ -20,7 +20,7 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
public uint inputCacheIdFluid = 0; public uint inputCacheIdFluid = 0;
public uint outputCacheIdFluid = 0; public uint outputCacheIdFluid = 0;
public uint producerId = 0; public uint producerId = 0;
public int currentProgress = 0; public long timestampFinish = 0;
public override void Init(FactoryChapter chapter, FactoryNode node) public override void Init(FactoryChapter chapter, FactoryNode node)
{ {
FComponentCache cache1 = (FComponentCache)new FComponentCache(chapter.nextCompV(), FCComponentPos.CacheIn1).Init(); FComponentCache cache1 = (FComponentCache)new FComponentCache(chapter.nextCompV(), FCComponentPos.CacheIn1).Init();
@@ -79,11 +79,14 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
producer.inProduce = true; producer.inProduce = true;
producer.lastFormulaId = recipe; producer.lastFormulaId = recipe;
producer.progress += craftingRecipe.totalProgress/craftingRecipe.progressRound; if (timestampFinish == 0)
currentProgress++;
if (currentProgress >= craftingRecipe.progressRound)
{ {
currentProgress = 0; timestampFinish = DateTime.UtcNow.ToUnixTimestampMilliseconds() + 1000 * craftingRecipe.progressRound;
}
producer.progress = (DateTime.UtcNow.ToUnixTimestampMilliseconds() / timestampFinish) * craftingRecipe.totalProgress;
if (DateTime.UtcNow.ToUnixTimestampMilliseconds() >= timestampFinish)
{
timestampFinish = DateTime.UtcNow.ToUnixTimestampMilliseconds() + 1000 * craftingRecipe.progressRound;
List<ItemCount> toConsume = craftingRecipe.GetIngredients(); List<ItemCount> toConsume = craftingRecipe.GetIngredients();
inCache.ConsumeItems(toConsume); inCache.ConsumeItems(toConsume);
craftingRecipe.outcomes.ForEach(e => craftingRecipe.outcomes.ForEach(e =>
@@ -100,6 +103,7 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
{ {
producer.inProduce = false; producer.inProduce = false;
producer.progress = 0; producer.progress = 0;
timestampFinish = 0;
} }
} }
else else
@@ -107,6 +111,7 @@ namespace Campofinale.Game.Factory.BuildingsBehaviour
producer.inBlock = false; producer.inBlock = false;
producer.inProduce = false; producer.inProduce = false;
producer.progress = 0; producer.progress = 0;
timestampFinish = 0;
} }
} }

View File

@@ -13,7 +13,6 @@ namespace Campofinale.Game.Factory.Components
lastPopTms=DateTime.UtcNow.ToUnixTimestampMilliseconds(); lastPopTms=DateTime.UtcNow.ToUnixTimestampMilliseconds();
} }
public override void SetComponentInfo(ScdFacCom proto) public override void SetComponentInfo(ScdFacCom proto)
{ {
if (items == null) if (items == null)
@@ -26,8 +25,10 @@ namespace Campofinale.Game.Factory.Components
LastPopTms = lastPopTms, LastPopTms = lastPopTms,
}; };
items.ForEach(item => items.ForEach(item =>
{ {
if(item!=null)
proto.BoxConveyor.Items.Add(item.ToFactoryItemProto()); proto.BoxConveyor.Items.Add(item.ToFactoryItemProto());
}); });

View File

@@ -1,6 +1,7 @@
using Campofinale.Game.Factory.Components; using Campofinale.Game.Factory.Components;
using Campofinale.Resource; using Campofinale.Resource;
using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson.Serialization.Attributes;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -104,5 +105,7 @@ namespace Campofinale.Game.Factory
} }
return this; return this;
} }
} }
} }

View File

@@ -18,24 +18,59 @@ namespace Campofinale.Game.Factory
public uint v = 1; public uint v = 1;
public uint compV = 0; public uint compV = 0;
public int bandwidth = 200; public int bandwidth = 200;
public FactoryBlackboard blackboard = new();
public class FactoryBlackboard
{
public uint inventoryNodeId=1;
public FacBbPower power = new();
public class FacBbPower
{
public long powerGen;
public long powerSaveMax;
public long powerSaveCurrent;
public long powerCost;
public bool isStopByPower;
}
public ScdFactorySyncBlackboard ToProto()
{
return new ScdFactorySyncBlackboard()
{
InventoryNodeId = inventoryNodeId,
Power = new()
{
IsStopByPower=power.isStopByPower,
PowerCost=power.powerCost,
PowerGen=power.powerGen,
PowerSaveCurrent=power.powerSaveCurrent,
PowerSaveMax=power.powerSaveMax,
}
};
}
public ScdFactoryHsBb ToProtoHsBb()
{
return new ScdFactoryHsBb()
{
Power = new()
{
IsStopByPower = power.isStopByPower,
PowerSaveCurrent = power.powerSaveCurrent,
PowerSaveMax = power.powerSaveMax,
},
};
}
}
public ScFactorySyncChapter ToProto() public ScFactorySyncChapter ToProto()
{ {
blackboard = new();
ScFactorySyncChapter chapter = new() ScFactorySyncChapter chapter = new()
{ {
ChapterId = chapterId, ChapterId = chapterId,
Tms = DateTime.UtcNow.ToUnixTimestampMilliseconds(), Tms = DateTime.UtcNow.ToUnixTimestampMilliseconds(),
Blackboard = new() Blackboard = new(),
{
Power = new()
{
PowerGen = 0,
PowerSaveMax = 0,
PowerSaveCurrent = 0,
PowerCost = 0
},
InventoryNodeId = 1
},
Statistic = new() Statistic = new()
{ {
LastDay = new() LastDay = new()
@@ -57,15 +92,15 @@ namespace Campofinale.Game.Factory
}, },
}; };
chapter.Blackboard.Power.PowerSaveCurrent = bandwidth; blackboard.power.powerSaveCurrent = bandwidth;
domainDataTable[chapterId].levelGroup.ForEach(levelGroup => domainDataTable[chapterId].levelGroup.ForEach(levelGroup =>
{ {
int grade = GetOwner().sceneManager.GetScene(GetSceneNumIdFromLevelData(levelGroup)).grade; int grade = GetOwner().sceneManager.GetScene(GetSceneNumIdFromLevelData(levelGroup)).grade;
LevelGradeInfo sceneGrade = ResourceManager.levelGradeTable[levelGroup].grades.Find(g => g.grade == grade); LevelGradeInfo sceneGrade = ResourceManager.levelGradeTable[levelGroup].grades.Find(g => g.grade == grade);
if (sceneGrade != null) if (sceneGrade != null)
{ {
chapter.Blackboard.Power.PowerGen += sceneGrade.bandwidth; blackboard.power.powerGen += sceneGrade.bandwidth;
chapter.Blackboard.Power.PowerSaveMax += sceneGrade.bandwidth; blackboard.power.powerSaveMax += sceneGrade.bandwidth;
var scene = new ScdFactorySyncScene() var scene = new ScdFactorySyncScene()
{ {
@@ -141,7 +176,7 @@ namespace Campofinale.Game.Factory
{ {
} }
chapter.Blackboard = blackboard.ToProto();
chapter.Maps.AddRange(GetMaps()); chapter.Maps.AddRange(GetMaps());
return chapter; return chapter;
} }

View File

@@ -73,33 +73,19 @@ namespace Campofinale.Game.Factory
{ {
if (!player.Initialized) return; if (!player.Initialized) return;
if (player.GetCurrentChapter() == "") return; if (player.GetCurrentChapter() == "") return;
long curtimestamp = DateTime.UtcNow.ToUnixTimestampMilliseconds(); List<FactoryNode> nodeUpdateList = new();
ScFactoryHsSync hs = new()
{
Tms = curtimestamp,
CcList =
{
},
Blackboard = GetChapter(player.GetCurrentChapter()).ToProto().Blackboard,
ChapterId = player.GetCurrentChapter(),
};
foreach (var node in GetChapter(player.GetCurrentChapter()).nodes) foreach (var node in GetChapter(player.GetCurrentChapter()).nodes)
{ {
if (node != null) if (node != null)
{ {
if (node.position.DistanceXZ(player.position) < 150) if (node.position.DistanceXZ(player.position) < 150 && node.nodeType != FCNodeType.BoxConveyor)
{ {
node.components.ForEach(c => nodeUpdateList.Add(node);
{
hs.CcList.Add(c.ToProto());
});
} }
} }
} }
player.Send(ScMsgId.ScFactoryHsSync, hs); player.Send(new PacketScFactoryHsSync(player,GetChapter(player.GetCurrentChapter()), nodeUpdateList));
} }
public void Update() public void Update()
{ {

View File

@@ -11,6 +11,7 @@ using static Campofinale.Resource.ResourceManager.FactoryBuildingTable;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Drawing; using System.Drawing;
using Campofinale.Game.Inventory; using Campofinale.Game.Inventory;
using System.Numerics;
namespace Campofinale.Game.Factory namespace Campofinale.Game.Factory
{ {
@@ -135,7 +136,7 @@ namespace Campofinale.Game.Factory
count = 1 count = 1
}; };
if (conveyorNode.AddConveyorItem(add)) if (conveyorNode.AddConveyorItem(chapter,add))
{ {
did = true; did = true;
outputCache.ConsumeItems(new List<ItemCount>() { add }); outputCache.ConsumeItems(new List<ItemCount>() { add });
@@ -199,7 +200,7 @@ namespace Campofinale.Game.Factory
} }
} }
if(toRemove!=null) if(toRemove!=null)
input.items.Remove(toRemove); conveyorNode.RemoveConveyorItem(chapter,toRemove);
} }
} }
@@ -208,7 +209,14 @@ namespace Campofinale.Game.Factory
} }
private bool AddConveyorItem(ItemCount i) private void RemoveConveyorItem(FactoryChapter chapter,ItemCount toRemove)
{
FComponentBoxConveyor conveyorComp = GetComponent<FComponentBoxConveyor>();
conveyorComp.items.Remove(toRemove);
chapter.GetOwner().Send(new PacketScFactoryHsSync(chapter.GetOwner(), chapter, new List<FactoryNode>() { this}));
}
private bool AddConveyorItem(FactoryChapter chapter,ItemCount i)
{ {
float length=BlockCalculator.CalculateTotalBlocks(points); float length=BlockCalculator.CalculateTotalBlocks(points);
FComponentBoxConveyor conveyorComp = GetComponent<FComponentBoxConveyor>(); FComponentBoxConveyor conveyorComp = GetComponent<FComponentBoxConveyor>();
@@ -222,6 +230,7 @@ namespace Campofinale.Game.Factory
conveyorComp.items.Add(i); conveyorComp.items.Add(i);
i.tms = DateTime.UtcNow.ToUnixTimestampMilliseconds(); i.tms = DateTime.UtcNow.ToUnixTimestampMilliseconds();
conveyorComp.lastPopTms = i.tms; conveyorComp.lastPopTms = i.tms;
chapter.GetOwner().Send(new PacketScFactoryHsSync(chapter.GetOwner(), chapter, new List<FactoryNode>() { this }));
return true; return true;
} }
else else

View File

@@ -11,7 +11,6 @@ using static Campofinale.Resource.ResourceManager;
using Google.Protobuf.Collections; using Google.Protobuf.Collections;
using Campofinale.Packets.Sc; using Campofinale.Packets.Sc;
using Campofinale.Protocol; using Campofinale.Protocol;
using CsvHelper.Configuration.Attributes;
namespace Campofinale.Game.Inventory namespace Campofinale.Game.Inventory
{ {

View File

@@ -0,0 +1,31 @@
using Campofinale.Game.Factory;
using Campofinale.Network;
using Campofinale.Protocol;
using System.Numerics;
namespace Campofinale.Packets.Sc
{
public class PacketScFactoryHsSync : Packet
{
public PacketScFactoryHsSync(Player client, FactoryChapter chapter, List<FactoryNode> nodes) {
long curtimestamp = DateTime.UtcNow.ToUnixTimestampMilliseconds();
ScFactoryHsSync hs = new()
{
Tms = curtimestamp,
Blackboard = chapter.blackboard.ToProto(),
ChapterId = chapter.chapterId,
};
nodes.ForEach(node =>
{
node.components.ForEach(c =>
{
hs.CcList.Add(c.ToProto());
});
});
SetData(ScMsgId.ScFactoryHsSync, hs);
}
}
}

View File

@@ -152,7 +152,7 @@ namespace Campofinale
try try
{ {
clients.ForEach(client => { if (client != null) client.Update(); }); clients.ForEach(client => { if (client != null) client.Update(); });
Thread.Sleep(1000); Thread.Sleep(250);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@@ -1,229 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!--This config file was generated by Dotfuscator. Please use the Dotfuscator Config Editor to modify.-->
<!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v2.5.dtd">
<dotfuscator version="2.3">
<global>
<option>debugauto</option>
</global>
<input>
<loadpaths />
<asmlist>
<package refid="75fb581d-504b-40a3-8b1a-b1ac03b08930">
<file dir="C:\Users\Alessandro\source\repos\Campofinale\Campofinale\bin\Release" name="net8.0" />
<asmlist>
<inputassembly refid="604ebecb-0504-454e-ad08-34eda9a04774">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Campofinale.dll" />
</inputassembly>
<inputassembly refid="3ae7d7b1-7703-4c9d-b40f-15d33288f11a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Campofinale.Protocol.dll" />
</inputassembly>
<inputassembly refid="08e7eb08-20c7-4681-a00a-838c9388cfe8">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="CavemanTcp.dll" />
</inputassembly>
<inputassembly refid="75176245-be9c-450b-b68a-878bff8bf51a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="CsvHelper.dll" />
</inputassembly>
<inputassembly refid="16c2e47d-0170-4a33-bc31-1d97d021bb5d">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="DnsClient.dll" />
</inputassembly>
<inputassembly refid="ba0d0ec2-a7da-4b55-9409-e2fb34ed45f2">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Google.Protobuf.dll" />
</inputassembly>
<inputassembly refid="df591eb9-0816-47c5-a869-3ac41b3611c4">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="HttpServerLite.dll" />
</inputassembly>
<inputassembly refid="56b0c337-902f-4a99-b0f9-c78a8989d37a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="IpMatcher.dll" />
</inputassembly>
<inputassembly refid="2c1d4661-b740-491b-a9c7-0ab81f686612">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="KeraLua.dll" />
</inputassembly>
<inputassembly refid="794877c9-4ede-4a5d-826e-634289672ee2">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Microsoft.Extensions.Logging.Abstractions.dll" />
</inputassembly>
<inputassembly refid="164f6b24-38c1-4a23-9c04-bbdef42b8f98">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="MongoDB.Bson.dll" />
</inputassembly>
<inputassembly refid="c99724b1-c389-4524-afb2-eb102c333d4a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="MongoDB.Driver.dll" />
</inputassembly>
<inputassembly refid="7d96e1ea-bbf7-43b1-a538-41493fb3871c">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Newtonsoft.Json.dll" />
</inputassembly>
<inputassembly refid="17cea055-f817-486d-aa3a-1e1afbe52764">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="NLua.dll" />
</inputassembly>
<inputassembly refid="c5299b3b-de5c-4470-b57f-70b04e714b9b">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Pastel.dll" />
</inputassembly>
<inputassembly refid="04df18de-2ea9-4bf6-96e6-1a52d414729a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="RegexMatcher.dll" />
</inputassembly>
<inputassembly refid="489010cf-b982-47d2-aebb-b2ccaf6e3f57">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="SharpCompress.dll" />
</inputassembly>
<inputassembly refid="8b2b943b-7677-4533-a1e5-15edfa90bd84">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Snappier.dll" />
</inputassembly>
<inputassembly refid="3fed8738-cc79-4768-94e9-209f629f5a4d">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="SQLite-net.dll" />
</inputassembly>
<inputassembly refid="f91f7184-71b8-45b9-a8ed-eb565daff3f5">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="SQLiteNetExtensions.dll" />
</inputassembly>
<inputassembly refid="e923d72d-35da-435a-aa9a-2d540caff040">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="SQLitePCLRaw.batteries_v2.dll" />
</inputassembly>
<inputassembly refid="bbd50d8d-d78c-404f-8120-5b611a3714c4">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="SQLitePCLRaw.core.dll" />
</inputassembly>
<inputassembly refid="492c3d97-8768-4ac6-aa9b-0f85acc706cd">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="SQLitePCLRaw.provider.e_sqlite3.dll" />
</inputassembly>
<inputassembly refid="77f2e352-f3ad-4fe8-b924-9e27f1184e1a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="Timestamps.dll" />
</inputassembly>
<inputassembly refid="222ebd59-927a-46a3-bdef-e6f61e3fd73f">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="UrlMatcher.dll" />
</inputassembly>
<inputassembly refid="668764f1-b4c4-40ba-8631-24e31fcacc2a">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="" name="ZstdSharp.dll" />
</inputassembly>
</asmlist>
</package>
</asmlist>
</input>
<output>
<file dir="${configdir}/Dotfuscated" />
</output>
<renaming>
<option>xmlserialization</option>
<excludelist>
<namespace name="Campofinale.Resource" regex="true" />
<type name="ConfigFile" regex="true" />
</excludelist>
<mapping>
<mapoutput overwrite="false">
<file dir="" name="${configdir}/Dotfuscated/Map.xml" />
</mapoutput>
</mapping>
<referencerulelist>
<referencerule rulekey="{6655B10A-FD58-462d-8D4F-5B1316DFF0FF}" />
<referencerule rulekey="{7D9C8B02-2383-420f-8740-A9760394C2C1}" />
<referencerule rulekey="{229FD6F8-5BCC-427b-8F72-A7A413ECDF1A}" />
<referencerule rulekey="{2B7E7C8C-A39A-4db8-9DFC-6AFD38509061}" />
<referencerule rulekey="{494EA3BA-B947-44B5-BEE8-A11CC85AAF9B}" />
<referencerule rulekey="{89769974-93E9-4e71-8D92-BE70E855ACFC}" />
<referencerule rulekey="{4D81E604-A545-4631-8B6D-C3735F793F80}" />
<referencerule rulekey="{62bd3899-7d53-4336-8ca2-4e5dbae187d5}" />
</referencerulelist>
</renaming>
<sos />
<smartobfuscation>
<smartobfuscationreport verbosity="all" overwrite="false" />
</smartobfuscation>
</dotfuscator>