Browse Source

feat(Database) Updating database to latest patch. Updating Calc hotkey UI to match

main
Jonathan McCaffrey 4 years ago
parent
commit
7411cc7416
  1. BIN
      IGP/Database.db
  2. 94
      IGP/Pages/BuildCalculator/Parts/ArmyComponent.razor
  3. 228
      IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor
  4. 2
      IGP/wwwroot/generated/GitChangeModels.json
  5. 2
      IGP/wwwroot/generated/GitPatchModels.json
  6. 2
      IGP/wwwroot/generated/Variables.json
  7. 144
      Model/Entity/Data/DATA.cs
  8. 13
      Model/Entity/Data/Ids_Entity.cs
  9. 2
      Model/Entity/Parts/EntityVitalityModel.cs
  10. 92
      Model/Hotkeys/HotkeyModel.cs

BIN
IGP/Database.db

Binary file not shown.

94
IGP/Pages/BuildCalculator/Parts/ArmyComponent.razor

@ -5,34 +5,41 @@
@implements IDisposable @implements IDisposable
<FormLayoutComponent> <div class="armyView">
<div style="display: flex; gap: 24px;">
<FormDisplayComponent Label="Army Completed At"> <FormLayoutComponent>
<Display>@lastInterval | T @Interval.ToTime(lastInterval)</Display> <div style="display: flex; gap: 24px;">
</FormDisplayComponent> <FormDisplayComponent Label="Army Completed At">
<FormDisplayComponent Label="Army Attacking At"> <Display>@lastInterval | T @Interval.ToTime(lastInterval)</Display>
<Display>@(lastInterval + timingService.GetTravelTime()) | T @Interval.ToTime(lastInterval + timingService.GetTravelTime())</Display> </FormDisplayComponent>
</FormDisplayComponent> <FormDisplayComponent Label="Army Attacking At">
</div> <Display>@(lastInterval + timingService.GetTravelTime()) | T @Interval.ToTime(lastInterval + timingService.GetTravelTime())</Display>
<FormDisplayComponent Label="Army units built"> </FormDisplayComponent>
<Display> </div>
<div class="armyCardsContainer"> <FormDisplayComponent Label="Army units built">
@foreach (var unit in armyCount) <Display>
{ <div class="armyCardsContainer">
<div class="armyCard"> @foreach (var unit in armyCount) {
<div class="armyCountPosition"> <div class="armyCard">
<div class="armyCount">@unit.Value.ToString()x</div> <div class="armyCountPosition">
<div class="armyCount">@unit.Value.ToString()x</div>
</div>
<div>@unit.Key</div>
</div> </div>
<div>@unit.Key</div> }
</div> </div>
} </Display>
</div> </FormDisplayComponent>
</Display> </FormLayoutComponent>
</FormDisplayComponent>
</FormLayoutComponent> </div>
<style> <style>
.armyView {
overflow-y: scroll; width: 100%; overflow-x: hidden; height: 350px;
}
.armyCardsContainer { .armyCardsContainer {
display: flex; display: flex;
width: 100%; width: 100%;
@ -65,39 +72,33 @@
List<EntityModel> army = new(); List<EntityModel> army = new();
protected override void OnInitialized() protected override void OnInitialized() {
{
base.OnInitialized(); base.OnInitialized();
buildOrder.Subscribe(OnBuildOrderChanged); buildOrder.Subscribe(OnBuildOrderChanged);
timingService.Subscribe(StateHasChanged); timingService.Subscribe(StateHasChanged);
} }
void IDisposable.Dispose() void IDisposable.Dispose() {
{
buildOrder.Unsubscribe(OnBuildOrderChanged); buildOrder.Unsubscribe(OnBuildOrderChanged);
timingService.Unsubscribe(StateHasChanged); timingService.Unsubscribe(StateHasChanged);
} }
protected override bool ShouldRender() protected override bool ShouldRender() {
{
#if DEBUG #if DEBUG
jsRuntime.InvokeVoidAsync("console.time", "ArmyComponent"); jsRuntime.InvokeVoidAsync("console.time", "ArmyComponent");
#endif #endif
return true; return true;
} }
protected override void OnAfterRender(bool firstRender) protected override void OnAfterRender(bool firstRender) {
{
#if DEBUG #if DEBUG
jsRuntime.InvokeVoidAsync("console.timeEnd", "ArmyComponent"); jsRuntime.InvokeVoidAsync("console.timeEnd", "ArmyComponent");
#endif #endif
} }
void OnBuildOrderChanged() void OnBuildOrderChanged() {
{
var armyCountWas = 0; var armyCountWas = 0;
foreach (var army in armyCount) foreach (var army in armyCount) {
{
armyCountWas += army.Value; armyCountWas += army.Value;
} }
@ -107,19 +108,14 @@
var entitiesOverTime = buildOrder.GetOrders(); var entitiesOverTime = buildOrder.GetOrders();
foreach (var entitiesAtTime in entitiesOverTime) foreach (var entitiesAtTime in entitiesOverTime) {
{ foreach (var entity in entitiesAtTime.Value) {
foreach (var entity in entitiesAtTime.Value) if (entity.EntityType == EntityType.Army) {
{ if (!armyCount.TryAdd(entity.Info().Name, 1)) {
if (entity.EntityType == EntityType.Army)
{
if (!armyCount.TryAdd(entity.Info().Name, 1))
{
armyCount[entity.Info().Name]++; armyCount[entity.Info().Name]++;
} }
if (entity.Production() != null && entity.Production().BuildTime + entitiesAtTime.Key > lastInterval) if (entity.Production() != null && entity.Production().BuildTime + entitiesAtTime.Key > lastInterval) {
{
lastInterval = entity.Production().BuildTime + entitiesAtTime.Key; lastInterval = entity.Production().BuildTime + entitiesAtTime.Key;
} }
} }
@ -128,14 +124,12 @@
//TODO Better //TODO Better
var armyCountIs = 0; var armyCountIs = 0;
foreach (var army in armyCount) foreach (var army in armyCount) {
{
armyCountIs += army.Value; armyCountIs += army.Value;
} }
if (armyCountWas != armyCountIs) if (armyCountWas != armyCountIs) {
{
StateHasChanged(); StateHasChanged();
} }
} }

228
IGP/Pages/BuildCalculator/Parts/HotkeyViewerComponent.razor

@ -13,34 +13,61 @@
<InputPanelComponent> <InputPanelComponent>
<div class="keyContainer"> <div class="keyContainer">
@foreach (var hotkey in hotkeys) @foreach (var hotkey in hotkeys) {
{ if (hotkey.IsHidden) {
if (hotkey.IsHidden)
{
continue; continue;
} }
var color = hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace() || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
? "#0a0f12" : hotkey.GetColor(); ? "#0a0f12" : hotkey.GetColor();
var x = hotkey.PositionX * Size; var x = hotkey.PositionX * Size;
var y = hotkey.PositionY * Size; var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
var width = Size;
var height = hotkey.PositionY == 0 ? 50 : Size;
var borderRadius = hotkey.PositionY == 0 ? 12 : 0;
var border = "1px solid black"; var border = "1px solid black";
if (hotkey.KeyText.Equals(key)) if (hotkey.KeyText.Equals(key)) {
{
border = "5px solid black"; border = "5px solid black";
} }
if (hotkey.KeyText.Equals(controlGroup)) if (hotkey.KeyText.Equals(controlGroup)) {
{ color = "#257525";
border = "5px solid green";
} }
if (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) if (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) {
{
border = "5px solid green"; border = "5px solid green";
} }
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
: hotkey.KeyText.Equals("SHIFT") ? "Shift"
: hotkey.KeyText.Equals("TAB") ? "Tab"
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
var controlStyle = $"background-color:{color}; " +
$"width: {width}px; " +
"border-top: 1px solid black; " +
"border-left: 1px solid black; " +
"border-right: 1px solid black; " +
$"border-top-left-radius: {borderRadius}px; " +
$"border-top-right-radius: {borderRadius}px; " +
"overflow: hidden; " +
"text-align: center;";
var keyStyle = $"background-color:{color}; " +
$"border: {border}; " +
$"width: {width}px; " +
$"height: {height}px; " +
"overflow: hidden; " +
"padding: 4px;";
var usedStyle = hotkey.PositionY == 0 ? controlStyle : keyStyle;
<div style="position:relative; <div style="position:relative;
cursor:pointer; cursor:pointer;
top:@y.ToString()px; top:@y.ToString()px;
@ -48,35 +75,25 @@
width: 0px; width: 0px;
height: 0px;"> height: 0px;">
<div @onclick="((e)=> ButtonClicked(e, hotkey))" style="background-color:@color; <div @onclick="e => ButtonClicked(e, hotkey)" style="@usedStyle">
border: @border; @keyText
width: @Size.ToString()px; @foreach (var entity in data.Values) {
height: @Size.ToString()px; if (InvalidKey(entity, hotkey) || InvalidKeyGroup(entity, hotkey) || InvalidHoldSpace(entity)) {
overflow: hidden;
padding: 4px;">
@hotkey.KeyText
@foreach (var entity in data.Values)
{
if (InvalidKey(entity, hotkey) || InvalidKeyGroup(entity, hotkey) || InvalidHoldSpace(entity))
{
continue; continue;
} }
if (InvalidFaction(entity)) if (InvalidFaction(entity)) {
{
continue; continue;
} }
if (InvalidVanguard(entity) || InvalidNonVanguard(entity)) if (InvalidVanguard(entity) || InvalidNonVanguard(entity)) {
{
continue; continue;
} }
var isVanguard = entity.VanguardAdded() != null; var isVanguard = entity.VanguardAdded() != null;
var style = isVanguard ? "font-weight: bold;" : ""; var style = isVanguard ? "font-weight: bold;" : "";
if (BuildOrderService.WillMeetRequirements(entity) == null) if (BuildOrderService.WillMeetRequirements(entity) == null) {
{
style += "color:gray; font-style: italic;"; style += "color:gray; font-style: italic;";
} }
@ -93,7 +110,7 @@
.keyContainer { .keyContainer {
width: 400px; width: 400px;
max-width: 95vw; max-width: 95vw;
height: 400px; height: 350px;
outline: 3px solid black; outline: 3px solid black;
border-radius: 8px; border-radius: 8px;
background-color: #282A30; background-color: #282A30;
@ -120,8 +137,7 @@
private string controlGroup = "C"; private string controlGroup = "C";
private string key = ""; private string key = "";
protected override void OnInitialized() protected override void OnInitialized() {
{
base.OnInitialized(); base.OnInitialized();
KeyService.Subscribe(OnKeyPressed); KeyService.Subscribe(OnKeyPressed);
@ -129,8 +145,7 @@
BuildOrderService.Subscribe(OnBuilderOrderChanged); BuildOrderService.Subscribe(OnBuilderOrderChanged);
} }
void IDisposable.Dispose() void IDisposable.Dispose() {
{
KeyService.Unsubscribe(OnKeyPressed); KeyService.Unsubscribe(OnKeyPressed);
FilterService.Unsubscribe(StateHasChanged); FilterService.Unsubscribe(StateHasChanged);
BuildOrderService.Unsubscribe(OnBuilderOrderChanged); BuildOrderService.Unsubscribe(OnBuilderOrderChanged);
@ -138,17 +153,14 @@
int completedTimeCount = 0; int completedTimeCount = 0;
void OnBuilderOrderChanged() void OnBuilderOrderChanged() {
{ if (BuildOrderService.UniqueCompletedTimes.Count != completedTimeCount) {
if (BuildOrderService.UniqueCompletedTimes.Count != completedTimeCount)
{
completedTimeCount = BuildOrderService.UniqueCompletedTimes.Count; completedTimeCount = BuildOrderService.UniqueCompletedTimes.Count;
StateHasChanged(); StateHasChanged();
} }
} }
protected override bool ShouldRender() protected override bool ShouldRender() {
{
#if DEBUG #if DEBUG
JsRuntime.InvokeVoidAsync("console.time", "HotKeyViewerComponent"); JsRuntime.InvokeVoidAsync("console.time", "HotKeyViewerComponent");
#endif #endif
@ -156,18 +168,15 @@
return true; return true;
} }
protected override void OnAfterRender(bool firstRender) protected override void OnAfterRender(bool firstRender) {
{
#if DEBUG #if DEBUG
JsRuntime.InvokeVoidAsync("console.timeEnd", "HotKeyViewerComponent"); JsRuntime.InvokeVoidAsync("console.timeEnd", "HotKeyViewerComponent");
#endif #endif
} }
// Move to Filter Service // Move to Filter Service
bool InvalidFaction(EntityModel entity) bool InvalidFaction(EntityModel entity) {
{ if (entity.Faction() != null && entity.Faction()?.Faction != FilterService.GetFaction() && FilterService.GetFaction() != DataType.Any) {
if (entity.Faction() != null && entity.Faction()?.Faction != FilterService.GetFaction() && FilterService.GetFaction() != DataType.Any)
{
return true; return true;
} }
@ -175,12 +184,10 @@
} }
// Move to Filter Service // Move to Filter Service
bool InvalidVanguard(EntityModel entity) bool InvalidVanguard(EntityModel entity) {
{
if (entity.VanguardAdded() != null if (entity.VanguardAdded() != null
&& entity.VanguardAdded()?.ImmortalId != FilterService.GetImmortal() && entity.VanguardAdded()?.ImmortalId != FilterService.GetImmortal()
&& FilterService.GetImmortal() != DataType.Any) && FilterService.GetImmortal() != DataType.Any) {
{
return true; return true;
} }
@ -188,14 +195,10 @@
} }
// Move to Filter Service // Move to Filter Service
bool InvalidNonVanguard(EntityModel entity) bool InvalidNonVanguard(EntityModel entity) {
{ if (entity.Replaceds().Count > 0) {
if (entity.Replaceds().Count > 0) foreach (var replaced in entity.Replaceds()) {
{ if (FilterService.GetImmortal() == replaced.ImmortalId) {
foreach (var replaced in entity.Replaceds())
{
if (FilterService.GetImmortal() == replaced.ImmortalId)
{
return true; return true;
} }
} }
@ -204,116 +207,90 @@
return false; return false;
} }
bool InvalidKey(EntityModel entity, HotkeyModel key) bool InvalidKey(EntityModel entity, HotkeyModel key) {
{ if (entity.Hotkey()?.Hotkey == key.KeyText) {
if (entity.Hotkey()?.Hotkey == key.KeyText)
{
return false; return false;
} }
return true; return true;
} }
bool InvalidKeyGroup(EntityModel entity, HotkeyModel key) bool InvalidKeyGroup(EntityModel entity, HotkeyModel key) {
{ if (entity.Hotkey()?.HotkeyGroup == controlGroup) {
if (entity.Hotkey()?.HotkeyGroup == controlGroup)
{
return false; return false;
} }
return true; return true;
} }
bool InvalidKey(EntityModel entity) bool InvalidKey(EntityModel entity) {
{ if (entity.Hotkey()?.Hotkey == key) {
if (entity.Hotkey()?.Hotkey == key)
{
return false; return false;
} }
return true; return true;
} }
bool InvalidKeyGroup(EntityModel entity) bool InvalidKeyGroup(EntityModel entity) {
{ if (entity.Hotkey()?.HotkeyGroup == controlGroup) {
if (entity.Hotkey()?.HotkeyGroup == controlGroup)
{
return false; return false;
} }
return true; return true;
} }
bool InvalidHoldSpace(EntityModel entity) bool InvalidHoldSpace(EntityModel entity) {
{ if (entity.Hotkey()?.HoldSpace == KeyService.IsHoldingSpace()) {
if (entity.Hotkey()?.HoldSpace == KeyService.IsHoldingSpace())
{
return false; return false;
} }
return true; return true;
} }
void OnKeyPressed() void OnKeyPressed() {
{
var controlGroupWas = controlGroup; var controlGroupWas = controlGroup;
var keyWas = key; var keyWas = key;
if (KeyService.GetAllPressedKeys().Contains("Z")) {
if (KeyService.GetAllPressedKeys().Contains("Z"))
{
controlGroup = "Z"; controlGroup = "Z";
} }
if (KeyService.GetAllPressedKeys().Contains("TAB")) if (KeyService.GetAllPressedKeys().Contains("TAB")) {
{
controlGroup = "TAB"; controlGroup = "TAB";
} }
if (KeyService.GetAllPressedKeys().Contains("C")) if (KeyService.GetAllPressedKeys().Contains("C")) {
{
controlGroup = "C"; controlGroup = "C";
} }
if (KeyService.GetAllPressedKeys().Contains("D")) if (KeyService.GetAllPressedKeys().Contains("D")) {
{
controlGroup = "D"; controlGroup = "D";
} }
if (KeyService.GetAllPressedKeys().Contains("1")) if (KeyService.GetAllPressedKeys().Contains("V")) {
{ controlGroup = "V";
controlGroup = "1";
} }
//TODO This could be better. Duplicated code if (KeyService.GetAllPressedKeys().Contains("ALT")) {
if (KeyService.GetAllPressedKeys().Contains("2")) controlGroup = "ALT";
{
controlGroup = "2";
} }
if (KeyService.GetAllPressedKeys().Contains("SHIFT")) if (KeyService.GetAllPressedKeys().Contains("SHIFT")) {
{
controlGroup = "SHIFT"; controlGroup = "SHIFT";
} }
if (KeyService.GetAllPressedKeys().Contains("CONTROL")) if (KeyService.GetAllPressedKeys().Contains("CONTROL")) {
{
controlGroup = "CONTROL"; controlGroup = "CONTROL";
} }
if (KeyService.GetAllPressedKeys().Count > 0) if (KeyService.GetAllPressedKeys().Count > 0) {
{
key = KeyService.GetAllPressedKeys().First(); key = KeyService.GetAllPressedKeys().First();
} }
if (controlGroupWas != controlGroup || keyWas != key) if (controlGroupWas != controlGroup || keyWas != key) {
{
StateHasChanged(); StateHasChanged();
} }
} }
private void HandleClick() private void HandleClick() {
{
var hotkey = KeyService.GetHotkey(); var hotkey = KeyService.GetHotkey();
if (hotkey == "") if (hotkey == "") {
{
return; return;
} }
if (hotkey == "`") if (hotkey == "`") {
{
BuildOrderService.RemoveLast(); BuildOrderService.RemoveLast();
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval()); EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval());
return; return;
@ -326,38 +303,31 @@
var entity = EntityModel.GetFrom(hotkey!, hotkeyGroup, isHoldSpace, faction, immortal); var entity = EntityModel.GetFrom(hotkey!, hotkeyGroup, isHoldSpace, faction, immortal);
if (entity == null) if (entity == null) {
{
return; return;
} }
if (BuildOrderService.Add(entity, EconomyService)) if (BuildOrderService.Add(entity, EconomyService)) {
{
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval()); EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval());
} }
} }
private void ButtonClicked(MouseEventArgs mouseEventArgs, HotkeyModel hotkey) private void ButtonClicked(MouseEventArgs mouseEventArgs, HotkeyModel hotkey) {
{
DataCollectionService.SendEvent( DataCollectionService.SendEvent(
DataCollectionKeys.BuildCalcInput, DataCollectionKeys.BuildCalcInput,
new Dictionary<string, string> {{"key", hotkey.KeyText.ToLower()}, {"input-source", "mouse"}} new Dictionary<string, string> { { "key", hotkey.KeyText.ToLower() }, { "input-source", "mouse" } }
); );
if (hotkey.KeyText.Equals(HotKeyType.SPACE.ToString())) if (hotkey.KeyText.Equals(HotKeyType.SPACE.ToString())) {
{ if (KeyService.IsHoldingSpace()) {
if (KeyService.IsHoldingSpace())
{
KeyService.RemovePressedKey(hotkey.KeyText); KeyService.RemovePressedKey(hotkey.KeyText);
} }
else else {
{
KeyService.AddPressedKey(hotkey.KeyText); KeyService.AddPressedKey(hotkey.KeyText);
} }
} }
else else {
{
KeyService.AddPressedKey(hotkey.KeyText); KeyService.AddPressedKey(hotkey.KeyText);
KeyService.RemovePressedKey(hotkey.KeyText); KeyService.RemovePressedKey(hotkey.KeyText);
} }

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 1","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 2","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 3","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 4","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"},{"Id":30,"Name":"Stream Patch 5","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":31,"Name":"BuildCalc Hotfix","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":32,"Name":"Search Patch","Date":"2022-04-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":33,"Name":"Search Hotfix","Date":"2022-04-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":34,"Name":"Stream Patch 6","Date":"2022-04-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":35,"Name":"v0.0.6.9201a Patch","Date":"2022-04-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":36,"Name":"Build Calc Free Money Hotfix","Date":"2022-04-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":37,"Name":"BuildCalc Pyre Patch","Date":"2022-04-24T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":38,"Name":"Stream Patch 7","Date":"2022-04-24T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":39,"Name":"Infrastructure Patch","Date":"2022-05-20T00:00:00","GitChangeModels":[],"Important":"False"}] [{"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 1","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 2","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 3","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 4","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"},{"Id":30,"Name":"Stream Patch 5","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":31,"Name":"BuildCalc Hotfix","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":32,"Name":"Search Patch","Date":"2022-04-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":33,"Name":"Search Hotfix","Date":"2022-04-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":34,"Name":"Stream Patch 6","Date":"2022-04-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":35,"Name":"v0.0.6.9201a Patch","Date":"2022-04-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":36,"Name":"Build Calc Free Money Hotfix","Date":"2022-04-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":37,"Name":"BuildCalc Pyre Patch","Date":"2022-04-24T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":38,"Name":"Stream Patch 7","Date":"2022-04-24T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":39,"Name":"v0.0.6.9513a Patch","Date":"2022-04-29T00:00:00","GitChangeModels":[],"Important":"True"}]

2
IGP/wwwroot/generated/Variables.json

@ -1 +1 @@
[{"Key":"GamePatch","Value":"v0.0.6.9201a"}] [{"Key":"GamePatch","Value":"v0.0.6.9513a"}]

144
Model/Entity/Data/DATA.cs

@ -55,14 +55,17 @@ public class DATA
DataType.TEAPOT_FlyingTeapot, new EntityModel(DataType.TEAPOT_FlyingTeapot, EntityType.Teapot) DataType.TEAPOT_FlyingTeapot, new EntityModel(DataType.TEAPOT_FlyingTeapot, EntityType.Teapot)
.AddPart(new EntityInfoModel .AddPart(new EntityInfoModel
{ {
Name = "Flying Teapot", Name = "Detector",
Description = "Basic observer. Can fly and see hidden units within 1000 range.", Description = "Has 1100 vision, and can see hidden units within 1000 range.",
Notes = @"Doesn't take up a scout slot." Notes = @"Doesn't take up a scout slot."
}) })
.AddPart(new EntityRequirementModel { Id = DataType.TEAPOT_Teapot }) .AddPart(new EntityRequirementModel { Id = DataType.TEAPOT_Teapot })
.AddPart(new EntitySupplyModel{Takes = 1})
.AddPart(new EntityProductionModel { Alloy = 100, Ether = 50 }) .AddPart(new EntityProductionModel { Alloy = 100, Ether = 50 })
.AddPart(new EntityVitalityModel { Health = 70, Armor = ArmorType.Light }) .AddPart(new EntityVitalityModel { Health = 100, DefenseLayer = 30, Armor = ArmorType.Light })
.AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Air }) .AddPart(new EntityMovementModel { Speed = 280, Movement = MovementType.Air })
.AddPart(new EntityIdPassiveModel{ Id = DataType.PASSIVE_Detection})
}, },
// Families // Families
@ -333,8 +336,7 @@ public class DATA
new EntityModel(DataType.IPASSIVE_StalkersSense, EntityType.Passive) new EntityModel(DataType.IPASSIVE_StalkersSense, EntityType.Passive)
.AddPart(new EntityInfoModel .AddPart(new EntityInfoModel
{ {
Name = "Stalker's Sense", Description = "Xol's units sense nearby enemies in the fog of war.", Name = "Stalker's Sense", Description = "Xol's units sense nearby enemies in the fog of war."
Notes = "Not implemented."
}) })
}, },
@ -627,6 +629,7 @@ public class DATA
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_BirthingStorm }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_BirthingStorm })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_SummonSiegeMaw }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_SummonSiegeMaw })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BirthingStorm }) .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BirthingStorm })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
}, },
{ {
DataType.VANGUARD_BoneStalker_Xol, DataType.VANGUARD_BoneStalker_Xol,
@ -685,6 +688,8 @@ public class DATA
Targets = TargetType.Ground Targets = TargetType.Ground
}) })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_LethalBond }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_LethalBond })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
}, },
// Units // Units
// Q'Rath // Q'Rath
@ -769,7 +774,7 @@ public class DATA
}) })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DeployMagi }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DeployMagi })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_MobilizeQrath }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_MobilizeQrath })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_MendingCommand }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_MendingDecree })
}, },
{ {
DataType.UNIT_Zephyr, DataType.UNIT_Zephyr,
@ -820,7 +825,7 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Alloy = 125, Ether = 10, BuildTime = 35, ProducedBy = DataType.BUILDING_SoulFoundry }) .AddPart(new EntityProductionModel { Alloy = 125, Ether = 10, BuildTime = 35, ProducedBy = DataType.BUILDING_SoulFoundry })
.AddPart(new EntitySupplyModel { Takes = 4 }) .AddPart(new EntitySupplyModel { Takes = 4 })
.AddPart(new EntityVitalityModel { Health = 140, DefenseLayer = 100, Armor = ArmorType.Medium }) .AddPart(new EntityVitalityModel { Health = 120, DefenseLayer = 100, Armor = ArmorType.Medium })
.AddPart(new EntityRequirementModel .AddPart(new EntityRequirementModel
{ {
Id = DataType.BUILDING_SoulFoundry, Id = DataType.BUILDING_SoulFoundry,
@ -829,7 +834,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 435, Movement = MovementType.Ground }) .AddPart(new EntityMovementModel { Speed = 435, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel .AddPart(new EntityWeaponModel
{ {
LightDamage = 32, MediumDamage = 24, Damage = 16, Range = 300, AttacksPerSecond = 0.5f, LightDamage = 24, MediumDamage = 18, Damage = 12, Range = 400, AttacksPerSecond = 0.5f,
Targets = TargetType.Ground Targets = TargetType.Ground
}) })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_SiroccoScript }) .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_SiroccoScript })
@ -1037,7 +1042,7 @@ public class DATA
.AddPart(new EntityTierModel { Tier = 3.5f }) .AddPart(new EntityTierModel { Tier = 3.5f })
.AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "Z" }) .AddPart(new EntityHotkeyModel { Hotkey = "F", HoldSpace = true, HotkeyGroup = "Z" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Alloy = 110, Ether = 175, BuildTime = 55, ProducedBy = DataType.BUILDING_Angelarium }) .AddPart(new EntityProductionModel { Alloy = 110, Ether = 250, BuildTime = 55, ProducedBy = DataType.BUILDING_Angelarium })
.AddPart(new EntitySupplyModel { Takes = 6 }) .AddPart(new EntitySupplyModel { Takes = 6 })
.AddPart(new EntityRequirementModel .AddPart(new EntityRequirementModel
{ {
@ -1168,6 +1173,8 @@ public class DATA
}) })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuenchingScythes }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuenchingScythes })
.AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_CullingStrike }) .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_CullingStrike })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
}, },
{ {
DataType.UNIT_RedSeer, DataType.UNIT_RedSeer,
@ -1201,6 +1208,7 @@ public class DATA
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BloodPlague }) .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BloodPlague })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DrainingEmbrace }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_DrainingEmbrace })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_AwakenAcaaluk }) .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_AwakenAcaaluk })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_CastingFromBlood })
}, },
{ {
DataType.UNIT_Underspine, DataType.UNIT_Underspine,
@ -1447,7 +1455,7 @@ public class DATA
Name = "Research Radiant Ward", Descriptive = DescriptiveType.Upgrade, Name = "Research Radiant Ward", Descriptive = DescriptiveType.Upgrade,
Description = "Unlocks the dervish's Radiant Ward ability" Description = "Unlocks the dervish's Radiant Ward ability"
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Alloy = 80, Ether = 80, BuildTime = 34, ProducedBy = DataType.BUILDING_HouseOfFadingSaints }) .AddPart(new EntityProductionModel { Alloy = 80, Ether = 80, BuildTime = 34, ProducedBy = DataType.BUILDING_HouseOfFadingSaints })
.AddPart(new EntityRequirementModel .AddPart(new EntityRequirementModel
@ -1637,7 +1645,7 @@ public class DATA
new EntityModel(DataType.UPGRADE_BloodMothersFevor, EntityType.Tech) new EntityModel(DataType.UPGRADE_BloodMothersFevor, EntityType.Tech)
.AddPart(new EntityInfoModel .AddPart(new EntityInfoModel
{ Name = "Blood Mother's Fevor", Descriptive = DescriptiveType.Upgrade }) { Name = "Blood Mother's Fevor", Descriptive = DescriptiveType.Upgrade })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB" }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityVanguardReplacedModel .AddPart(new EntityVanguardReplacedModel
{ ImmortalId = DataType.IMMORTAL_Xol, ReplacedById = DataType.UPGRADE_Ambush }) { ImmortalId = DataType.IMMORTAL_Xol, ReplacedById = DataType.UPGRADE_Ambush })
@ -1772,7 +1780,7 @@ public class DATA
Description = "When Hidden, the Bone Stalker's next attack deals double damage", Description = "When Hidden, the Bone Stalker's next attack deals double damage",
Descriptive = DescriptiveType.Upgrade Descriptive = DescriptiveType.Upgrade
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB", HoldSpace = false }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HotkeyGroup = "TAB", HoldSpace = false })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityProductionModel { Alloy = 100, Ether = 125, BuildTime = 80, ProducedBy = DataType.BUILDING_RedVale }) .AddPart(new EntityProductionModel { Alloy = 100, Ether = 125, BuildTime = 80, ProducedBy = DataType.BUILDING_RedVale })
.AddPart(new EntityRequirementModel .AddPart(new EntityRequirementModel
@ -1822,6 +1830,19 @@ public class DATA
// Passives // Passives
// Neutral // Neutral
{
DataType.PASSIVE_Detection,
new EntityModel(DataType.PASSIVE_Detection, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Detection", Descriptive = DescriptiveType.Passive,
Description =
@"Unit can see all hidden units in its detection radius."
})
.AddPart(new EntityFactionModel { Faction = DataType.Any })
},
{ {
DataType.PASSIVE_BastionPassives, DataType.PASSIVE_BastionPassives,
new EntityModel(DataType.PASSIVE_BastionPassives, EntityType.Passive) new EntityModel(DataType.PASSIVE_BastionPassives, EntityType.Passive)
@ -2015,6 +2036,18 @@ public class DATA
}) })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
}, },
{
DataType.PASSIVE_HallowedWeapons,
new EntityModel(DataType.PASSIVE_HallowedWeapons, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Hallowed Weapons", Descriptive = DescriptiveType.Applies_Debuff,
Description = @"Gains 14 damage while in Hallowed Ground"
})
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
},
{ {
DataType.PASSIVE_Zeal, DataType.PASSIVE_Zeal,
@ -2038,17 +2071,6 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
}, },
{
DataType.PASSIVE_CastFromLife,
new EntityModel(DataType.PASSIVE_HallowedGround, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Cast From Life", Descriptive = DescriptiveType.Passive,
Description = @"Can spend life instead of energy, when needed.",
Notes = "Can't spend more life then unit has. Unit cannot kill itself with Cast From Life."
})
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
},
{ {
DataType.PASSIVE_WraithBowRange, DataType.PASSIVE_WraithBowRange,
@ -2207,14 +2229,14 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
}, },
{ {
DataType.PASSIVE_MendingCommand, DataType.PASSIVE_MendingDecree,
new EntityModel(DataType.PASSIVE_MendingCommand, EntityType.Passive) new EntityModel(DataType.PASSIVE_MendingDecree, EntityType.Passive)
.AddPart(new EntityInfoModel .AddPart(new EntityInfoModel
{ {
Name = "Mending Command", Descriptive = DescriptiveType.Ability, Name = "Mending Decree", Descriptive = DescriptiveType.Ability,
Description = @"Autocast ability that heals 48 life and 24 shields over 2 seconds." Description = @"Heals a nearby allied unit."
}) })
.AddPart(new EntityProductionModel { Pyre = 10, Cooldown = 3 }) .AddPart(new EntityProductionModel { Energy = 10, Cooldown = 3 })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
}, },
{ {
@ -2267,6 +2289,20 @@ public class DATA
{ Id = DataType.UPGRADE_XacalDamage, Requirement = RequirementType.Research_Upgrade }) { Id = DataType.UPGRADE_XacalDamage, Requirement = RequirementType.Research_Upgrade })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
}, },
{
DataType.PASSIVE_CastingFromBlood,
new EntityModel(DataType.PASSIVE_CastingFromBlood, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Cast From Blood", Descriptive = DescriptiveType.Ability,
Description =
@"This unit can spend life to cast abilities when it doesn't have enough energy.",
Notes = "They must have at least one remaining hitpoint after to perform Cast From Blood."
})
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
},
{ {
DataType.PASSIVE_OssifyingSwarm, DataType.PASSIVE_OssifyingSwarm,
new EntityModel(DataType.PASSIVE_OssifyingSwarm, EntityType.Passive) new EntityModel(DataType.PASSIVE_OssifyingSwarm, EntityType.Passive)
@ -2365,6 +2401,8 @@ public class DATA
@"Spawns a mine that reveals enemy units, slows them, and makes them take increased damage for a duration." @"Spawns a mine that reveals enemy units, slows them, and makes them take increased damage for a duration."
}) })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "D", HoldSpace = true})
.AddPart(new EntityProductionModel { DefensiveLayer = 30, Cooldown = 40 }) .AddPart(new EntityProductionModel { DefensiveLayer = 30, Cooldown = 40 })
.AddPart(new EntityRequirementModel { Id = DataType.UPGRADE_RadiantWard }) .AddPart(new EntityRequirementModel { Id = DataType.UPGRADE_RadiantWard })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
@ -2423,7 +2461,7 @@ public class DATA
Description = Description =
@"The Saoshin leaps to the target location. If she has enough mana, she activates Intervention upon landing." @"The Saoshin leaps to the target location. If she has enough mana, she activates Intervention upon landing."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "D" }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "D" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Cooldown = 5, Energy = 70 }) .AddPart(new EntityProductionModel { Cooldown = 5, Energy = 70 })
}, },
@ -2449,7 +2487,7 @@ public class DATA
Description = Description =
@"Deploying the Absolver drastically <b style=""color: orange"">increases its attack speed</b>." @"Deploying the Absolver drastically <b style=""color: orange"">increases its attack speed</b>."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "D" }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HotkeyGroup = "D" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
}, },
{ {
@ -2553,7 +2591,7 @@ public class DATA
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "D" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "D" })
.AddPart(new EntityVanguardAddedModel .AddPart(new EntityVanguardAddedModel
{ ImmortalId = DataType.IMMORTAL_Xol, ReplaceId = DataType.ABILITY_CullingStrike }) { ImmortalId = DataType.IMMORTAL_Xol, ReplaceId = DataType.ABILITY_CullingStrike })
.AddPart(new EntityProductionModel { Energy = 40 }) .AddPart(new EntityProductionModel { Energy = 40, Cooldown = 4})
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
}, },
{ {
@ -2589,7 +2627,7 @@ public class DATA
Name = "Deploy Resinant", Descriptive = DescriptiveType.Ability, Name = "Deploy Resinant", Descriptive = DescriptiveType.Ability,
Description = "Deploying the Resinant enables it to deal area of effect damage at long range." Description = "Deploying the Resinant enables it to deal area of effect damage at long range."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "D" }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HotkeyGroup = "D" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
}, },
{ {
@ -2646,9 +2684,10 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityVanguardAddedModel .AddPart(new EntityVanguardAddedModel
{ ImmortalId = DataType.IMMORTAL_Mala, ReplaceId = DataType.UNIT_Acaaluk }) { ImmortalId = DataType.IMMORTAL_Mala, ReplaceId = DataType.UNIT_Acaaluk })
.AddPart(new EntityProductionModel { Energy = 80, BuildTime = 4, Cooldown = 20 }) .AddPart(new EntityProductionModel { Energy = 80, BuildTime = 10, Cooldown = 30 })
.AddPart(new EntitySupplyModel { Takes = 0 }) .AddPart(new EntitySupplyModel { Takes = 0 })
.AddPart(new EntityVitalityModel { Health = 300, DefenseLayer = 100, Armor = ArmorType.Heavy }) .AddPart(new EntityVitalityModel { Health = 300, DefenseLayer = 100, Armor = ArmorType.Heavy,
Lasts = 75, Vision = 1000})
.AddPart(new EntityMovementModel { Speed = 0, Movement = MovementType.Ground }) .AddPart(new EntityMovementModel { Speed = 0, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel .AddPart(new EntityWeaponModel
{ {
@ -2686,7 +2725,7 @@ public class DATA
Name = "Summon Citadel", Name = "Summon Citadel",
Description = "Creates a powerful defensive structure on a Tower Foundation." Description = "Creates a powerful defensive structure on a Tower Foundation."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Pyre = 75, BuildTime = 70 }) .AddPart(new EntityProductionModel { Pyre = 75, BuildTime = 70 })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
@ -2708,7 +2747,7 @@ public class DATA
Description = Description =
@"Summons a powerful monument that slams into the ground to <b style=""color:orange"">deal damage</b> to enemy ground units (and takes damage from everything it lands on). It then creates <b style=""color:white"">Hallowed Ground</b> and nearby friendly units <b style=""color:orange"">gain Attack Speed<b>" @"Summons a powerful monument that slams into the ground to <b style=""color:orange"">deal damage</b> to enemy ground units (and takes damage from everything it lands on). It then creates <b style=""color:white"">Hallowed Ground</b> and nearby friendly units <b style=""color:orange"">gain Attack Speed<b>"
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum })
.AddPart(new EntityProductionModel { Pyre = 100, Cooldown = 15 }) .AddPart(new EntityProductionModel { Pyre = 100, Cooldown = 15 })
@ -2725,7 +2764,7 @@ public class DATA
Description = Description =
@"Structures in target area <b style=""color:lime"">reduce incoming damage significantly</b> for several seconds." @"Structures in target area <b style=""color:lime"">reduce incoming damage significantly</b> for several seconds."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Orzum })
.AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 15 }) .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 15 })
@ -2739,7 +2778,7 @@ public class DATA
Description = Description =
@"Allied units in a large area <b style=""color:skyblue"">gain Movement Speed</b> and <b style=""color:orange"">gain Attack Speed</b> for several seconds." @"Allied units in a large area <b style=""color:skyblue"">gain Movement Speed</b> and <b style=""color:orange"">gain Attack Speed</b> for several seconds."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.Any }) .AddPart(new EntityFactionModel { Faction = DataType.Any })
.AddPart(new EntityProductionModel { Pyre = 75, Cooldown = 20 }) .AddPart(new EntityProductionModel { Pyre = 75, Cooldown = 20 })
}, },
@ -2752,7 +2791,7 @@ public class DATA
Description = Description =
@"Units in the area <b style=""gain bonus shields"">. After a short delay, allied units in teh area <b style=""color:skyblue"">teleport to your nearest Town Hall</b>." @"Units in the area <b style=""gain bonus shields"">. After a short delay, allied units in teh area <b style=""color:skyblue"">teleport to your nearest Town Hall</b>."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari })
.AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 60 }) .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 60 })
@ -2766,7 +2805,7 @@ public class DATA
Description = Description =
@"All allied units <b style=""color:lime"">gain bonus shields</b> for several seconds." @"All allied units <b style=""color:lime"">gain bonus shields</b> for several seconds."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Ajari })
.AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 120 }) .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 120 })
@ -2781,7 +2820,7 @@ public class DATA
Name = "Summon Grove Guardian", Name = "Summon Grove Guardian",
Description = "Creates a powerful defensive structure on a Tower Foundation." Description = "Creates a powerful defensive structure on a Tower Foundation."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityProductionModel { Pyre = 75, BuildTime = 70 }) .AddPart(new EntityProductionModel { Pyre = 75, BuildTime = 70 })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
@ -2800,7 +2839,7 @@ public class DATA
Description = Description =
"Creates a rootway generating structure that heals nearby allied units, and transfers it's blood to nearby allied units." "Creates a rootway generating structure that heals nearby allied units, and transfers it's blood to nearby allied units."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 21 }) .AddPart(new EntityProductionModel { Pyre = 50, Cooldown = 21 })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
@ -2817,7 +2856,7 @@ public class DATA
Name = "Red Tithe", Name = "Red Tithe",
Description = "Sacrifice target unit to create an area that regenerates life and mana." Description = "Sacrifice target unit to create an area that regenerates life and mana."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityProductionModel { Pyre = 40, Cooldown = 60 }) .AddPart(new EntityProductionModel { Pyre = 40, Cooldown = 60 })
@ -2830,7 +2869,7 @@ public class DATA
Name = "Rain of Blood", Name = "Rain of Blood",
Description = "Massively increases life, shield and mana regeneration for 30 seconds." Description = "Massively increases life, shield and mana regeneration for 30 seconds."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
.AddPart(new EntityProductionModel { Pyre = 130, Cooldown = 30 }) .AddPart(new EntityProductionModel { Pyre = 130, Cooldown = 30 })
@ -2845,7 +2884,7 @@ public class DATA
@"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.", @"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" Notes = "+3 pyre for kills"
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
.AddPart(new EntityProductionModel { Cooldown = 15, Pyre = 25 }) .AddPart(new EntityProductionModel { Cooldown = 15, Pyre = 25 })
@ -2858,7 +2897,7 @@ public class DATA
Name = "The Great Hunt", Name = "The Great Hunt",
Description = "Enemy unit and structures have their vision reduce to 3 for a short time." Description = "Enemy unit and structures have their vision reduce to 3 for a short time."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "1" }) .AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "V" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol }) .AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
.AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 120 }) .AddPart(new EntityProductionModel { Pyre = 150, Cooldown = 120 })
@ -2939,7 +2978,7 @@ public class DATA
Name = "Apostle of Binding", Descriptive = DescriptiveType.Ether_Extractor, Name = "Apostle of Binding", Descriptive = DescriptiveType.Ether_Extractor,
Description = "Ether Extractor (Structure) - Must be placed on an Ether Node." Description = "Ether Extractor (Structure) - Must be placed on an Ether Node."
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "C" }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HotkeyGroup = "C" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Alloy = 100, BuildTime = 30, RequiresWorker = true }) .AddPart(new EntityProductionModel { Alloy = 100, BuildTime = 30, RequiresWorker = true })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
@ -2982,8 +3021,11 @@ public class DATA
Id = DataType.BUILDING_KeeperOfTheHardenedFlames, Id = DataType.BUILDING_KeeperOfTheHardenedFlames,
Requirement = RequirementType.Research_Building Requirement = RequirementType.Research_Building
}) })
.AddPart(new EntityWeaponModel {Damage = 14, Range = 700, SecondsBetweenAttacks = 1.8f, Targets
= TargetType.All})
.AddPart(new EntityIdPassiveModel {Id = DataType.PASSIVE_HallowedWeapons})
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
{ Health = 300, DefenseLayer = 300, Armor = ArmorType.Heavy, IsStructure = true }) { Health = 300, DefenseLayer = 150, Armor = ArmorType.Heavy, IsStructure = true })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_PsalmOfFire }) .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_PsalmOfFire })
}, },
{ {
@ -2994,7 +3036,7 @@ public class DATA
Name = "Keeper Of the Hardened Flames", Descriptive = DescriptiveType.Defense, Name = "Keeper Of the Hardened Flames", Descriptive = DescriptiveType.Defense,
Description = "" Description = ""
}) })
.AddPart(new EntityHotkeyModel { Hotkey = "V", HoldSpace = true, HotkeyGroup = "C" }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HoldSpace = true, HotkeyGroup = "C" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
.AddPart(new EntityProductionModel { Alloy = 125, BuildTime = 30, RequiresWorker = true }) .AddPart(new EntityProductionModel { Alloy = 125, BuildTime = 30, RequiresWorker = true })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel
@ -3224,7 +3266,7 @@ public class DATA
Name = "Ether Maw", Descriptive = DescriptiveType.Ether_Extractor, Name = "Ether Maw", Descriptive = DescriptiveType.Ether_Extractor,
Description = "Ether Extractor (Structure) - Must be placed on an Ether Node." Description = "Ether Extractor (Structure) - Must be placed on an Ether Node."
}) //TODO Add Ether Node to database }) //TODO Add Ether Node to database
.AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "C" }) .AddPart(new EntityHotkeyModel { Hotkey = "CAPSLOCK", HotkeyGroup = "C" })
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru }) .AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
.AddPart(new EntityProductionModel { Alloy = 100, BuildTime = 30, RequiresWorker = true }) .AddPart(new EntityProductionModel { Alloy = 100, BuildTime = 30, RequiresWorker = true })
.AddPart(new EntityVitalityModel .AddPart(new EntityVitalityModel

13
Model/Entity/Data/Ids_Entity.cs

@ -55,6 +55,8 @@ public static class DataType
public static string ISPELL_RedTithe = "57008163-5e3a-4b95-98f3-d00b54e18684"; public static string ISPELL_RedTithe = "57008163-5e3a-4b95-98f3-d00b54e18684";
public static string ISPELL_RainOfBlood = "792df385-c66a-4710-9f75-97731897a565"; public static string ISPELL_RainOfBlood = "792df385-c66a-4710-9f75-97731897a565";
public static string IPASSIVE_HealingGround = "3ec17526-8dc5-4592-9c15-ef1d9b1ca2f6"; public static string IPASSIVE_HealingGround = "3ec17526-8dc5-4592-9c15-ef1d9b1ca2f6";
public static string IPASSIVE_Expansionist = "b6cd4335-2165-44c3-b3dc-4500c0111870"; public static string IPASSIVE_Expansionist = "b6cd4335-2165-44c3-b3dc-4500c0111870";
@ -124,6 +126,8 @@ public static class DataType
public static string UPGRADE_Stalk = "36fbc2c0-e9e3-4f54-a79a-981db908c25c"; public static string UPGRADE_Stalk = "36fbc2c0-e9e3-4f54-a79a-981db908c25c";
public static string UPGRADE_Ambush = "6cf83dc9-717f-4fa9-b417-a3371474a1da"; public static string UPGRADE_Ambush = "6cf83dc9-717f-4fa9-b417-a3371474a1da";
public static string PASSIVE_Detection = "434468fa-83b2-4fc9-a38c-1a3d00bcf055";
public static string PASSIVE_WraithBowRange = "196dd8a6-2044-44e1-aac4-fbaa40552699"; public static string PASSIVE_WraithBowRange = "196dd8a6-2044-44e1-aac4-fbaa40552699";
@ -156,9 +160,11 @@ public static class DataType
public static string PASSIVE_HallowingRites = "9c8ae47b-954e-4a17-8f35-f128c9114b61"; public static string PASSIVE_HallowingRites = "9c8ae47b-954e-4a17-8f35-f128c9114b61";
public static string PASSIVE_RegentsWrath = "f111f004-6548-4430-9d13-ef44ab108ae7"; public static string PASSIVE_RegentsWrath = "f111f004-6548-4430-9d13-ef44ab108ae7";
public static string PASSIVE_PsalmOfFire = "d28f6b7c-d319-4fb8-bdd4-92ede40a0751"; public static string PASSIVE_PsalmOfFire = "d28f6b7c-d319-4fb8-bdd4-92ede40a0751";
public static string PASSIVE_HallowedWeapons = "f9ac4b3e-d02d-42d4-8d9d-beb9c5d7edcb";
public static string PASSIVE_Zeal = "62c4942b-5578-422d-8d4e-d1789f4efa68"; public static string PASSIVE_Zeal = "62c4942b-5578-422d-8d4e-d1789f4efa68";
public static string PASSIVE_HallowedGround = "bdb28984-246f-4642-84ab-9e83c02b3e2e"; 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_Rootway = "46768d4a-5047-4973-b5ca-995cda25ee8d";
public static string PASSIVE_BehemothCapacity = "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_QuitlStorage2 = "0b27b863-fce5-40e4-96c7-6df94bdd92b9";
@ -175,6 +181,9 @@ public static class DataType
public static string PASSIVE_OssifyingSwarm = "b8897247-8393-416e-b246-409a6b3263c2"; public static string PASSIVE_OssifyingSwarm = "b8897247-8393-416e-b246-409a6b3263c2";
public static string PASSIVE_CastingFromBlood = "c97d1cf1-67d9-402b-9fa1-1abb9bfd7bfd";
public static string PASSIVE_QuenchingScythes = "dbf07db4-e7b6-4f81-9f8e-e5391850eead"; public static string PASSIVE_QuenchingScythes = "dbf07db4-e7b6-4f81-9f8e-e5391850eead";
public static string PASSIVE_AaroxBurn = "921fe250-2b97-40c0-9765-9e6c1e766dd5"; public static string PASSIVE_AaroxBurn = "921fe250-2b97-40c0-9765-9e6c1e766dd5";
@ -186,7 +195,7 @@ public static class DataType
public static string PASSIVE_BloodFrenzy = "356b6c33-a857-489c-8218-68c53d03db90"; public static string PASSIVE_BloodFrenzy = "356b6c33-a857-489c-8218-68c53d03db90";
public static string PASSIVE_MendingCommand = "25d94c3d-dba9-4f02-abf4-904269b539c6"; public static string PASSIVE_MendingDecree = "25d94c3d-dba9-4f02-abf4-904269b539c6";
public static string PASSIVE_FireQuitl = "80f6b382-da1c-49a1-8235-1ea37983ea54"; public static string PASSIVE_FireQuitl = "80f6b382-da1c-49a1-8235-1ea37983ea54";
public static string PASSIVE_XacalDamage = "69928f20-5332-418f-ada3-694da3f7b199"; public static string PASSIVE_XacalDamage = "69928f20-5332-418f-ada3-694da3f7b199";

2
Model/Entity/Parts/EntityVitalityModel.cs

@ -15,4 +15,6 @@ public class EntityVitalityModel : IEntityPartInterface
public bool IsStructure { get; set; } = false; public bool IsStructure { get; set; } = false;
public int Energy { get; set; } = 0; public int Energy { get; set; } = 0;
public int Vision { get; set; } = 0;
} }

