Browse Source

game patch(Immortal) 0.0.6.9121a patch updates, plus WIP build calculator code

main
Jonathan McCaffrey 4 years ago
parent
commit
656b914c6e
  1. 7
      Components/Inputs/EntityLabelComponent.razor
  2. 4
      Components/Navigation/DesktopNavComponent.razor
  3. BIN
      IGP/Database.db
  4. 1
      IGP/Dialog/EntityDialogComponent.razor
  5. 7
      IGP/Pages/Agile/Parts/SprintComponent.razor
  6. 12
      IGP/Pages/Database/Entity/Parts/EntityAbilitiesComponent.razor
  7. 4
      IGP/Pages/Database/Entity/Parts/EntityPassivesComponent.razor
  8. 12
      IGP/Pages/Database/Entity/Parts/EntityProductionComponent.razor
  9. 13
      IGP/Pages/Database/Entity/Parts/EntityStatsComponent.razor
  10. 18
      IGP/Program.cs
  11. 4
      IGP/wwwroot/content/notes/settings/hotkeys.md
  12. 2
      IGP/wwwroot/generated/AgileSprintModels.json
  13. 2
      IGP/wwwroot/generated/AgileTaskModels.json
  14. 2
      IGP/wwwroot/generated/GitChangeModels.json
  15. 2
      IGP/wwwroot/generated/GitPatchModels.json
  16. 1
      Model/Agile/Enums/TaskType.cs
  17. 23
      Model/BuildOrders/BuildOrderModel.cs
  18. 215
      Model/Entity/Data/DATA.cs
  19. 18
      Model/Entity/Data/Ids_Entity.cs
  20. 4
      Model/Entity/EntityModel.cs
  21. 2
      Model/Entity/Parts/EntityProductionModel.cs
  22. 2
      Model/Entity/Parts/EntityVitalityModel.cs
  23. 11
      Services/IServices.cs
  24. 2
      Services/Immortal/BuildComparisionService.cs
  25. 84
      Services/Immortal/BuildOrderService.cs
  26. 58
      Services/Immortal/GameLogicService.cs
  27. 1
      Services/Website/NavigationService.cs

7
Components/Inputs/EntityLabelComponent.razor

@ -22,15 +22,8 @@ else
private EntityModel Entity => DATA.Get()[EntityId];
protected override void OnInitialized()
{
Console.Write(Entity.Info().Name);
}
void EntityLabelClicked()
{
Console.WriteLine("EntityLabelClicked()");
entityDialogService.AddDialog(EntityId);
}
}

4
Components/Navigation/DesktopNavComponent.razor

@ -26,7 +26,7 @@
{
<div class="navMenuPosition">
<div class="navMenuContainer">
<DesktopNavSectionComponent Section=webSection/>
<DesktopNavSectionComponent Section=webSection> </DesktopNavSectionComponent>
</div>
</div>
}
@ -141,7 +141,6 @@
void MenuClicked(int menuName)
{
Console.WriteLine($"MenuClicked {menuName}");
navigationService.ChangeNavigationSectionId(menuName);
}
@ -152,7 +151,6 @@
void HoverOut(MouseEventArgs mouseEventArgs)
{
Console.WriteLine(NavigationStateType.Default);
navigationService.ChangeNavigationState(NavigationStateType.Default);
}

BIN
IGP/Database.db

Binary file not shown.

1
IGP/Dialog/EntityDialogComponent.razor

@ -155,7 +155,6 @@
entity = DATA.Get()[entityDialogService.GetEntityId()];
refresh++;
Console.WriteLine("OnUpdate()");
StateHasChanged();
}

7
IGP/Pages/Agile/Parts/SprintComponent.razor

@ -110,9 +110,6 @@
}
.taskContainer.@StatusType.In_Progress.ToLower() {
border-color: #030129;
background-color: #2c3a4c;
@ -144,6 +141,10 @@
border-width: 8px;
}
.taskContainer.@TaskType.Document.ToLower() {
border-style: dashed;
border-width: 2px;
}
.taskName {
font-weight: bold;

12
IGP/Pages/Database/Entity/Parts/EntityAbilitiesComponent.razor

@ -33,6 +33,12 @@
<b>- Energy: </b> @production.Energy
</div>
}
@if (!production.DefensiveLayer.Equals(0))
{
<div>
<b>- Shields:</b> @production.DefensiveLayer
</div>
}
if (production.BuildTime != 0)
{
<div>
@ -84,6 +90,12 @@
<b> Energy: </b> @production.Energy
</div>
}
@if (!production.DefensiveLayer.Equals(0))
{
<div>
<b>Shields:</b> @production.DefensiveLayer
</div>
}
if (production.BuildTime != 0)
{
<div>

4
IGP/Pages/Database/Entity/Parts/EntityPassivesComponent.razor

@ -15,7 +15,7 @@
<div>
<div>
<b>Name:</b> @info.Name
<b>Passive Name:</b> @info.Name
</div>
<div>
<b>- Description:</b> @((MarkupString)info.Description)
@ -54,7 +54,7 @@
var requirementModel = DATA.Get()[requirement.Id];
<div>
<span>
<b>@requirement.Requirement.Replace("_", " "):</b> @requirementModel.Info().Name
<b>- @requirement.Requirement.Replace("_", " "):</b> @requirementModel.Info().Name
</span>
</div>
}

12
IGP/Pages/Database/Entity/Parts/EntityProductionComponent.razor

