Difference between revisions of "User:Cassiel Seraphim/ESI"
m (Update {{TOClimit}} to {TOC|limit=}}.) |
|||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | The '''EVE Swagger Interface (ESI)''' is a public [https://en.wikipedia.org/wiki/Application_programming_interface Application Programming Interface (API)] that allows players and applications to pull data about various things in EVE. This article focuses on the [https://eveonline-third-party-documentation.readthedocs.io/en/latest/dogma/intro.html Dogma]-attributes for NPC stats, such as which EWAR-capabilities they have, their damage output, resists and effective hit points, speeds, orbit ranges and all the other intricate little details that helps us know our enemy and perfect our fits. | |
− | + | ||
− | {| | + | {{note|For more general information and other uses of ESI, see the [[EVE Swagger Interface]] page.}} |
− | + | {{TOC|limit=2}} | |
− | + | = Working with EVE Swagger Interface (ESI) = | |
− | + | You can manually or through scripts pull information directly from CCP's servers with the following URL: | |
− | + | {{code|https://esi.evetech.net/latest/universe/types/{{co|coral|52213}}/?datasource={{co|coral|tranquility}}&language={{co|coral|en-us}}}} | |
− | + | ||
− | + | This would pull up the data of a specific NPC based off of the {{co|coral|typeID}}, in this case the [https://esi.evetech.net/latest/universe/types/52213/?datasource=tranquility&language=en-us Anchoring Kikimora]. You can adjust this information to pull data from the testserver with the {{co|coral|datasource}} or change the {{co|coral|language}} parameters for localization. See their own [https://esi.evetech.net/ui/ user interface] page for more information about the specific parameters and which languages are supported. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | For more serious work, you're often required to either build up a database of your own or download the [https://developers.eveonline.com/resource/resources Static Data Export (SDE)], alternatively work with spreadsheets. That way you can more easily manipulate and present the data in various ways, or just simply make it more readable with the elaborated attribute names and descriptions. | |
− | |||
− | + | There are various sites that already do this, most notably [https://everef.net/ EVE Ref] (which has a convenient name-search function too), which is perfect for people who have no interest or don't feel the need to write their own program but would like to see the information. They also seem to be working on presenting the information in a more readily accessible manner too with grouped info-boxes, but haven't quite finished that. For example you don't see all the EWAR-capabilities that way and so far only turret damage is info-boxed leaving missile damage in the long list of attributes (which can be easy to miss). | |
− | |||
− | + | == Attribute categories == | |
− | + | There's currently no endpoint to pull this data directly from ESI, so you'll either have to look it up and add it yourself to your sheets or get it from CCP's [https://developers.eveonline.com/resource/resources SDE] if you're using a database. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Most attributes fall into a certain category for easy grouping. In theory, very useful, but sadly the new behavior-attributes are all lumped up into one and won't show up in the various EWAR-categories like the old attributes did and on top of that there's the odd stat that ends up under ''"Miscellaneous"'' or something. So while they help a little, it's always best to go through all attributes to make sure you're not missing an important attribute that isn't labelled correctly. | Most attributes fall into a certain category for easy grouping. In theory, very useful, but sadly the new behavior-attributes are all lumped up into one and won't show up in the various EWAR-categories like the old attributes did and on top of that there's the odd stat that ends up under ''"Miscellaneous"'' or something. So while they help a little, it's always best to go through all attributes to make sure you're not missing an important attribute that isn't labelled correctly. | ||
Click the {{button|show}}-button to expand the list and show all the categories. | Click the {{button|show}}-button to expand the list and show all the categories. | ||
{| class="wikitable collapsible collapsed" style="text-font:left;" | {| class="wikitable collapsible collapsed" style="text-font:left;" | ||
− | ! style="background-color:#222222; text-align:left;" | | + | ! style="background-color:#222222; text-align:left;" | CategoryID |
! style="background-color:#222222; text-align:left;" | CategoryName | ! style="background-color:#222222; text-align:left;" | CategoryName | ||
! style="background-color:#222222; text-align:left;" | CategoryDescription | ! style="background-color:#222222; text-align:left;" | CategoryDescription | ||
Line 159: | Line 95: | ||
|- | |- | ||
|} | |} | ||
+ | |||
+ | = Examples = | ||
+ | A lot of the information is pretty straight forward, but other times it's not immediately obvious if a value is supposed to be used straight up or manipulated into a proper modifier. For example, values for resists are shown as how much damage they take, like 0.3, so to convert that into what we commonly refer to as resists we'd have to take 1 - 0.3 = 0.7 so a 70% resists. | ||
+ | |||
+ | There are also various old data that hasn't been cleaned up, where it seems like a developer simply removed one or two attributes among many for a specific ability to disable it, leaving the rest to clutter up the code. This in combination with some attributes being optional, makes it a bit tricky sometimes to know, at first glance, if a ship actually have the ability to do it. | ||
+ | |||
+ | So below is a summary of various areas that may not be as straightforward as you'd like, so you can avoid misinterpreting the data. | ||
+ | |||
+ | == Energy neutralizing and energy nosferatu == | ||
+ | {| class="wikitable" style="text-font:left;" | ||
+ | ! style="background-color:#222222; text-align:left;" | AttributeID | ||
+ | ! style="background-color:#222222; text-align:left;" | AttributeName | ||
+ | ! style="background-color:#222222; text-align:left;" | Description | ||
+ | ! style="background-color:#222222; text-align:left;" | CategoryName | ||
+ | ! style="background-color:#222222; color:wheat; text-align:left;" | My notes | ||
+ | |- | ||
+ | | 90 | ||
+ | | powerTransferAmount | ||
+ | | Amount of power to transfer. | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Neutralization amount in GJ (positive). | ||
+ | |- | ||
+ | | 97 | ||
+ | | energyNeutralizerAmount | ||
+ | | An amount to modify the power of the target by. | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Nosferatu amount in GJ (positive). | ||
+ | |- | ||
+ | | 98 | ||
+ | | energyNeutralizerRangeOptimal | ||
+ | | Optimal Range of Energy Neutralizer | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Optimal range in meters. | ||
+ | |- | ||
+ | | 931 | ||
+ | | energyNeutralizerEntityChance | ||
+ | | Chance of NPC effect to be activated each duration | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Chance per cycle in decimals (can be null). | ||
+ | |- | ||
+ | | 942 | ||
+ | | energyNeutralizerDuration | ||
+ | | Duration of NPC Energy Neutralizer effect | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Duration in miliseconds. | ||
+ | |- | ||
+ | | 2451 | ||
+ | | energyNeutralizerSignatureResolution | ||
+ | | Signature Resolution of Energy Neutralizer | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Resolution in meters (can be null). | ||
+ | |- | ||
+ | | 2452 | ||
+ | | energyNeutralizerRangeFalloff | ||
+ | | Falloff Range of Energy Neutralizer | ||
+ | | EW - Energy Neutralizing | ||
+ | | {{co|slateblue|Old AI}} - Falloff in meters (can be null). | ||
+ | |- | ||
+ | | 2519 | ||
+ | | behaviorEnergyNeutralizerDuration | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Neutralizer duration in miliseconds. | ||
+ | |- | ||
+ | | 2520 | ||
+ | | behaviorEnergyNeutralizerRange | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Neutralizer optimal range in meters. | ||
+ | |- | ||
+ | | 2521 | ||
+ | | behaviorEnergyNeutralizerFalloff | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Neutralizer falloff in meters (can be null). | ||
+ | |- | ||
+ | | 2522 | ||
+ | | behaviorEnergyNeutralizerDischarge | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Neutralizer cap usage in GJ (positive). | ||
+ | |- | ||
+ | | 2630 | ||
+ | | behaviorEnergyNosferatuDuration | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Nosferatu duration in miliseconds. | ||
+ | |- | ||
+ | | 2632 | ||
+ | | behaviorEnergyNosferatuRange | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Nosferatu optimal range in meters. | ||
+ | |- | ||
+ | | 2631 | ||
+ | | behaviorEnergyNosferatuFalloff | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Nosferatu falloff in meters (can be null). | ||
+ | |- | ||
+ | | 2629 | ||
+ | | behaviorEnergyNosferatuDischarge | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Nosferatu cap cost in GJ (negative). | ||
+ | |- | ||
+ | |} | ||
+ | ==== Distinguishing between an energy neutralizer or energy nosferatu ==== | ||
+ | Both the old and new AI distinguish between the two: | ||
+ | |||
+ | * {{co|slateblue|Old AI}} - Attribute {{co|slateblue|97}} (''energyNeutralizerAmount'') shows neutralization amount and {{co|slateblue|90}} (''powerTransferAmount'') shows nosferatu amount. | ||
+ | * {{co|violet|New AI}} - The '''behavior'''-attribute series in {{co|violet|2519 - 2522}} (''behaviorEnergyNeutralizationX'') means neutralizing and in {{co|violet|2629 - 2632}} (''behaviorEnergyNosferatuX'') means nosferatu. | ||
+ | |||
+ | ==== Consolidation and sanity checks ==== | ||
+ | So far there doesn't seem to be an overlap of identical types of data between the old and new AI, so you can use things like coalesce in sql, or similar functions, because they will never both be set to non-null values for a single entity. In some cases, you do a triple check by picking either the old or either of the two new and exclusive attributes. | ||
+ | |||
+ | None of them seem to utilize attribute {{co|slateblue|2451}} (''energyNeutralizerSignatureResolution'') for signature checks, so it doesn't seem NPCs adhere to the same rules of relative size and signature resolution as players do. There are also entities with too few attributes, like the '''Blood Clone Soldier Trainer''' that only has the attribute {{co|slateblue|90}} but no other attributes so it cannot actually nos you. | ||
+ | |||
+ | * {{co|lightgreen|Energy neutralization optimal range}} is either attribute {{co|slateblue|98}} (old) or one of {{co|violet|2520}} or {{co|violet|2632}} (new). | ||
+ | * {{co|lightgreen|Energy neutralization falloff range}} is either attribute {{co|slateblue|2452}} (old) or one of {{co|violet|2521}} or {{co|violet|2631}} (new) but can also be '''null'''. | ||
+ | * {{co|lightgreen|Energy neutralization amount}} is either {{co|slateblue|97}} (''energy neutralization'') or {{co|slateblue|90}} (''energy nosferatu''). | ||
+ | * {{co|lightgreen|Energy neutralization signature}} is attribute {{co|slateblue|2451}} (old) but can also be '''null'''. | ||
+ | * {{co|lightgreen|Energy neutralization duration}} is either attribute {{co|slateblue|942}} (old) or one of {{co|violet|2519}} or {{co|violet|2630}} (new). | ||
+ | * {{co|lightgreen|Energy neutralization chance}} is attribute {{co|slateblue|931}} (old) and '''null''' should be treated as 1 (100% chance) if they otherwise have at least {{co|lightgreen|amount}}, {{co|lightgreen|optimal range}} and {{co|lightgreen|duration}} values. | ||
+ | * {{co|lightgreen|Energy neutralization discharge}} is either {{co|violet|2522}} or {{co|violet|2629}} (new) but will be {{co|slateblue|null}} for old AI (doesn't simulate cap usage). | ||
+ | |||
+ | If you're writing a function or script to check for energy neutralization capabilities, it's best to double-check that you have entries for {{co|lightgreen|energy neutralization amount}}, {{co|lightgreen|optimal range}} and {{co|lightgreen|duration}} (they should all have at least those three entries if they actually have neuting capabilities), then if they do also adjust the {{co|lightgreen|energy neutralization chance}} to 1 if it's null and finally check to see if it's an '''energy neutralizer''' or an '''energy nosferatu'''. The existence of {{co|lightgreen|energy neutralization falloff range}}, {{co|lightgreen|signature}} and {{co|lightgreen|discharge}} will then vary. | ||
+ | |||
+ | == Warp disruption and warp scrambling == | ||
+ | {| class="wikitable" style="text-font:left;" | ||
+ | ! style="background-color:#222222; text-align:left;" | AttributeID | ||
+ | ! style="background-color:#222222; text-align:left;" | AttributeName | ||
+ | ! style="background-color:#222222; text-align:left;" | Description | ||
+ | ! style="background-color:#222222; text-align:left;" | CategoryName | ||
+ | ! style="background-color:#222222; color:wheat; text-align:left;" | My notes | ||
+ | |- | ||
+ | |- | ||
+ | | 103 | ||
+ | | warpScrambleRange | ||
+ | | Maximum range objects can be warp scrambled from. | ||
+ | | EW - Warp Scrambling | ||
+ | | {{co|slateblue|Old AI}} - Range in meters. | ||
+ | |- | ||
+ | | 105 | ||
+ | | warpScrambleStrength | ||
+ | | Amount to modify ships warp scramble status by. | ||
+ | | EW - Warp Scrambling | ||
+ | | {{co|slateblue|Old AI}} - Disrupt/scramble strength (positive). | ||
+ | |- | ||
+ | | 504 | ||
+ | | entityWarpScrambleChance | ||
+ | | Chance of entity warp scrambling it's target. | ||
+ | | EW - Warp Scrambling | ||
+ | | {{co|slateblue|Old AI}} - Chance per cycle in decimals (can be null). | ||
+ | |- | ||
+ | | 505 | ||
+ | | warpScrambleDuration | ||
+ | | Duration | ||
+ | | EW - Warp Scrambling | ||
+ | | {{co|slateblue|Old AI}} - Duration in miliseconds (can be null). | ||
+ | |- | ||
+ | | 1350 | ||
+ | | activationBlockedStrenght | ||
+ | | | ||
+ | | EW - Warp Scrambling | ||
+ | | {{co|slateblue|Old AI}} - Warp scrambling effect (not disruption). | ||
+ | |- | ||
+ | | 2503 | ||
+ | | behaviorWarpDisruptDuration | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Disruptor duration in miliseconds. | ||
+ | |- | ||
+ | | 2504 | ||
+ | | behaviorWarpDisruptRange | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Disruptor range in meters. | ||
+ | |- | ||
+ | | 2505 | ||
+ | | behaviorWarpDisruptDischarge | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Disruptor cap usage in GJ. | ||
+ | |- | ||
+ | | 2510 | ||
+ | | behaviorWarpDisruptStrength | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Disruptor strength (positive). | ||
+ | |- | ||
+ | | 2506 | ||
+ | | behaviorWarpScrambleDuration | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Scramble uration in miliseconds. | ||
+ | |- | ||
+ | | 2507 | ||
+ | | behaviorWarpScrambleRange | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Scramble range in meters. | ||
+ | |- | ||
+ | | 2508 | ||
+ | | behaviorWarpScrambleDischarge | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Scramble cap usage in GJ. | ||
+ | |- | ||
+ | | 2509 | ||
+ | | behaviorWarpScrambleStrength | ||
+ | | | ||
+ | | Behavior Attributes | ||
+ | | {{co|violet|New AI}} - Scramble strength (positive). | ||
+ | |- | ||
+ | |} | ||
+ | ==== Distinguishing between a warp disruptor and a warp scrambler ==== | ||
+ | In the good old day no NPC actually warp scrambled (shuts down microjump- and microwarpdrives), they all just warp disrupted at various strengths. With the introduction of the [[Burner Mission|Burner missions]] (2014), followed by diamond ♦-named NPCs and [[Forward Operating Base]]s (2017) as well as [[Triglavian Invasion]]s (2019) this changed. There are now two things to check to see if an NPC uses normal warp disruption or actual warp scrambling: | ||
+ | |||
+ | * {{co|slateblue|Old AI}} - An actual warp scrambler will have the attribute {{co|slateblue|1350}} (''activationBlockedStrenght'') set to 1. | ||
+ | * {{co|violet|New AI}} - NPCs with '''behavior'''-attribute {{co|violet|2509}} (''behaviorWarpScrambleStrength'') use actual warp scramblers and those with {{co|violet|2510}} (''behaviorWarpDisruptStrength'') use warp disruptors. | ||
+ | |||
+ | ==== Consolidation and sanity checks ==== | ||
+ | So far there doesn't seem to be an overlap of identical types of data between the old and new AI, so you can use things like coalesce in sql, or similar functions, because they will never both be set to non-null values for a single entity. In some cases, you do a triple check by picking either the old or either of the two new and exclusive attributes. | ||
+ | |||
+ | There are also entities with too few attributes, like the '''Renyn Meten''' that only has the attribute {{co|slateblue|504}} but no other attributes so it cannot actually warp disrupt. | ||
+ | |||
+ | * {{co|lightgreen|Warp scramble range}} is either attribute {{co|slateblue|103}} (old) or one of {{co|violet|2507}} or {{co|violet|2504}} (new). | ||
+ | * {{co|lightgreen|Warp scramble strength}} is either attribute {{co|slateblue|105}} (old) or one of {{co|violet|2509}} or {{co|violet|2510}} (new) and values above 1 doesn't necessarily mean it's a scram. | ||
+ | * {{co|lightgreen|Warp scramble duration}} is either attribute {{co|slateblue|505}} (old) or one of {{co|violet|2506}} or {{co|violet|2503}} (new) but can also be null. | ||
+ | * {{co|lightgreen|Warp scramble chance}} is attribute {{co|slateblue|504}} (old) and '''null''' should be treated as 1 (100% chance) if they otherwise have at least {{co|lightgreen|strength}} and {{co|lightgreen|range}} values. | ||
+ | * {{co|lightgreen|Warp scramble discharge}} is either attribute {{co|violet|2508}} or {{co|violet|2505}} (new) but will be {{co|slateblue|null}} for old AI (doesn't simulate cap usage). | ||
+ | * {{co|lightgreen|Warp scrambling effect}} is true if either {{co|slateblue|1350}} (old) or {{co|violet|2509}} (new) is not null. | ||
+ | |||
+ | If you're writing a function or script to check for warp disruption capabilities, it's best to double-check that you have entries for both {{co|lightgreen|warp scramble strength}} and {{co|lightgreen|range}} (they should all have at least those two entries if they actually have warp disrupt capabilities), then if they do also adjust the {{co|lightgreen|warp scramble chance}} to 1 if it's null and finally check to see if it's a '''warp disruptor''' or a '''warp scrambler'''. The existence of {{co|lightgreen|warp scramble duration}} and {{co|lightgreen|discharge}} will then vary. |
Latest revision as of 11:08, 13 August 2022
The EVE Swagger Interface (ESI) is a public Application Programming Interface (API) that allows players and applications to pull data about various things in EVE. This article focuses on the Dogma-attributes for NPC stats, such as which EWAR-capabilities they have, their damage output, resists and effective hit points, speeds, orbit ranges and all the other intricate little details that helps us know our enemy and perfect our fits.
Note: | For more general information and other uses of ESI, see the EVE Swagger Interface page. |
Working with EVE Swagger Interface (ESI)
You can manually or through scripts pull information directly from CCP's servers with the following URL:
https://esi.evetech.net/latest/universe/types/52213/?datasource=tranquility&language=en-us |
This would pull up the data of a specific NPC based off of the typeID, in this case the Anchoring Kikimora. You can adjust this information to pull data from the testserver with the datasource or change the language parameters for localization. See their own user interface page for more information about the specific parameters and which languages are supported.
For more serious work, you're often required to either build up a database of your own or download the Static Data Export (SDE), alternatively work with spreadsheets. That way you can more easily manipulate and present the data in various ways, or just simply make it more readable with the elaborated attribute names and descriptions.
There are various sites that already do this, most notably EVE Ref (which has a convenient name-search function too), which is perfect for people who have no interest or don't feel the need to write their own program but would like to see the information. They also seem to be working on presenting the information in a more readily accessible manner too with grouped info-boxes, but haven't quite finished that. For example you don't see all the EWAR-capabilities that way and so far only turret damage is info-boxed leaving missile damage in the long list of attributes (which can be easy to miss).
Attribute categories
There's currently no endpoint to pull this data directly from ESI, so you'll either have to look it up and add it yourself to your sheets or get it from CCP's SDE if you're using a database.
Most attributes fall into a certain category for easy grouping. In theory, very useful, but sadly the new behavior-attributes are all lumped up into one and won't show up in the various EWAR-categories like the old attributes did and on top of that there's the odd stat that ends up under "Miscellaneous" or something. So while they help a little, it's always best to go through all attributes to make sure you're not missing an important attribute that isn't labelled correctly.
Click the show-button to expand the list and show all the categories.
CategoryID | CategoryName | CategoryDescription |
---|---|---|
1 | Fitting | Fitting capabilities of a ship |
2 | Shield | Shield attributes of ships |
3 | Armor | Armor attributes of ships |
4 | Structure | Structure attributes of ships |
5 | Capacitor | Capacitor attributes for ships |
6 | Targeting | Targeting Attributes for ships |
7 | Miscellaneous | Misc. attributes |
8 | Required Skills | Skill requirements |
9 | NULL | Attributes already checked and not going into a category |
10 | Drones | All you need to know about drones |
12 | AI | Attribs for the AI configuration |
17 | Speed | Attributes used for velocity, speed and such |
19 | Loot | Attributes that affect loot drops |
20 | Remote Assistance | Remote shield transfers, armor, structure and such |
21 | EW - Target Painting | NPC Target Painting Attributes |
22 | EW - Energy Neutralizing | NPC Energy Neutralizing Attributes |
23 | EW - Remote Electronic Counter Measures | NPC Remote Electronic Counter Measures Attributes |
24 | EW - Sensor Dampening | NPC Sensor Dampening Attributes |
25 | EW - Target Jamming | NPC Target Jamming Attributes |
26 | EW - Tracking Disruption | NPC Tracking Disruption Attributes |
27 | EW - Warp Scrambling | NPC Warp Scrambling Attributes |
28 | EW - Webbing | NPC Stasis Webbing Attributes |
29 | Turrets | NPC Turrets Attributes |
30 | Missile | NPC Missile Attributes |
31 | Graphics | NPC Graphic Attributes |
32 | Entity Rewards | NPC Entity Rewards Attributes |
33 | Entity Extra Attributes | NPC Extra Attributes |
34 | Fighter Abilities | Fighter abilities are like built-in modules on fighters |
36 | EW - Resistance | Resistances to different types of EWar Effects |
37 | Bonuses | Bonuses |
38 | Fighter Attributes | Attributes related to fighters (but not abilities) |
39 | Superweapons | Attributes relating to Doomsdays and Superweapons |
40 | Hangars & Bays | Hangars & Bays |
41 | On Death | Attributes relating to the death of a ship |
42 | Behavior Attributes | NPC Behavior Attributes |
Examples
A lot of the information is pretty straight forward, but other times it's not immediately obvious if a value is supposed to be used straight up or manipulated into a proper modifier. For example, values for resists are shown as how much damage they take, like 0.3, so to convert that into what we commonly refer to as resists we'd have to take 1 - 0.3 = 0.7 so a 70% resists.
There are also various old data that hasn't been cleaned up, where it seems like a developer simply removed one or two attributes among many for a specific ability to disable it, leaving the rest to clutter up the code. This in combination with some attributes being optional, makes it a bit tricky sometimes to know, at first glance, if a ship actually have the ability to do it.
So below is a summary of various areas that may not be as straightforward as you'd like, so you can avoid misinterpreting the data.
Energy neutralizing and energy nosferatu
AttributeID | AttributeName | Description | CategoryName | My notes |
---|---|---|---|---|
90 | powerTransferAmount | Amount of power to transfer. | EW - Energy Neutralizing | Old AI - Neutralization amount in GJ (positive). |
97 | energyNeutralizerAmount | An amount to modify the power of the target by. | EW - Energy Neutralizing | Old AI - Nosferatu amount in GJ (positive). |
98 | energyNeutralizerRangeOptimal | Optimal Range of Energy Neutralizer | EW - Energy Neutralizing | Old AI - Optimal range in meters. |
931 | energyNeutralizerEntityChance | Chance of NPC effect to be activated each duration | EW - Energy Neutralizing | Old AI - Chance per cycle in decimals (can be null). |
942 | energyNeutralizerDuration | Duration of NPC Energy Neutralizer effect | EW - Energy Neutralizing | Old AI - Duration in miliseconds. |
2451 | energyNeutralizerSignatureResolution | Signature Resolution of Energy Neutralizer | EW - Energy Neutralizing | Old AI - Resolution in meters (can be null). |
2452 | energyNeutralizerRangeFalloff | Falloff Range of Energy Neutralizer | EW - Energy Neutralizing | Old AI - Falloff in meters (can be null). |
2519 | behaviorEnergyNeutralizerDuration | Behavior Attributes | New AI - Neutralizer duration in miliseconds. | |
2520 | behaviorEnergyNeutralizerRange | Behavior Attributes | New AI - Neutralizer optimal range in meters. | |
2521 | behaviorEnergyNeutralizerFalloff | Behavior Attributes | New AI - Neutralizer falloff in meters (can be null). | |
2522 | behaviorEnergyNeutralizerDischarge | Behavior Attributes | New AI - Neutralizer cap usage in GJ (positive). | |
2630 | behaviorEnergyNosferatuDuration | Behavior Attributes | New AI - Nosferatu duration in miliseconds. | |
2632 | behaviorEnergyNosferatuRange | Behavior Attributes | New AI - Nosferatu optimal range in meters. | |
2631 | behaviorEnergyNosferatuFalloff | Behavior Attributes | New AI - Nosferatu falloff in meters (can be null). | |
2629 | behaviorEnergyNosferatuDischarge | Behavior Attributes | New AI - Nosferatu cap cost in GJ (negative). |
Distinguishing between an energy neutralizer or energy nosferatu
Both the old and new AI distinguish between the two:
- Old AI - Attribute 97 (energyNeutralizerAmount) shows neutralization amount and 90 (powerTransferAmount) shows nosferatu amount.
- New AI - The behavior-attribute series in 2519 - 2522 (behaviorEnergyNeutralizationX) means neutralizing and in 2629 - 2632 (behaviorEnergyNosferatuX) means nosferatu.
Consolidation and sanity checks
So far there doesn't seem to be an overlap of identical types of data between the old and new AI, so you can use things like coalesce in sql, or similar functions, because they will never both be set to non-null values for a single entity. In some cases, you do a triple check by picking either the old or either of the two new and exclusive attributes.
None of them seem to utilize attribute 2451 (energyNeutralizerSignatureResolution) for signature checks, so it doesn't seem NPCs adhere to the same rules of relative size and signature resolution as players do. There are also entities with too few attributes, like the Blood Clone Soldier Trainer that only has the attribute 90 but no other attributes so it cannot actually nos you.
- Energy neutralization optimal range is either attribute 98 (old) or one of 2520 or 2632 (new).
- Energy neutralization falloff range is either attribute 2452 (old) or one of 2521 or 2631 (new) but can also be null.
- Energy neutralization amount is either 97 (energy neutralization) or 90 (energy nosferatu).
- Energy neutralization signature is attribute 2451 (old) but can also be null.
- Energy neutralization duration is either attribute 942 (old) or one of 2519 or 2630 (new).
- Energy neutralization chance is attribute 931 (old) and null should be treated as 1 (100% chance) if they otherwise have at least amount, optimal range and duration values.
- Energy neutralization discharge is either 2522 or 2629 (new) but will be null for old AI (doesn't simulate cap usage).
If you're writing a function or script to check for energy neutralization capabilities, it's best to double-check that you have entries for energy neutralization amount, optimal range and duration (they should all have at least those three entries if they actually have neuting capabilities), then if they do also adjust the energy neutralization chance to 1 if it's null and finally check to see if it's an energy neutralizer or an energy nosferatu. The existence of energy neutralization falloff range, signature and discharge will then vary.
Warp disruption and warp scrambling
AttributeID | AttributeName | Description | CategoryName | My notes |
---|---|---|---|---|
103 | warpScrambleRange | Maximum range objects can be warp scrambled from. | EW - Warp Scrambling | Old AI - Range in meters. |
105 | warpScrambleStrength | Amount to modify ships warp scramble status by. | EW - Warp Scrambling | Old AI - Disrupt/scramble strength (positive). |
504 | entityWarpScrambleChance | Chance of entity warp scrambling it's target. | EW - Warp Scrambling | Old AI - Chance per cycle in decimals (can be null). |
505 | warpScrambleDuration | Duration | EW - Warp Scrambling | Old AI - Duration in miliseconds (can be null). |
1350 | activationBlockedStrenght | EW - Warp Scrambling | Old AI - Warp scrambling effect (not disruption). | |
2503 | behaviorWarpDisruptDuration | Behavior Attributes | New AI - Disruptor duration in miliseconds. | |
2504 | behaviorWarpDisruptRange | Behavior Attributes | New AI - Disruptor range in meters. | |
2505 | behaviorWarpDisruptDischarge | Behavior Attributes | New AI - Disruptor cap usage in GJ. | |
2510 | behaviorWarpDisruptStrength | Behavior Attributes | New AI - Disruptor strength (positive). | |
2506 | behaviorWarpScrambleDuration | Behavior Attributes | New AI - Scramble uration in miliseconds. | |
2507 | behaviorWarpScrambleRange | Behavior Attributes | New AI - Scramble range in meters. | |
2508 | behaviorWarpScrambleDischarge | Behavior Attributes | New AI - Scramble cap usage in GJ. | |
2509 | behaviorWarpScrambleStrength | Behavior Attributes | New AI - Scramble strength (positive). |
Distinguishing between a warp disruptor and a warp scrambler
In the good old day no NPC actually warp scrambled (shuts down microjump- and microwarpdrives), they all just warp disrupted at various strengths. With the introduction of the Burner missions (2014), followed by diamond ♦-named NPCs and Forward Operating Bases (2017) as well as Triglavian Invasions (2019) this changed. There are now two things to check to see if an NPC uses normal warp disruption or actual warp scrambling:
- Old AI - An actual warp scrambler will have the attribute 1350 (activationBlockedStrenght) set to 1.
- New AI - NPCs with behavior-attribute 2509 (behaviorWarpScrambleStrength) use actual warp scramblers and those with 2510 (behaviorWarpDisruptStrength) use warp disruptors.
Consolidation and sanity checks
So far there doesn't seem to be an overlap of identical types of data between the old and new AI, so you can use things like coalesce in sql, or similar functions, because they will never both be set to non-null values for a single entity. In some cases, you do a triple check by picking either the old or either of the two new and exclusive attributes.
There are also entities with too few attributes, like the Renyn Meten that only has the attribute 504 but no other attributes so it cannot actually warp disrupt.
- Warp scramble range is either attribute 103 (old) or one of 2507 or 2504 (new).
- Warp scramble strength is either attribute 105 (old) or one of 2509 or 2510 (new) and values above 1 doesn't necessarily mean it's a scram.
- Warp scramble duration is either attribute 505 (old) or one of 2506 or 2503 (new) but can also be null.
- Warp scramble chance is attribute 504 (old) and null should be treated as 1 (100% chance) if they otherwise have at least strength and range values.
- Warp scramble discharge is either attribute 2508 or 2505 (new) but will be null for old AI (doesn't simulate cap usage).
- Warp scrambling effect is true if either 1350 (old) or 2509 (new) is not null.
If you're writing a function or script to check for warp disruption capabilities, it's best to double-check that you have entries for both warp scramble strength and range (they should all have at least those two entries if they actually have warp disrupt capabilities), then if they do also adjust the warp scramble chance to 1 if it's null and finally check to see if it's a warp disruptor or a warp scrambler. The existence of warp scramble duration and discharge will then vary.