How to use ship.SetEquipmentCacheValue?

Started by ninekorn, August 01, 2017, 08:15:16 PM

ninekorn

discontinued 2023 july 29th . by ninekorn

ai_enabled

Hello,
unfortunately, for NPCs weapons are mapped directly from NPC XML, there is no way to change NPC weapons from scripting.
So, it makes sense to make a few NPC XMLs with particular weapons (per weapon type, multiple tiers). Giving too much choice to the player is something I would recommend to avoid as it might easily overwhelm the player. Consider having only a few presets for drones, the code generation for it is overcomplication and simply abusing the idea of XML's.

But you can modify NPC shield stats/properties, such as damage - as you found out, with the IMCache.
It's not recommended for mods to call ship.SetEquipmentCacheValue() - this method is intended to be used only by IMCache when it calculates "ship cache" (it combines stat values and bonuses from various sources and then applies them with ship.SetEquipmentCacheValue()). If you call this method directly you will overwrite the value set by IMCache (and if IMCache calculated any time later, it will overwrite your custom value). It's better to simply provide these values to IMCache instead. As you wrote, there is the CalculateShip.js script - and I think modifying it is the best way to do this.

ninekorn

#2
discontinued 2023 july 29th . by ninekorn

ai_enabled

Well it's not that simple... CalculateShip.js itself subscribing to OnCalculateNpcLeveledCache event:
actions.Bind("OnCalculateNpcLeveledCache", "CalculateNpcLeveledCache");
I think the easiest way for you will be to modify CalculateShip.js (yes, it's hacky way...).

Another way is to create a new script, also bind to "OnCalculateNpcLeveledCache" and have your custom callback method for it (just copy CalculateNpcLeveledCache code from CalculateShip.js and modify for your needs). But it will work properly only in the case if OnCalculateNpcLeveledCache first handled by CalculateShip.js and then by your script. We don't have any API to setup callbacks priority, so you can try it and see if your method called after CalculateShip.js.

ninekorn

discontinued 2023 july 29th . by ninekorn

ai_enabled

Hello!

"upgrades"  and "upgrades_max" are actually not used by the game at all! They're just artifacts from something...I suppose you found them in one of the XML item definitions?

Regards!

ninekorn

discontinued 2023 july 29th . by ninekorn

ai_enabled


ninekorn

discontinued 2023 july 29th . by ninekorn

ai_enabled

It's decorated with
[Obsolete("NOT USED")]
Sounds like it was never used or never implemented completely.
:-)

ninekorn

#10
discontinued 2023 july 29th . by ninekorn