92
Model/Hotkeys/HotkeyModel.cs

@ -5,7 +5,7 @@ namespace Model.Hotkeys;
public class HotkeyModel public class HotkeyModel
{ {
public static readonly string[] KeyGroups = { "Z", "1", "2", "TAB", "CONTROL", "SHIFT", "C" }; public static readonly string[] KeyGroups = { "Z", "1", "2", "TAB", "CONTROL", "SHIFT", "C" };
public static readonly string[] HotKeys = { "`", "Q", "W", "E", "R", "A", "S", "F", "X", "V" }; public static readonly string[] HotKeys = { "`", "Q", "W", "E", "R", "A", "S", "F", "X", "V", "CAPSLOCK" };
public string KeyText { get; set; } public string KeyText { get; set; }
public KeyType KeyType { get; set; } public KeyType KeyType { get; set; }
public int PositionX { get; set; } public int PositionX { get; set; }
@ -29,25 +29,49 @@ public class HotkeyModel
{ {
new() new()
{ {
KeyText = "`", KeyText = "Z",
KeyType = KeyType.Cancel, KeyType = KeyType.ControlGroup,
PositionX = 0, PositionX = 0,
PositionY = 0 PositionY = 0
}, },
new() new()
{ {
KeyText = "TAB", KeyText = "D",
KeyType = KeyType.ControlGroup, KeyType = KeyType.ControlGroup,
PositionX = 0, PositionX = 1,
PositionY = 1 PositionY = 0
}, },
new() new()
{ {
KeyText = "1", KeyText = "C",
KeyType = KeyType.ControlGroup, KeyType = KeyType.ControlGroup,
PositionX = 1, PositionX = 2,
PositionY = 0
},
new()
{
KeyText = "V",
KeyType = KeyType.Pyre,
PositionX = 3,
PositionY = 0 PositionY = 0
}, },
new()
{
KeyText = "TAB",
KeyType = KeyType.ControlGroup,
PositionX = 4,
PositionY = 0
},
new()
{
KeyText = "`",
KeyType = KeyType.Cancel,
PositionX = 0,
PositionY = 1
},
new() new()
{ {
KeyText = "Q", KeyText = "Q",
@ -76,6 +100,15 @@ public class HotkeyModel
PositionX = 4, PositionX = 4,
PositionY = 1 PositionY = 1
}, },
new()
{
KeyText = "CAPSLOCK",
KeyType = KeyType.Action,
PositionX = 0,
PositionY = 2
},
new() new()
{ {
KeyText = "A", KeyText = "A",
@ -97,6 +130,7 @@ public class HotkeyModel
PositionX = 3, PositionX = 3,
PositionY = 2 PositionY = 2
}, },
new() new()
{ {
KeyText = "F", KeyText = "F",
@ -105,39 +139,11 @@ public class HotkeyModel
PositionY = 2 PositionY = 2
}, },
new() new()
{
KeyText = "Z",
KeyType = KeyType.ControlGroup,
PositionX = 1,
PositionY = 3
},
new()
{
KeyText = "X",
KeyType = KeyType.Action,
PositionX = 2,
PositionY = 3
},
new()
{
KeyText = "C",
KeyType = KeyType.ControlGroup,
PositionX = 3,
PositionY = 3
},
new()
{
KeyText = "V",
KeyType = KeyType.Action,
PositionX = 4,
PositionY = 3
},
new()
{ {
KeyText = "SPACE", KeyText = "SPACE",
KeyType = KeyType.Advance, KeyType = KeyType.Advance,
PositionX = 1, PositionX = 1,
PositionY = 4 PositionY = 3
}, },
// Economy // Economy
new() new()
@ -145,15 +151,15 @@ public class HotkeyModel
KeyText = "SHIFT", //TODO Update when game changes KeyText = "SHIFT", //TODO Update when game changes
KeyType = KeyType.Economy, KeyType = KeyType.Economy,
PositionX = 0, PositionX = 0,
PositionY = 2 PositionY = 3
}, },
// Pyre // Pyre
new() new()
{ {
KeyText = "2", KeyText = "ALT",
KeyType = KeyType.Pyre, KeyType = KeyType.Economy,
PositionX = 2, PositionX = 1,
PositionY = 0, PositionY = 5,
IsHidden = true IsHidden = true
}, },
@ -163,7 +169,7 @@ public class HotkeyModel
KeyText = "CONTROL", KeyText = "CONTROL",
KeyType = KeyType.Economy, KeyType = KeyType.Economy,
PositionX = 0, PositionX = 0,
PositionY = 3 PositionY = 4
} }
}; };
} }

Loading…
Cancel
Save