@ -42,6 +42,12 @@
<b>Pyre:</b> @Production.Pyre
</div>
}
@if (!Production.Pyre.Equals(0))
{
<div>
<b>Shields:</b> @Production.DefensiveLayer
</div>
}
@if (!Production.BuildTime.Equals(0))
{
@ -128,6 +134,12 @@
<b>Pyre:</b> @Production.Pyre
</div>
}
@if (!Production.DefensiveLayer.Equals(0))
{
<div>
<b>Shields:</b> @Production.DefensiveLayer
</div>
}
@if (!Production.BuildTime.Equals(0))
{

13
IGP/Pages/Database/Entity/Parts/EntityStatsComponent.razor

@ -23,6 +23,13 @@
<b>Energy:</b> @Vitality.Energy
</div>
}
@if (!Vitality.Lasts.Equals(0))
{
<div>
<b>Lasts:</b> @Vitality.Lasts.ToString()s
</div>
}
@if (Vitality.Armor != "")
{
<div>
@ -92,6 +99,12 @@
<b>Energy:</b> @Vitality.Energy
</div>
}
@if (!Vitality.Lasts.Equals(0))
{
<div>
<b>Lasts:</b> @Vitality.Lasts.ToString()s
</div>
}
@if (Vitality.Armor != "")
{
<div>

18
IGP/Program.cs

@ -20,7 +20,6 @@ builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.
builder.Services.AddLocalization();
builder.Services.AddSingleton<INavigationService, NavigationService>();
builder.Services.AddSingleton<IKeyService, KeyService>();
builder.Services.AddSingleton<IImmortalSelectionService, ImmortalSelectionService>();
@ -30,9 +29,15 @@ builder.Services.AddSingleton<IEconomyService, EconomyService>();
builder.Services.AddSingleton<ITimingService, TimingService>();
builder.Services.AddSingleton<IMemoryTesterService, MemoryTesterService>();
builder.Services.AddSingleton<IEntityFilterService, EntityFilterService>();
builder.Services.AddSingleton<IGameLogicService, GameLogicService>();
builder.Services.AddSingleton<IEntityDisplayService, EntityDisplayService>();
builder.Services.AddSingleton<IEntityDialogService, EntityDialogService>();
builder.Services.AddSingleton<IToastService, ToastService>();
builder.Services.AddSingleton<IWebsiteService, WebsiteService>();
builder.Services.AddSingleton<IAgileService, AgileService>();
builder.Services.AddSingleton<IGitService, GitService>();
builder.Services.AddSingleton<INoteService, NoteService>();
builder.Services.AddSingleton<IDocumentationService, DocumentationService>();
builder.Services.AddSingleton(new HttpClient
{
@ -40,8 +45,6 @@ builder.Services.AddSingleton(new HttpClient
});
builder.Services.AddSingleton<IEntityDialogService, EntityDialogService>();
builder.Services.AddSingleton<IToastService, ToastService>();
#if NO_SQL
@ -49,11 +52,6 @@ builder.Services.AddSingleton<IToastService, ToastService>();
//builder.Services.AddDbContext<DatabaseContext>(options => { options.UseSqlite("Data Source=./Database.db"); });
#endif
builder.Services.AddSingleton<IWebsiteService, WebsiteService>();
builder.Services.AddSingleton<IAgileService, AgileService>();
builder.Services.AddSingleton<IGitService, GitService>();
builder.Services.AddSingleton<INoteService, NoteService>();
builder.Services.AddSingleton<IDocumentationService, DocumentationService>();
await builder.Build().RunAsync();

4
IGP/wwwroot/content/notes/settings/hotkeys.md

@ -7,7 +7,7 @@ updated_date: 4/13/2022
In the pre-alpha, IGP comes with some Unreal default hotkey setup.
This document will explain how to setup, modify, and use a new hotkey setup.
This document will explain how to set up, modify, and use a new hotkey setup.
## Save the "Input.ini" file
@ -104,7 +104,7 @@ You can notice a single line of this file can be broken down like this.
## Modify the Input.ini file
Your now going to want to modify the file with your own hotkey setup.
You are now going to want to modify the file with your own hotkey setup.
To do this, replace any of the Key=`VALUE` mapped to the desired actions with any value from the list below.

2
IGP/wwwroot/generated/AgileSprintModels.json

@ -1 +1 @@
[{"Id":1,"Name":"Agile Sprint","Description":"Changelogs and sprint views were going to be pushed till later, but I am feeling inspired by the IGP Content Creators\u0027 minimum weekly lifecycle requirement. So I am going to focus on agile-related tasks, and handle roadmap tasks after this initial sprint. All weekly sprints will release on Sunday, starting next Sunday.","StartDate":"2022-02-14T00:00:00","EndDate":"2022-02-20T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":2,"Name":"SQL Update","Description":"The SQL update is big enough to be a full sprint in of itself, and I spent less time this week for development. Will just extend sprint by 2 week, and remove all non SQL tasks from the sprint.","StartDate":"2022-02-20T00:00:00","EndDate":"2022-03-27T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":3,"Name":"Database Page","Description":"Improvements to the Database page","StartDate":"2022-03-27T00:00:00","EndDate":"2022-04-03T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":4,"Name":"Branding","Description":"Improve streaming branding around the website","StartDate":"2022-04-03T00:00:00","EndDate":"2022-04-10T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":5,"Name":"Calculators","Description":"Improve Calculators","StartDate":"2022-04-10T00:00:00","EndDate":"2022-04-24T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":6,"Name":"Infrastructure Misc","Description":"Localization, Analytics, and Test Automation","StartDate":"2022-04-24T00:00:00","EndDate":"2022-05-08T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":7,"Name":"Damage Calculator and Lists","Description":"Sort unit data by damage output. Select a attack and defense unit to see hits to kill.","StartDate":"2022-05-08T00:00:00","EndDate":"2022-05-22T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":8,"Name":"More Test Automation and CI","Description":"More test automation work. Integrate into CI","StartDate":"2022-05-22T00:00:00","EndDate":"2022-06-05T00:00:00","Notes":null,"AgileTaskModels":[]}]
[{"Id":0,"Name":"Easy Tasks","Description":"General tasks that I can grab when too tired to program","StartDate":null,"EndDate":null,"Notes":null,"AgileTaskModels":[]},{"Id":1,"Name":"Agile Sprint","Description":"Changelogs and sprint views were going to be pushed till later, but I am feeling inspired by the IGP Content Creators\u0027 minimum weekly lifecycle requirement. So I am going to focus on agile-related tasks, and handle roadmap tasks after this initial sprint. All weekly sprints will release on Sunday, starting next Sunday.","StartDate":"2022-02-14T00:00:00","EndDate":"2022-02-20T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":2,"Name":"SQL Update","Description":"The SQL update is big enough to be a full sprint in of itself, and I spent less time this week for development. Will just extend sprint by 2 week, and remove all non SQL tasks from the sprint.","StartDate":"2022-02-20T00:00:00","EndDate":"2022-03-27T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":3,"Name":"Database Page","Description":"Improvements to the Database page","StartDate":"2022-03-27T00:00:00","EndDate":"2022-04-03T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":4,"Name":"Branding","Description":"Improve streaming branding around the website","StartDate":"2022-04-03T00:00:00","EndDate":"2022-04-10T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":5,"Name":"Calculators","Description":"Improve Calculators","StartDate":"2022-04-10T00:00:00","EndDate":"2022-04-24T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":6,"Name":"Infrastructure Misc","Description":"Localization, Analytics, and Test Automation","StartDate":"2022-04-24T00:00:00","EndDate":"2022-05-08T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":7,"Name":"Damage Calculator and Lists","Description":"Sort unit data by damage output. Select a attack and defense unit to see hits to kill.","StartDate":"2022-05-08T00:00:00","EndDate":"2022-05-22T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":8,"Name":"More Test Automation and CI","Description":"More test automation work. Integrate into CI","StartDate":"2022-05-22T00:00:00","EndDate":"2022-06-05T00:00:00","Notes":null,"AgileTaskModels":[]}]

2
IGP/wwwroot/generated/AgileTaskModels.json

File diff suppressed because one or more lines are too long

2
IGP/wwwroot/generated/GitChangeModels.json

File diff suppressed because one or more lines are too long

2
IGP/wwwroot/generated/GitPatchModels.json

@ -1 +1 @@
[{"Id":1,"Name":"Database UX Patch","Date":"2022-03-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":2,"Name":"Thrum Stats Hotfix","Date":"2022-03-12T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":3,"Name":"Memory Tester Patch","Date":"2022-03-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":4,"Name":"Hide Pyre Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":5,"Name":"Stream Patch","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":6,"Name":"Agile UI Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":7,"Name":"Armor Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":8,"Name":"Home Page Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":9,"Name":"Mobile Menu Hotfix 2","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":10,"Name":"Mobile Menu Hotfix","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":11,"Name":"Mobile Menu Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":12,"Name":"0.0.6.8375a Patch","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":13,"Name":"Google Tracking Hotfix","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":14,"Name":"Privacy Policy Patch","Date":"2022-02-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":15,"Name":"Home Page Quick Hotfix","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":16,"Name":"Early Agile Patch","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":17,"Name":"Form Text Rendering Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":18,"Name":"Reducing Timing Interval Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":19,"Name":"Changelog Patch","Date":"2022-02-14T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":20,"Name":"SQL Patch","Date":"2022-03-26T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":21,"Name":"Stream Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":22,"Name":"0.0.6.8900a Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":23,"Name":"Database Links Patch","Date":"2022-04-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":24,"Name":"Open Source Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":25,"Name":"Stream Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":26,"Name":"Notes/Docs Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":27,"Name":"Stream Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":28,"Name":"Passive Patch","Date":"2022-04-12T00:00:00","GitChangeModels":[],"Important":"True"}]
[{"Id":1,"Name":"Database UX Patch","Date":"2022-03-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":2,"Name":"Thrum Stats Hotfix","Date":"2022-03-12T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":3,"Name":"Memory Tester Patch","Date":"2022-03-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":4,"Name":"Hide Pyre Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":5,"Name":"Stream Patch","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":6,"Name":"Agile UI Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":7,"Name":"Armor Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":8,"Name":"Home Page Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":9,"Name":"Mobile Menu Hotfix 2","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":10,"Name":"Mobile Menu Hotfix","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":11,"Name":"Mobile Menu Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":12,"Name":"0.0.6.8375a Patch","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":13,"Name":"Google Tracking Hotfix","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":14,"Name":"Privacy Policy Patch","Date":"2022-02-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":15,"Name":"Home Page Quick Hotfix","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":16,"Name":"Early Agile Patch","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":17,"Name":"Form Text Rendering Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":18,"Name":"Reducing Timing Interval Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":19,"Name":"Changelog Patch","Date":"2022-02-14T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":20,"Name":"SQL Patch","Date":"2022-03-26T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":21,"Name":"Stream Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":22,"Name":"0.0.6.8900a Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":23,"Name":"Database Links Patch","Date":"2022-04-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":24,"Name":"Open Source Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":25,"Name":"Stream Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":26,"Name":"Notes/Docs Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":27,"Name":"Stream Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":28,"Name":"Passive Patch","Date":"2022-04-12T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":29,"Name":"0.0.6.9121a Patch","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"True"}]

1
Model/Agile/Enums/TaskType.cs

@ -4,4 +4,5 @@ public class TaskType
{
public const string Feature = "Feature";
public const string Bug = "Bug";
public const string Document = "Document";
}

23
Model/BuildOrders/BuildOrderModel.cs

@ -10,7 +10,19 @@ public class BuildOrderModel
public string Name { get; set; } = "";
public string Color { get; set; } = "red";
public Dictionary<int, List<EntityModel>> Orders { get; set; } = new()
public Dictionary<int, List<EntityModel>> StartedOrders { get; set; } = new()
{
{
0,
new List<EntityModel>
{
EntityModel.Get(DataType.STARTING_Bastion),
EntityModel.Get(DataType.STARTING_TownHall_Aru)
}
}
};
public Dictionary<int, List<EntityModel>> CompletedOrders { get; set; } = new()
{
{
0,
@ -29,7 +41,7 @@ public class BuildOrderModel
public List<EntityModel> GetOrdersAt(int interval)
{
return (from ordersAtTime in Orders
return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key == interval
select orders).ToList();
@ -37,7 +49,7 @@ public class BuildOrderModel
public List<EntityModel> GetCompletedAt(int interval)
{
return (from ordersAtTime in Orders
return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) == interval
select orders).ToList();
@ -45,15 +57,16 @@ public class BuildOrderModel
public List<EntityModel> GetCompletedBefore(int interval)
{
return (from ordersAtTime in Orders
return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key >= interval
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
select orders).ToList();
}
public List<EntityModel> GetHarvestersCompletedBefore(int interval)
{
return (from ordersAtTime in Orders
return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
where orders.Harvest() != null

215
Model/Entity/Data/DATA.cs

@ -55,8 +55,8 @@ public class DATA
DataType.TEAPOT_FlyingTeapot, new EntityModel(DataType.TEAPOT_FlyingTeapot, EntityType.Teapot)
.AddPart(new EntityInfoModel
{
Name = "Flying Teapot", Description = "Basic observer. Can fly and see hidden units",
Notes = @"Much flying, Wow!"
Name = "Flying Teapot", Description = "Basic observer. Can fly and see hidden units within 1000 range.",
Notes = @"Doesn't take up a scout slot."
})
.AddPart(new EntityRequirementModel { Id = DataType.TEAPOT_Teapot })
.AddPart(new EntityProductionModel { Alloy = 100, Ether = 50 })
@ -259,6 +259,7 @@ public class DATA
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_InfuseTroops })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ConstructBloodWell })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_MarkPrey })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_TheGreatHunt })
.AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_BoneStalker_Xol })
.AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_WhiteWoodReaper_Xol })
@ -319,7 +320,12 @@ public class DATA
DataType.IPASSIVE_MothersHunger,
new EntityModel(DataType.IPASSIVE_MothersHunger, EntityType.Passive)
.AddPart(new EntityInfoModel
{ Name = "Mother's Hunger", Description = "Mala's Blood Wells grant you pyre for nearby non-quitl deaths." })
{
Name = "Mother's Hunger",
Description = "Mala's Blood Wells grant you pyre for nearby non-quitl deaths, based on the supply.",
Notes = "+1 per supply"
})
},
{
DataType.IPASSIVE_StalkersSense,
@ -458,7 +464,10 @@ public class DATA
DataType.VANGUARD_Sceptre_Orzum,
new EntityModel(DataType.VANGUARD_Sceptre_Orzum, EntityType.Army)
.AddPart(new EntityInfoModel
{ Name = "Sceptre", Descriptive = DescriptiveType.Harrier, Description = "" })
{
Name = "Sceptre", Descriptive = DescriptiveType.Harrier, Description = "",
Notes = "Loses 16 energy per second when moving."
})
.AddPart(new EntityTierModel { Tier = 3 })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "Z" })
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
@ -631,7 +640,7 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityVanguardAddedModel
{ ReplaceId = DataType.UNIT_MaskedHunter, ImmortalId = DataType.IMMORTAL_Xol })
.AddPart(new EntityProductionModel { Alloy = 50, Ether = 0, BuildTime = 40 })
.AddPart(new EntityProductionModel { Alloy = 50, Ether = 0, BuildTime = 35 })
.AddPart(new EntitySupplyModel { Takes = 2 })
.AddPart(new EntityVitalityModel
{ Health = 85, DefenseLayer = 10, Armor = ArmorType.Light, IsEtheric = false })
@ -687,6 +696,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{ Damage = 5, Range = 50, AttacksPerSecond = 1.887f, Targets = TargetType.Ground })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HarvestAlloy })
},
{
DataType.UNIT_Sipari,
@ -790,6 +800,8 @@ public class DATA
Damage = 20, MediumDamage = 24, HeavyDamage = 28, Range = 500, AttacksPerSecond = 0.667f,
Targets = TargetType.All
})
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WindStep })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_ZephyrRange })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Windstep })
},
{
@ -815,11 +827,13 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 435, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{
Damage = 20, LightDamage = 40, MediumDamage = 30, Range = 250, AttacksPerSecond = 0.5f,
LightDamage = 32, MediumDamage = 24, Damage = 16, Range = 250, AttacksPerSecond = 0.5f,
Targets = TargetType.Ground
})
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_SiroccoScript })
.AddPart(new EntityIdPassiveModel(){Id = DataType.PASSIVE_RadiantWard})
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_RadiantWard })
.AddPart(new EntityIdAbilityModel {Id = DataType.ABILITY_RadiantWard})
.AddPart(new EntityIdPassiveModel(){Id = DataType.PASSIVE_SiroccoScript})
},
{
@ -829,7 +843,8 @@ public class DATA
{
Name = "Absolver", Descriptive = DescriptiveType.Zone_Control,
Description =
"Zone Control (Ground Unit) - Deploys to gain increased rate of fire to hold a position. Can only attack ground."
"Zone Control (Ground Unit) - Deploys to gain increased rate of fire to hold a position. Can only attack ground.",
Notes = "Deploy time is 2 seconds. Mobilize time is 1.5 seconds."
})
.AddPart(new EntityTierModel { Tier = 2 })
.AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "Z" })
@ -886,7 +901,7 @@ public class DATA
.AddPart(new EntityWeaponModel
{ Damage = 8, Range = 500, AttacksPerSecond = 1.429f, Targets = TargetType.Ground })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_RelicOfTheWrathfulGaze })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Maledictions })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Maledictions })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_RelicOfTheWrathfulGaze })
},
{
@ -922,6 +937,8 @@ public class DATA
Damage = 60, MediumDamage = 80, HeavyDamage = 100, Range = 1300, AttacksPerSecond = 0.143f,
Targets = TargetType.Ground
})
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedRuin })
},
{
DataType.UNIT_Sentinel,
@ -1059,6 +1076,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{ Damage = 8, Range = 40, AttacksPerSecond = 1.25f, Targets = TargetType.Ground })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HarvestAlloy })
},
{
DataType.UNIT_MaskedHunter,
@ -1088,6 +1106,7 @@ public class DATA
{ Damage = 7, Range = 400, AttacksPerSecond = 1.4f, Targets = TargetType.All, HeavyDamage = 6 })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_Offering })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BloodMothersFevor })
.AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_Offering })
},
{
DataType.UNIT_Xacal,
@ -1148,6 +1167,8 @@ public class DATA
Targets = TargetType.Ground
})
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuenchingScythes })
.AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_CullingStrike })
},
{
DataType.UNIT_RedSeer,
@ -1311,6 +1332,8 @@ public class DATA
TargetType.Air
})
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_AaroxBurn })
.AddPart(new EntityIdAbilityModel() { Id = DataType.ABILITY_DiveBomb })
},
{
DataType.UNIT_Thrum,
@ -1355,6 +1378,7 @@ public class DATA
.AddPart(new EntityWeaponModel
{ Damage = 9, Range = 500, AttacksPerSecond = 0.714f, Targets = TargetType.Ground })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_GuidingAmber })
.AddPart(new EntityIdPassiveModel() { Id = DataType.PASSIVE_WraithBowRange })
},
{
DataType.UNIT_Behemoth,
@ -1383,7 +1407,7 @@ public class DATA
Targets = TargetType.Ground
})
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BehemothCapacity })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuitlStorage })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_BehemothCapacity })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuitlStorage2 })
@ -1417,6 +1441,19 @@ public class DATA
})
},
{
DataType.UPGRADE_RadiantWard,
new EntityModel(DataType.UPGRADE_RadiantWard, EntityType.Tech)
.AddPart(new EntityInfoModel
{
Name = "Research Radiant Ward", Descriptive = DescriptiveType.Upgrade,
Description = "Unlocks the dervish's Radiant Ward ability"
})
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
.AddPart(new EntityProductionModel { Alloy = 80, Ether = 80, BuildTime = 34 })
},
{
DataType.UPGRADE_FortifiedIcons,
new EntityModel(DataType.UPGRADE_FortifiedIcons, EntityType.Tech)
@ -1498,7 +1535,7 @@ public class DATA
.AddPart(new EntityInfoModel
{
Name = "Sirocco Script", Descriptive = DescriptiveType.Upgrade,
Description = "Increases the Dervish's movement speed by 50%."
Description = "Grant's the Dervish Sirocco Script"
})
.AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
@ -1563,7 +1600,10 @@ public class DATA
DataType.UPGRADE_Offering,
new EntityModel(DataType.UPGRADE_Offering, EntityType.Tech)
.AddPart(new EntityInfoModel
{ Name = "Offering", Descriptive = DescriptiveType.Upgrade, Description = "Unlocks Offering" })
{
Name = "Offering",
Descriptive = DescriptiveType.Upgrade,
Description = "Unlocks Offering" })
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel
@ -1684,9 +1724,47 @@ public class DATA
Requirement = RequirementType.Research_Building
})
.AddPart(new EntityProductionModel { Alloy = 50, Ether = 75, BuildTime = 29 })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WraithBowRange })
.AddPart(new EntityIdPassiveModel() { Id = DataType.PASSIVE_WraithBowRange })
},
{
DataType.UPGRADE_Stalk,
new EntityModel(DataType.UPGRADE_Stalk, EntityType.Tech)
.AddPart(new EntityInfoModel
{
Name = "Research Stalk",
Description = "Unlocks the Bone Stalker's Stabilize",
Descriptive = DescriptiveType.Upgrade
})
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "TAB", HoldSpace = false })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel
{
Id = DataType.BUILDING_Neurocyte,
Requirement = RequirementType.Research_Building
})
.AddPart(new EntityProductionModel { Alloy = 100, Ether = 80, BuildTime = 60 })
},
{
DataType.UPGRADE_Ambush,
new EntityModel(DataType.UPGRADE_Ambush, EntityType.Tech)
.AddPart(new EntityInfoModel
{
Name = "Research Ambush",
Description = "When Hidden, the Bone Stalker's next attack deals double damage",
Descriptive = DescriptiveType.Upgrade
})
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB", HoldSpace = false })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel
{
Id = DataType.BUILDING_RedVale,
Requirement = RequirementType.Research_Building
})
.AddPart(new EntityProductionModel { Alloy = 100, Ether = 125, BuildTime = 80 })
},
{
DataType.UPGRADE_BloodPlague,
new EntityModel(DataType.UPGRADE_BloodPlague, EntityType.Tech)
@ -1726,7 +1804,7 @@ public class DATA
// Neutral
{
DataType.PASSIVE_BastionPassives,
new EntityModel(DataType.PASSIVE_Respite, EntityType.Passive)
new EntityModel(DataType.PASSIVE_BastionPassives, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "(Scouts and Pyre)", Descriptive = DescriptiveType.Passive,
@ -1742,7 +1820,7 @@ public class DATA
{
Name = "Respite", Descriptive = DescriptiveType.Passive,
Description =
@"Nearby units will slowly heal after not attacking for several seconds."
@"Nearby units will slowly heal after not attacking or being attacked for 10 seconds."
})
.AddPart(new EntityFactionModel { Faction = FactionType.Any })
},
@ -1854,6 +1932,18 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
{
DataType.PASSIVE_SiroccoScript,
new EntityModel(DataType.PASSIVE_SiroccoScript, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Sirocco Script Rites", Descriptive = DescriptiveType.Passive,
Description = @"Increases the derish's movement speed"
})
.AddPart(new EntityRequirementModel(){ Id = DataType.UPGRADE_SiroccoScript})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
{
DataType.PASSIVE_HallowingRites,
new EntityModel(DataType.PASSIVE_HallowingRites, EntityType.Passive)
@ -1956,8 +2046,8 @@ public class DATA
},
{
DataType.PASSIVE_QuitlStorage,
new EntityModel(DataType.PASSIVE_QuitlStorage, EntityType.Passive)
DataType.PASSIVE_BehemothCapacity,
new EntityModel(DataType.PASSIVE_BehemothCapacity, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Quitl Storage", Descriptive = DescriptiveType.Passive,
@ -2000,17 +2090,7 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
},
{
DataType.PASSIVE_RadiantWard,
new EntityModel(DataType.PASSIVE_RadiantWard, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Radiant Ward", Descriptive = DescriptiveType.Applies_Debuff,
Description = @"This unit is revealed?",
Notes = "Not implemented."
})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
{
DataType.PASSIVE_Stalk,
@ -2018,10 +2098,11 @@ public class DATA
.AddPart(new EntityInfoModel
{
Name = "Stalk", Descriptive = DescriptiveType.Passive,
Description = @"This unit has hidden when stabilized.",
Notes = "Not implemented."
Description = @"After remaining stationary for several seconds, gain Hidden 3 and a movement speed boost.",
Notes = "Lose hidden on attacking"
})
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel{Id=DataType.UPGRADE_Stalk})
},
{
@ -2029,9 +2110,20 @@ public class DATA
new EntityModel(DataType.PASSIVE_Stalk, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Stalk", Descriptive = DescriptiveType.Passive,
Name = "Ambush", Descriptive = DescriptiveType.Passive,
Description = @"This unit deals double damage when attacking from hidden.",
Notes = "Not implemented."
})
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel(){Id=DataType.UPGRADE_Ambush})
},
{
DataType.PASSIVE_HiddenX,
new EntityModel(DataType.PASSIVE_HiddenX, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Hidden X", Descriptive = DescriptiveType.Passive,
Description = @"This unit cannot be seen unless enemies units are within X.",
})
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
},
@ -2085,19 +2177,6 @@ public class DATA
.AddPart(new EntityRequirementModel(){ Id = DataType.UPGRADE_FortifiedIcons, Requirement = RequirementType.Research_Upgrade})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
{
DataType.PASSIVE_Maledictions,
new EntityModel(DataType.PASSIVE_Maledictions, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Maledictions", Descriptive = DescriptiveType.Applies_Debuff,
Description = @"Stun ground unit? With Maledictions spell.",
Notes = "Not implemented"
})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
{
DataType.PASSIVE_MendingCommand,
new EntityModel(DataType.PASSIVE_MendingCommand, EntityType.Passive)
@ -2246,6 +2325,32 @@ public class DATA
// Abilities
// Q'Rath
{
DataType.ABILITY_RadiantWard,
new EntityModel(DataType.ABILITY_RadiantWard, EntityType.Ability)
.AddPart(new EntityInfoModel
{
Name = "Radiant Ward", Descriptive = DescriptiveType.Ability,
Description = @"Spawns a mine that reveals enemy units, slows them, and makes them take increased damage for a duration.",
})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
.AddPart(new EntityProductionModel { DefensiveLayer = 30, Cooldown = 40} )
.AddPart(new EntityRequirementModel { Id = DataType.UPGRADE_RadiantWard })
.AddPart(new EntityVitalityModel {Health = 30, DefenseLayer = 30, Lasts = 30, Armor = ArmorType.Light, IsStructure = true})
},
{
DataType.ABILITY_Maledictions,
new EntityModel(DataType.ABILITY_Maledictions, EntityType.Ability)
.AddPart(new EntityInfoModel
{
Name = "Maledictions", Descriptive = DescriptiveType.Ability,
Description = @"Stun ground unit? With Maledictions spell.",
Notes = "Not implemented"
})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
{
DataType.ABILITY_BladesOfTheGodhead,
new EntityModel(DataType.ABILITY_BladesOfTheGodhead, EntityType.Ability)
@ -2368,10 +2473,12 @@ public class DATA
{
Name = "Offering", Descriptive = DescriptiveType.Ability,
Description =
"Sacrifices 10 life to increase range, speed, and attack speed for several seconds."
"Sacrifices 10 life to give Masked Hunters +3 damage for 3 shots. And increased speed and attack speed."
})
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "D" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel(){ Id= DataType.UPGRADE_Offering})
},
{
DataType.ABILITY_DiveBomb,
@ -2405,7 +2512,7 @@ public class DATA
{
Name = "Lethal Bond", Descriptive = DescriptiveType.Ability,
Description =
"After a short delay, enemy units in the target area receive a debuff which causes them to take double damage from all attacks for a duration."
"After a short delay, enemy units in the target area receive a debuff which causes them to take double damage from all attacks for a duration. Also gives the White Wood Reaper invisibility if it affects at least 1 enemy"
})
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "D" })
.AddPart(new EntityVanguardAddedModel
@ -2484,7 +2591,7 @@ public class DATA
Description =
"Deals damage over time in an area and marks affected units for several seconds. Units that die while marked spawn a quitl.",
Notes =
"Deals 20 damage + 15% of max life of the target immediately upon affecting the enemy unit. It deals the same damage again after 8 seconds. If the unit dies during those 8 seconds (including the final burst), spawns 1 quitl every 2 supply of the dead unit, rounded up"
"Deals 10 damage + 5% of max life of the target immediately upon affecting the enemy unit. It deals 15 damage + 15% after 8 seconds. If the unit dies during those 8 seconds (including the final burst), spawns 1 quitl every 2 supply of the dead unit, rounded up. Stacking only refreshes duration of debuff."
})
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "D" })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
@ -2530,6 +2637,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 210, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{ Damage = 125, Range = 1500, AttacksPerSecond = 0.175f, Targets = TargetType.Ground })
.AddPart(new EntityIdPassiveModel(){Id = DataType.PASSIVE_HiddenX})
},
// Pyre Spells
// Q'Rath
@ -2691,16 +2799,19 @@ public class DATA
{
DataType.ISPELL_MarkPrey,
new EntityModel(DataType.ISPELL_MarkPrey, EntityType.Pyre_Spell)
.AddPart(new EntityInfoModel { Name = "Mark Prey", Description = "Knowing where things are lets you hunt them?", Notes = "Not implemented."})
.AddPart(new EntityInfoModel { Name = "Mark Prey",
Description = @"Enemy units in the target area are <b>Revealed</b> through fog of war. Units still in the area after a short delay are marked for 10 seconds to take bonus damage and provide Pyre when killed.",
Notes = "+3 pyre for kills"
})
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "1" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
.AddPart(new EntityProductionModel { })
.AddPart(new EntityProductionModel { Cooldown = 15, Pyre = 25})
},
{
DataType.ISPELL_TheGreatHunt,
new EntityModel(DataType.ISPELL_TheGreatHunt, EntityType.Pyre_Spell)
.AddPart(new EntityInfoModel { Name = "The Great Hunt", Description = "Reduces enemy vision to 300."})
.AddPart(new EntityInfoModel { Name = "The Great Hunt", Description = "Enemy unit and structures have their vision reduce to 3 for a short time."})
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "1" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })

