Skip to content

Commit

Permalink
Add LICENSE and docs exported from CodePlex
Browse files Browse the repository at this point in the history
  • Loading branch information
Mag-nus committed Sep 25, 2017
1 parent 81b116b commit 6048887
Show file tree
Hide file tree
Showing 32 changed files with 3,958 additions and 0 deletions.
5 changes: 5 additions & 0 deletions docs/Buffed Double Value Key Code.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<div class="wikidoc">
<p><strong>This is the code for the back end of the requirement. This may help you understand how the item is tested against the requirement.</strong></p>
<p>&nbsp;</p>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override bool Match(GameItemInfo id)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double val = id.GetValueDouble(vk, 0);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Add buffs to the maxdamage, this is broken if the weapon is equipped/activated/buffed<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.Collections.ObjectModel.ReadOnlyCollection&lt;uTank2.MySpell&gt; Spells = id.Spells;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foreach (uTank2.MySpell sp in Spells)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; switch (vk)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case DoubleValueKey.AttackBonus:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 2603) val &#43;= .03; // Minor Heart Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 2591) val &#43;= .05; // Major Heart Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 4666) val &#43;= .07; // Epic Heart Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case DoubleValueKey.ElementalDamageVersusMonsters:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 4414) val &#43;= .01; // Incantation of Spirit Drinker, this spell on the item adds 1 more % of damage over a user casted 8<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 3251) val &#43;= .01; // Minor Spirit Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 3250) val &#43;= .03; // Major Spirit Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 4670) val &#43;= .04; // Epic Spirit Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case DoubleValueKey.ManaCBonus:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 3201) val *= 1.05; // Feeble Hermetic Link<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 3199) val *= 1.10; // Minor Hermetic Link<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 3302) val *= 1.15; // Moderate Hermetic Link<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 3200) val *= 1.20; // Major Hermetic Link<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case DoubleValueKey.MeleeDefenseBonus:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 2600) val &#43;= .03; // Minor Defender<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 2588) val &#43;= .05; // Major Defender<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 4633) val &#43;= .07; // Epic Defender<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return (float)val &gt;= (float)keyval;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</pre>
</div><div class="ClearBoth"></div>
32 changes: 32 additions & 0 deletions docs/Buffed Long Value Key Code.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<div class="wikidoc">
<p><strong>This is the code for the back end of the requirement. This may help you understand how the item is tested against the requirement.</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre> public override bool Match(GameItemInfo id)
{
int val = id.GetValueInt(vk, 0);

// Add buffs to the maxdamage, this is broken if the weapon is equipped/activated/buffed
System.Collections.ObjectModel.ReadOnlyCollection Spells = id.Spells;
foreach (uTank2.MySpell sp in Spells)
{
switch (vk)
{
case IntValueKey.MaxDamage:
if (sp.Id == 4395) val &#43;= 2; // Incantation of Blood Drinker, this spell on the item adds 2 more points of damage over a user casted 8
if (sp.Id == 2598) val &#43;= 2; // Minor Blood Thirst
if (sp.Id == 2586) val &#43;= 4; // Major Blood Thirst
if (sp.Id == 4661) val &#43;= 7; // Epic Blood Thirst
break;

case IntValueKey.ArmorLevel:
if (sp.Id == 2604) val &#43;= 20; // Minor Impenetrability
if (sp.Id == 2592) val &#43;= 40; // Major Impenetrability
if (sp.Id == 4667) val &#43;= 60; // Epic Impenetrability
break;
}
}

return val &gt;= keyval;
}</pre>
</div><div class="ClearBoth"></div>
6 changes: 6 additions & 0 deletions docs/Buffed Median Damage Code.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="wikidoc">
<p><strong>This is the code for the back end of the requirement. This may help you understand how the item is tested against the requirement.</strong></p>
<p><strong><br>
</strong></p>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public bool CanReachTargetValues(double targetCalcedBuffedTinkedDoT, double targetBuffedMeleeDefenseBonus, double targetBuffedAttackBonus)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double buffedMeleeDefenseBonus = GetBuffedDoubleValueKey(DoubleValueKey.MeleeDefenseBonus);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double buffedAttackBonus = GetBuffedDoubleValueKey(DoubleValueKey.AttackBonus);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double variance = gameItemInfo.GetValueDouble(DoubleValueKey.Variance, 0.0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxDamage = GetBuffedLogValueKey(IntValueKey.MaxDamage);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int numberOfTinksLeft = Math.Max(10 - gameItemInfo.GetValueInt(IntValueKey.NumberTimesTinkered, 0), 0);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (gameItemInfo.GetValueInt(IntValueKey.Imbued, 0) == 0)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; numberOfTinksLeft--; // Factor in an imbue tink<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // If this is not a loot generated item, it can't be tinked<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (gameItemInfo.GetValueInt(IntValueKey.Material, 0) == 0)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; numberOfTinksLeft = 0;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 1; i &lt;= numberOfTinksLeft; i&#43;&#43;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (buffedMeleeDefenseBonus &lt; targetBuffedMeleeDefenseBonus)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffedMeleeDefenseBonus &#43;= .01;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if (buffedAttackBonus &lt; targetBuffedAttackBonus)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffedAttackBonus &#43;= .01;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double ironTinkDoT = CalculateDamageOverTime(maxDamage &#43; 24 &#43; 1, variance);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double graniteTinkDoT = CalculateDamageOverTime(maxDamage &#43; 24, variance*.8);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ironTinkDoT &gt;= graniteTinkDoT)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxDamage&#43;&#43;;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; variance *= .8;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return CalculateDamageOverTime(maxDamage &#43; 24, variance) &gt;= targetCalcedBuffedTinkedDoT &amp;&amp; buffedMeleeDefenseBonus &gt;= targetBuffedMeleeDefenseBonus &amp;&amp; buffedAttackBonus &gt;= targetBuffedAttackBonus;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// maxDamage * ((1 - critChance) * (2 - variance) / 2 &#43; (critChance * critMultiplier));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;param name=&quot;maxDamage&quot;&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;param name=&quot;variance&quot;&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;param name=&quot;critChance&quot;&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;param name=&quot;critMultiplier&quot;&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public static double CalculateDamageOverTime(int maxDamage, double variance, double critChance = .1, double critMultiplier = 2)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return maxDamage * ((1 - critChance) * (2 - variance) / 2 &#43; (critChance * critMultiplier));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</pre>
</div><div class="ClearBoth"></div>
6 changes: 6 additions & 0 deletions docs/Buffed Missile Damage Code.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="wikidoc">
<p><strong>This is the code for the back end of the requirement. This may help you understand how the item is tested against the requirement.</strong></p>
<p><strong><br>
</strong></p>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public override bool Match(GameItemInfo id)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int maxdamage = id.GetValueInt(IntValueKey.MaxDamage, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int elementalDmgBonus = id.GetValueInt(IntValueKey.ElementalDmgBonus, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double damageBonus = id.GetValueDouble(DoubleValueKey.DamageBonus, 1);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Add buffs to the maxdamage, this is broken if the weapon is equipped/activated/buffed<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.Collections.ObjectModel.ReadOnlyCollection&lt;uTank2.MySpell&gt; Spells = id.Spells;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foreach (uTank2.MySpell sp in Spells)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 4395) maxdamage &#43;= 2; // Incantation of Blood Drinker, this spell on the item adds 2 more points of damage over a user casted 8<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 2598) maxdamage &#43;= 2; // Minor Blood Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 2586) maxdamage &#43;= 4; // Major Blood Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (sp.Id == 4661) maxdamage &#43;= 7; // Epic Blood Thirst<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return (maxdamage &#43; (((damageBonus - 1) * 100) / 3) &#43; elementalDmgBonus) &gt;= keyval;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</pre>
</div><div class="ClearBoth"></div>
Loading

0 comments on commit 6048887

Please sign in to comment.