Giter Site home page Giter Site logo

vadelius / swlsimnet Goto Github PK

View Code? Open in Web Editor NEW
10.0 2.0 7.0 4.82 MB

Combat-Simulator for Secret World Legends

License: Other

C# 66.87% CSS 18.28% JavaScript 1.90% TypeScript 7.08% HTML 5.88%
secret-world-legends simulator combat event-driven modeling

swlsimnet's People

Contributors

glinkis avatar kaiiler avatar niklasgs avatar posid avatar tagc avatar vadelius avatar williamparry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

swlsimnet's Issues

Sort out gadgets.

Uncomment the gadges in the //TODO: in Items.cs and actually do a cooldown check on BonusAttack.

Need ingame testing for The Tenderizer

"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."

Better default APL's

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?

Angular: ngIf on forms.

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" []

Gear selection.

We should no longer assume Seed of Agression / Cold Silver dice / Ashes.

Allow users to save & load

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

Model validation with required message in gui where input is missing/invalid.

UnitTest Game related mechanics

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

Add the Remaining 5 weapons.

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.

Parse Results JSON/in localStorage => Charts.

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

Gui tweaks for Input view

Sort items in all dropdownboxes on input view.
The order should be depending on if it is required or not.

For required dropdownboxes:

  1. Select item...
  2. Alphabetical

For non-required dropdownboxes:

  1. None
  2. Alphabetical

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

Buff.UnstoppableForce.Duration does not work correctly

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)

Unit 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

Further develop WIKI

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)

Dynamically create/check buffs

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.

  • _enragedLockTimeStamp
  • _timeSinceEnraged
  • _pneumaticStamp

Instead we would do a check like (EXAMPLE NAMING!!!) "player.HasActiveBuff(FastAndFurious)".

Add UnitTest for above to BuffTest.cs.

Add weapon proc to weapon

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. ๐Ÿ’ฏ

Channel spells critmodifers.

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)

Dot spells

Make Dot spells tick damage instead of all damage on apply.

Streamline execution logic.

Refactor/edit Attack/Spell-flow. With all pre/during/post checks more streamlined for better readability.

- Current Issues -

  • Add APL examples - preset buttons on import.
  • Community needs to make APLs decent, hence Wiki explaining..
  • Add gadgets.
  • Add more weaponprocs.
  • Post 1 iteration to a combatlog on results for debugging sample timeline
  • Refactor(?)

Fix ng-repeat (commented in results.component.html)

            <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> 

Pistol.Flourish wrongly triggers pistol chamber procs

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)

Bind checkboxes to true/false

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.