18
Model/Entity/Data/Ids_Entity.cs

@ -114,17 +114,24 @@ public static class DataType
public static string UPGRADE_BehemothCapacity = "d0390dd2-d9a5-4b20-9d8b-f554f4c52143";
public static string UPGRADE_BloodPlague = "9c207e21-f595-49d0-967d-f30ca8cc3745";
public static string UPGRADE_BirthingStorm = "0cb2f1a4-03b3-491b-9db3-d2d4590ede3a";
public static string UPGRADE_RadiantWard = "c8acc6d0-9f26-475a-aff4-4e2b2f9657f2";
public static string UPGRADE_Stalk = "36fbc2c0-e9e3-4f54-a79a-981db908c25c";
public static string UPGRADE_Ambush = "6cf83dc9-717f-4fa9-b417-a3371474a1da";
public static string PASSIVE_WraithBowRange = "196dd8a6-2044-44e1-aac4-fbaa40552699";
public static string PASSIVE_HiddenX = "7b819996-ffc0-4e07-9c11-c91c5f9d467b";
public static string PASSIVE_Respite = "607c39f4-a957-4a7a-8fc6-a239f9e570ec";
public static string PASSIVE_BastionPassives = "ea42b9cb-2456-4ed2-b490-fcfde12c6153";
public static string PASSIVE_HallowedWarrior = "fea43ced-33f3-4531-af7d-740c1789fec1";
public static string PASSIVE_GreavesOfAhqar = "3c408d75-7bee-4089-84c0-74620ac708b6";
public static string PASSIVE_FortifiedIcons = "35f3f02f-e22e-44be-b2ea-82972c383308";
public static string PASSIVE_Maledictions = "6cdc109c-157d-433a-b225-192e39c0b613";
public static string PASSIVE_HarvestAlloy = "84bacf5a-b106-455c-8cff-66c3998404f8";
public static string PASSIVE_RelicOfTheWrathfulGaze = "ccebc0c9-cfd5-465a-8a5d-2495bd745a83";
@ -139,6 +146,8 @@ public static class DataType
public static string PASSIVE_ThroneMovingShot = "699423ed-7410-4daf-8b07-9dc733a8bf55";
public static string PASSIVE_SiroccoScript = "11c21afa-ff88-4e42-9f97-a1d1595b115c";
public static string PASSIVE_HallowingRites = "9c8ae47b-954e-4a17-8f35-f128c9114b61";
public static string PASSIVE_RegentsWrath = "f111f004-6548-4430-9d13-ef44ab108ae7";
public static string PASSIVE_PsalmOfFire = "d28f6b7c-d319-4fb8-bdd4-92ede40a0751";
@ -146,10 +155,9 @@ public static class DataType
public static string PASSIVE_HallowedGround = "bdb28984-246f-4642-84ab-9e83c02b3e2e";
public static string PASSIVE_CastFromLife = "3cc734de-f8e7-4e69-9fa5-bdf725c4941b";
public static string PASSIVE_Rootway = "46768d4a-5047-4973-b5ca-995cda25ee8d";
public static string PASSIVE_QuitlStorage = "a210f109-d3ac-44d4-9724-601c795a2394";
public static string PASSIVE_BehemothCapacity = "a210f109-d3ac-44d4-9724-601c795a2394";
public static string PASSIVE_QuitlStorage2 = "0b27b863-fce5-40e4-96c7-6df94bdd92b9";
public static string PASSIVE_Temporary = "940c04f1-df0b-4cf7-9514-09dfd9009554";
public static string PASSIVE_RadiantWard = "db1fc8bd-d86a-4eda-b83c-16e8d0ce4f81";
public static string PASSIVE_Stalk = "9c107bfd-0050-4670-91b8-f9a8d771225d";
public static string PASSIVE_Ambush = "9d0a9482-0303-4a15-bb88-972f6ae60a39";
@ -177,6 +185,10 @@ public static class DataType
public static string PASSIVE_FireQuitl = "80f6b382-da1c-49a1-8235-1ea37983ea54";
public static string PASSIVE_XacalDamage = "69928f20-5332-418f-ada3-694da3f7b199";
public static string ABILITY_RadiantWard = "db1fc8bd-d86a-4eda-b83c-16e8d0ce4f81";
public static string ABILITY_Maledictions = "6cdc109c-157d-433a-b225-192e39c0b613";
public static string ABILITY_BladesOfTheGodhead = "000154ac-faf5-483d-b0bd-e84335891a27";
public static string ABILITY_Windstep = "a410b296-39f7-42e0-87c8-6cef11eb967c";
public static string ABILITY_Leap = "aa155b88-125a-4d25-b63f-77987ea6e519";

