vadelius / swlsimnet Goto Github PK
View Code? Open in Web Editor NEWCombat-Simulator for Secret World Legends
License: Other
Combat-Simulator for Secret World Legends
License: Other
Uncomment the gadges in the //TODO: in Items.cs and actually do a cooldown check on BonusAttack.
Add support for gadgets.
"Whenever you hit an enemy with a Hammer ability, you gain an effect which lasts 30 seconds. When this effect expires, your Hammer damage is increased by 7.5% for 4 seconds.
Using Hammer abilities speeds up the initial countdown and spending Rage increases the duration of the damage increasing effect."
(We should not just cast it on cooldown)
Expand default APL's to atleast cover all weapons (AND IMPROVE THEM) Community involvement. - and perhaps include a "dev" apl that runs through all weapons?
export class ImportComponent {
has nameArray for each weapon containing the procs like so:
hammerProc: string[] = ["None", "Anima Touched", "Plasma Forged", "Shadowbound", "Pneumatic Maul", "Fuming Despoiler"];
primaryProc: string[];
secondaryProc: string[];
Are empty. And they depending on what primaryWeapon is selected say hammer then hammerProc contents should be pushed into primaryProc. or if secondaryWeapon is "Fist" then fistProc should be pushed into "secondaryProc" []
With working tests.
We should no longer assume Seed of Agression / Cold Silver dice / Ashes.
Allow users to save & load imports. Simplest solution for now seems to be login with google/facebook account for persistant changes (saves the trouble of complex databases and encryption)
Model validation with required message in gui where input is missing/invalid.
=> Import.Component
Make ISpell ElementalType an Enum to avoid string comparing.
Maleificum // Channel spells causing sim to freeze but still produce a result
It'll start pre-rounds but never execute the channel itselves and just stay on 0.1 seconds into the fight.
Create and go through existing unit tests so we know our core game mechanics are not flawed.
Model for what should happen each timestamp as showed in below existing tests.
TestCastSpell
TestChannelSpell
Anticipated actually used ones
Remaining are:
Rhytmic Blade (Blade)
Shattered HellBlade (Blade)
Stormbringer (Blade)
Overclocked Chronometer (Ele)
The Reedeemer (Shotgun)
Add test for all these and existing weapons also.
Savagery no longer generates gimmick resource (After buffrevamp?)
Results now end up in local storage. (Replicate via using Hammer preset > clicking start)
Populate to replicate old design in readme.
Old population of charts: https://hastebin.com/pohemozupu.scala
Picture of rendered view: https://camo.githubusercontent.com/d6f19c93df4451e2df7ca4356ab12a3294710b09/68747470733a2f2f63646e2e7261776769742e636f6d2f566164656c6975732f73776c73696d4e45542f61663265393965642f7265706f73706c6173682e706e67
Results string pretty printed: https://gist.github.com/Vadelius/57eb61614f9d94a813dfa19582d0f828
Linechart uses time for labels. Line chart 1 users penergy/senergy for the 2 datasets - Linechart 2 uses pgimmick/sgimmick for its 2 datasets
Sort items in all dropdownboxes on input view.
The order should be depending on if it is required or not.
For required dropdownboxes:
For non-required dropdownboxes:
Add header text to APL string
When empty now its just a big textbox...
Add a * sign to the requried input fields
e.g. Primary and Secondary weapon and Apl string.
Add a % sign to values where we expect a percentage input
Critical Chance and all signet textboxes
Reduce Elite.MaxCooldown * (1-EliteSignetBoost)
The argument Buff.UnstoppableForce.Duration does not seem to work correctly.
With the following APL:
Fist.Savagery, Buff.UnstoppableForce.Active && Buff.UnstoppableForce.Duration > 4
Hammer.Seethe, Buff.UnstoppableForce.Active && Hammer.Energy < 12 && Rage < 63
Hammer.UnstoppableForce, Hammer.Energy > 8
Hammer.Demolish, Buff.UnstoppableForce.Active
Hammer.Demolish, Rage > 70 || Hammer.Energy > 13
Hammer.Smash
I get the following result, Savagery should have never been used because UnstoppableForce only had a duration of 1.3 seconds at that point.
[13.5s] UnstoppableForce 0.0K E(6/15) R(83/8)
[14.3s] DemolishRage 91.9K E(3/15) R(37/8)
[15.3s] Smash 4.9K E(5/15) R(49/8)
[15.3s] [SeedOfAggression] proc!
[15.3s] [Ashes] proc!
[16.3s] DemolishRage 85.5K E(3/15) R(6/8)
[16.3s] [ColdSilver] proc!
[17.3s] Smash 12.4K E(6/15) R(18/8)
[17.3s] [ColdSilver] proc!
[18.3s] Demolish 34.9K E(3/15) R(50/8)
[19.3s] Smash 5.3K E(4/15) R(62/8)
[19.3s] [Ashes] proc!
[20.2s] Savagery 0.0K E(5/13) R(65/16)
Likewise, the following APL should have savagery never being triggered because the 10 second criteria should never be fulfilled.
Fist.Savagery, Buff.UnstoppableForce.Active && Buff.UnstoppableForce.Duration > 9
Hammer.UnstoppableForce, Hammer.Energy > 8
[0.0s] UnstoppableForce 0.0K E(11/15) R(0/0)
[0.1s] Savagery 0.0K E(11/13) R(0/8)
Buff.UnstoppableForce.Active is kind of redundant, but even without it there still seems to be a weird interaction.
With the following APL it is sort of accounted for because Savagery isn't being used first, but it still seems to use savagery in other situations where it shouldn't.
Fist.Savagery, Buff.UnstoppableForce.Duration > 5
Hammer.UnstoppableForce, Hammer.Energy > 8
[0.0s] UnstoppableForce 0.0K E(11/15) R(0/0)
[0.1s] Savagery 0.0K E(11/13) R(0/8)
[81.5s] UnstoppableForce 0.0K E(6/15) R(80/32)
[82.4s] DemolishRage 114.8K E(4/15) R(34/32)
[82.4s] [SeedOfAggression] proc!
[83.4s] Demolish 11.5K E(0/15) R(66/32)
[83.4s] Ashes 0.8K E(0/15) R(66/32)
[84.4s] Smash 5.9K E(1/15) R(78/32)
[85.4s] Smash 5.9K E(2/15) R(90/32)
[86.4s] Smash 14.9K E(4/15) R(100/32)
[87.3s] Savagery 0.0K E(5/13) R(100/40)
Should probably dislay all camelCase => space.
With working tests!
Unit tests for assumptions about ALL weapon gimmicks and player stats so critchance or critpower does not get out of hand somewhere.. Assert DPS broadly based on combatpower
Explain fundamentals such as that we assume (currently) Cold Silver Dice + Seed of Agression & Weapon expertise is added automatically (only input your actual character sheet stats into import fields)
More passives...
So flow is: Armory > Import (APL) > Start > Results.
We need to be able to dynamically create and check buffs to avoid saving timestamps everywhere (weapon classes for example).
A good starting point is Hammer weapon class since it contains several occasions where this could help us.
Instead we would do a check like (EXAMPLE NAMING!!!) "player.HasActiveBuff(FastAndFurious)".
Add UnitTest for above to BuffTest.cs.
Prioritize here, what weapon do we need to add? Inputs welcome.
Add Simplified spellquery for troubleshooting
Add weapon proc to Weapon class (like we do with Weapon affix).
This will solve the issue with secondary weapon proc not being used and will lower the number of checks for weapon procs. ๐ฏ
Still awaiting response from lead systems dev but, ALL spells that are of type SpellType.Channel should have Player.CritChance * 0.8 and Player.CritPower * 1.25 (supposedly)
When we have a full set of default APLs..
Make Dot spells tick damage instead of all damage on apply.
Refactor/edit Attack/Spell-flow. With all pre/during/post checks more streamlined for better readability.
With working tests! Btw im butthurted by all Elementalism players
ASP.Net ugly subroutes
Preset buttons not working since local storage overrides them.
<div ng-repeat="spell.name in root.spellBreakdownList">
<tr>
<th scope="row">{{spell.name}}</th>
<td>{{spell.damagepersecond}}</td>
<td>{{spell.damagepercentage}}</td>
<td>{{spell.executes}}</td>
<td>{{spell.damageperexecution}}</td>
<td>{{spell.spelltype}}</td>
<td>{{spell.amount}}</td>
<td>{{spell.avarage}}</td>
<td>{{spell.critchance}}</td>
</tr>
</div>
Angular: When Import gets successful j son response change component/view to ResultsComponent
(You can use the Hammer preset > Start to get a successful return)
Tested in game just to make sure and Flourish does not trigger them.
[0.0s] KillBlind 1.5K E(13/15) R(0/0)
[0.0s] WhiteChambers 1.2K E(13/15) R(0/0)
[0.1s] Flourish 0.0K E(15/15) R(0/0)
[0.1s] WhiteChambers 1.2K E(15/15) R(0/0)
[0.2s] Savagery 0.0K E(15/13) R(0/8)
[1.0s] TrickShot 16.0K E(12/13) R(0/8)
[80.1s] DualShot 3.5K E(0/15) R(0/0)
[80.1s] BlueChambers 1.5K E(0/15) R(0/0)
[80.4s] Flourish 0.0K E(4/15) R(0/0)
[80.4s] BlueChambers 1.5K E(4/15) R(0/0)
[81.1s] DualShot 3.5K E(2/15) R(0/0)
Checkboxes for buffs in import view is not saved to local storage.
Checkboxes in import.component.html
<input id="openingShot" type="checkbox">
<input id="headCdr" type="checkbox">
<input id="waistCdr" type="checkbox">
Boolean properties in import.component.ts;
openingShot, headCdr, waistCdr.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.