4
Model/Entity/EntityModel.cs

@ -12,8 +12,8 @@ namespace Model.Entity;
public class EntityModel
{
public static readonly string GameVersion = "0.0.6.8900a";
public static readonly string GameVersion = "0.0.6.9121a";
private static Dictionary<string, EntityModel> _database= null!;
private static List<EntityModel> _entityModels= null!;

2
Model/Entity/Parts/EntityProductionModel.cs

@ -10,6 +10,8 @@ public class EntityProductionModel : IEntityPartInterface
public int Pyre { get; set; } = 0;
public int Energy { get; set; } = 0;
public int DefensiveLayer { get; set; } = 0;
public int BuildTime { get; set; } = 0;
// Remove cooldown as a cost, and move into ability stats

2
Model/Entity/Parts/EntityVitalityModel.cs

@ -7,6 +7,8 @@ public class EntityVitalityModel : IEntityPartInterface
public string Type { get; set; } = "EntityVitalityModel";
public int Health { get; set; } = 0;
public int DefenseLayer { get; set; } = 0;
public int Lasts { get; set; } = 0;
public string Defense { get; set; } = DefenseType.None;
public string Armor { get; set; } = ArmorType.Light;
public bool IsEtheric { get; set; } = false;

11
Services/IServices.cs

@ -244,6 +244,17 @@ public interface IMemoryTesterService {
public void Unsubscribe(MemoryAction memoryAction);
}
public interface IGameLogicService
{
public bool Add(EntityModel entity, int atInterval);
public int MeetsRequirements(EntityModel entity, int interval);
public int MeetsAlloy(EntityModel entity, int interval);
public int MeetsEther(EntityModel entity, int interval);
public int MeetsPyre(EntityModel entity, int interval);
public int MeetsSupply(EntityModel entity, int interval);
public int MeetsTrainingQueue(EntityModel entity, int interval);
}
public interface IBuildOrderService {
public bool Add(EntityModel entity, IEconomyService withEconomy, IToastService toastService);
public void Add(EntityModel entity, int atInterval);

2
Services/Immortal/BuildComparisionService.cs

@ -72,7 +72,7 @@ public class BuildComparisionService : IBuildComparisonService {
public void HydratedLoadedJson() {
foreach (var build in buildComparison.Builds)
foreach (var orders in build.Orders.Values)
foreach (var orders in build.StartedOrders.Values)
foreach (var order in orders)
order.Copy(EntityModel.Get(order.DataType));
}

84
Services/Immortal/BuildOrderService.cs

@ -22,7 +22,7 @@ public class BuildOrderService : IBuildOrderService
public Dictionary<int, List<EntityModel>> GetOrders()
{
return buildOrder.Orders;
return buildOrder.StartedOrders;
}
public void Subscribe(Action action)
@ -37,11 +37,27 @@ public class BuildOrderService : IBuildOrderService
public void Add(EntityModel entity, int atInterval)
{
if (!buildOrder.Orders.ContainsKey(atInterval))
buildOrder.Orders.Add(atInterval, new List<EntityModel> { entity.Clone() });
else
buildOrder.Orders[atInterval].Add(entity.Clone());
if (!buildOrder.StartedOrders.ContainsKey(atInterval))
{
buildOrder.StartedOrders.Add(atInterval, new List<EntityModel> { });
}
var production = entity.Production();
var completedTime = atInterval;
if (production != null)
{
completedTime += production.BuildTime;
}
if (!buildOrder.CompletedOrders.ContainsKey(atInterval))
{
buildOrder.CompletedOrders.Add(completedTime, new List<EntityModel> { });
}
buildOrder.StartedOrders[atInterval].Add(entity.Clone());
buildOrder.CompletedOrders[completedTime].Add(entity.Clone());
if (atInterval > lastInterval) lastInterval = atInterval;
}
@ -72,10 +88,10 @@ public class BuildOrderService : IBuildOrderService
//Account for human Micro delay
interval += HumanMicro;
if (!buildOrder.Orders.ContainsKey(interval))
buildOrder.Orders.Add(interval, new List<EntityModel> { entity.Clone() });
if (!buildOrder.StartedOrders.ContainsKey(interval))
buildOrder.StartedOrders.Add(interval, new List<EntityModel> { entity.Clone() });
else
buildOrder.Orders[interval].Add(entity.Clone());
buildOrder.StartedOrders[interval].Add(entity.Clone());
lastInterval = interval;
@ -109,20 +125,20 @@ public class BuildOrderService : IBuildOrderService
EntityModel entityRemoved = null!;
if (buildOrder.Orders.Keys.Count > 1)
if (buildOrder.StartedOrders.Keys.Count > 1)
{
var last = buildOrder.Orders.Keys.Last();
var last = buildOrder.StartedOrders.Keys.Last();
if (buildOrder.Orders[last].Count > 0)
if (buildOrder.StartedOrders[last].Count > 0)
{
entityRemoved = buildOrder.Orders[last].Last();
buildOrder.Orders[last].Remove(buildOrder.Orders[last].Last());
entityRemoved = buildOrder.StartedOrders[last].Last();
buildOrder.StartedOrders[last].Remove(buildOrder.StartedOrders[last].Last());
}
if (buildOrder.Orders[last].Count == 0) buildOrder.Orders.Remove(last);
if (buildOrder.StartedOrders[last].Count == 0) buildOrder.StartedOrders.Remove(last);
if (buildOrder.Orders.Keys.Count > 0)
lastInterval = buildOrder.Orders.Keys.Last() + 1;
if (buildOrder.StartedOrders.Keys.Count > 0)
lastInterval = buildOrder.StartedOrders.Keys.Last() + 1;
else
lastInterval = 1;
@ -158,23 +174,27 @@ public class BuildOrderService : IBuildOrderService
public List<EntityModel> GetOrdersAt(int interval)
{
return (from ordersAtTime in buildOrder.Orders
from orders in ordersAtTime.Value
where ordersAtTime.Key == interval
select orders).ToList();
if (!buildOrder.StartedOrders.ContainsKey(interval))
{
return new List<EntityModel>();
}
return buildOrder.StartedOrders[interval].ToList();
}
public List<EntityModel> GetCompletedAt(int interval)
{
return (from ordersAtTime in buildOrder.Orders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) == interval
select orders).ToList();
if (!buildOrder.CompletedOrders.ContainsKey(interval))
{
return new List<EntityModel>();
}
return buildOrder.CompletedOrders[interval].ToList();
}
public List<EntityModel> GetCompletedBefore(int interval)
{
return (from ordersAtTime in buildOrder.Orders
{
return (from ordersAtTime in buildOrder.StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
select orders).ToList();
@ -182,7 +202,7 @@ public class BuildOrderService : IBuildOrderService
public List<EntityModel> GetHarvestersCompletedBefore(int interval)
{
return (from ordersAtTime in buildOrder.Orders
return (from ordersAtTime in buildOrder.StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
where orders.Harvest() != null
@ -197,14 +217,14 @@ public class BuildOrderService : IBuildOrderService
foreach (var requirement in requirements)
if (requirement.Requirement == RequirementType.Morph)
{
var entitiesNeeded = from entitiesAtInterval in buildOrder.Orders
var entitiesNeeded = from entitiesAtInterval in buildOrder.StartedOrders
from requiredEntity in entitiesAtInterval.Value
where requestedInterval > entitiesAtInterval.Key +
(requiredEntity.Production() == null ? 0 : requiredEntity.Production().BuildTime)
where requiredEntity.DataType == requirement.Id
select requiredEntity;
var entitiesAlreadyMorphed = from entitiesAtInterval in buildOrder.Orders
var entitiesAlreadyMorphed = from entitiesAtInterval in buildOrder.StartedOrders
from existingEntity in entitiesAtInterval.Value
where existingEntity.DataType == entity.DataType
select existingEntity;
@ -214,7 +234,7 @@ public class BuildOrderService : IBuildOrderService
}
else
{
var entitiesNeeded = from entitiesAtInterval in buildOrder.Orders
var entitiesNeeded = from entitiesAtInterval in buildOrder.StartedOrders
from requiredEntity in entitiesAtInterval.Value
where requestedInterval > entitiesAtInterval.Key +
(requiredEntity.Production() == null ? 0 : requiredEntity.Production().BuildTime)
@ -279,14 +299,14 @@ public class BuildOrderService : IBuildOrderService
var supplyTakenTotal = 0;
var supplyTakens = from entitiesAtInterval in buildOrder.Orders
var supplyTakens = from entitiesAtInterval in buildOrder.StartedOrders
from supplyTakingEntity in entitiesAtInterval.Value
where supplyTakingEntity.Supply()?.Takes > 0
select supplyTakingEntity.Supply().Takes;
foreach (var supplyTaken in supplyTakens) supplyTakenTotal += supplyTaken;
var supplyGrantedTotal = 0;
var supplyGranteds = from entitiesAtInterval in buildOrder.Orders
var supplyGranteds = from entitiesAtInterval in buildOrder.StartedOrders
from supplyGrantingEntity in entitiesAtInterval.Value
where supplyGrantingEntity.Supply()?.Grants > 0
select supplyGrantingEntity.Supply().Grants;

58
Services/Immortal/GameLogicService.cs

@ -0,0 +1,58 @@
using Model.Entity;
using Model.Types;
namespace Services.Immortal;
public class GameLogicService : IGameLogicService
{
private ITimingService timingService;
private IEconomyService economyService;
private IBuildOrderService buildOrderService;
public GameLogicService(ITimingService timingService, IEconomyService economyService, IBuildOrderService buildOrderService)
{
this.timingService = timingService;
this.economyService = economyService;
this.buildOrderService = buildOrderService;
}
public bool Add(EntityModel entity, int atInterval)
{
throw new NotImplementedException();
}
public int MeetsRequirements(EntityModel entity, int interval)
{
var buildOrders = buildOrderService.GetCompletedBefore(interval);
return -1;
}
public int MeetsAlloy(EntityModel entity, int interval)
{
throw new NotImplementedException();
}
public int MeetsEther(EntityModel entity, int interval)
{
throw new NotImplementedException();
}
public int MeetsPyre(EntityModel entity, int interval)
{
throw new NotImplementedException();
}
public int MeetsSupply(EntityModel entity, int interval)
{
throw new NotImplementedException();
}
public int MeetsTrainingQueue(EntityModel entity, int interval)
{
throw new NotImplementedException();
}
}

1
Services/Website/NavigationService.cs

@ -63,7 +63,6 @@ public class NavigationService : INavigationService {
webSectionType = section;
navSelectionType = NavSelectionType.Section;
Console.WriteLine(webSectionType);
NotifyDataChanged();
}

Loading…
Cancel
Save