All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
https://github.com/nwn-dotnet/Anvil/compare/v8193.37.3...HEAD
https://github.com/nwn-dotnet/Anvil/compare/v8193.37.2...v8193.37.3
- Events: Added
Spellproperty toOnCreatureDamageevent.
- NWNX: 292a2c0 -> 73cf6ab
- NWN.Core: 8193.37.3 -> 8193.37.4
- NWN.Native: 8193.37.3 -> 8193.37.4
- Docker: Ubuntu 20.04 -> Debian 13 (Trixie)
- Docker: Pinned OpenSSL 1.1.1t
- Improved invalid object detection in some edge cases.
- Events: Placeable
OnDamagedevent now supports damage sources from non-creatures. - NwCreature:
GetFeatRemainingUses,GetFeatTotalUsesnow matches the behaviour of the NWScript function.- If the feat has unlimited uses, returns int.MaxValue instead of 100.
- NwSpell:
GetSpellLevelByClassnow matches the behaviour of the NWScript function.- Returns the spell level for the specified class. Returns null if no spell level is defined for the specified class.
includeMasterSpellparameter - If true, will use the master spell class level if this spell has no class level configured
- Fixed an OpenSSL crash when running Anvil/NWNX_DotNET on newer operating systems (Debian 12+, Ubuntu 22.04+)
https://github.com/nwn-dotnet/Anvil/compare/v8193.37.1...v8193.37.2
- Improved invalid object detection in some edge cases.
https://github.com/nwn-dotnet/Anvil/compare/v8193.37.0...v8193.37.1
- Events: Added
OnItemDestroyevent. - Events: Added
OnItemDecrementStackSizeevent. - Events: Added
OnCreatureAcquireItemevent. - Events: Added
OnTrapDisarmevent. - Events: Added
OnTrapEnterevent. - Events: Added
OnTrapExamineevent. - Events: Added
OnTrapFlagevent. - Events: Added
OnTrapRecoverevent. - Events: Added
OnTrapSetevent. - NwArea: Added
GetLocalizedNamemethod. - NwArea: Added
SetLocalizedNamemethod. - NwCreature: Added
InitiativeRollproperty getter/setter. - NwGameObject: Added
GetLocalizedNamemethod. - NwGameObject: Added
SetLocalizedNamemethod. - NwPlayer: Added
PlayerPossessCreaturemethod. - Added support for different [ScriptHandler] callback method signatures. The following signatures are now supported:
void Handler();
bool Handler();
ScriptHandleResult Handler();
void Handler(CallInfo callInfo);
bool Handler(CallInfo callInfo);
ScriptHandleResult Handler(CallInfo callInfo);
- NWNX: 7fc892a -> 292a2c0
- NWN.Core: 8193.37.2 -> 8193.37.3
- Effect:
Damagenow supports optionaldamagePowerparameter. - Events:
OnUnacquireItem.Itemis now nullable.
- Fixed some assertion failure messages from skipped events using
CNWSMessage. - Fixed
DMPossessCreatureexception when player was a DM. - Fixed undefined behaviour when disposing function hooks/reloading anvil.
https://github.com/nwn-dotnet/Anvil/compare/v8193.36.1...v8193.37.0
- Plugins: Added support to disable loading plugins on startup with new environment variable,
ANVIL_PLUGINNAME_SKIP - Plugins: Implemented new API for loading/unloading isolated plugins at runtime.
- To mark a plugin as "isolated", add the
PluginInfoassembly attribute withIsolated=true. - To load the isolated plugin, call the
PluginManager.LoadPluginmethod. - To unload the isolated plugin, call the
PluginManager.UnloadPluginmethod.
- To mark a plugin as "isolated", add the
- PlayerDeviceProperty: Added new 8193.37 constants.
- PlayerPlatform: Added new 8193.37 constants.
- SavingThrowType: Added new 8193.37 constants.
- SpellFailureType: Added new 8193.37 constants.
- Effect: Added
DamageIncreaseoverload with correct constants. - Effect: Added
SummonCreatureoverload withNwCreatureparameter instead of string ResRef. - ItemProperty: Added
OnHitCastSpelloverload with correct casterLevel parameter. - CreatureEvents.OnDamaged: Added
GetDamageDealtByTypemethod. - Events: Added
OnPolymorphApplyevent. - Events: Added
OnPolymorphRemoveevent. - OnSpellBroadcast: Added
TargetObject,TargetPositionproperties. - CreatureClassInfo: Added
Schoolproperty setter. - NwAreaOfEffect: Added
SetRadiusmethod. - NwCreature: Added
AnimalCompanionNameproperty setter. - NwCreature: Added
AnimalCompanionTypeproperty setter. - NwCreature: Added
FamiliarNameproperty setter. - NwCreature: Added
FamiliarTypeproperty setter. - NwCreature: Added
ActionCloseDoormethod. - NwCreature: Added
ForceLevelUpmethod. - NwCreature: Added
ActionOpenDoormethod. - NwCreature: Added
SpellResistanceCheckmethod. - NwCreature: Added
SpellImmunityCheckmethod. - NwCreature: Added
SpellAbsorptionLimitedCheckmethod. - NwCreature: Added
SpellAbsorptionUnlimitedCheckmethod. - NwCreature: Added
SummonAnimalCompanionmethod. - NwCreature: Added
UnsummonAnimalCompanionmethod. - NwCreature: Added
SummonFamiliarmethod. - NwCreature: Added
UnsummonFamiliarmethod. - NwCreature: Added
Unsummonmethod. - NwGameObject: Added
IsDestroyableproperty. - NwGameObject: Added
IsRaiseableproperty. - NwGameObject: Added
IsSelectableWhenDeadproperty. - NwItem: Added
GetMinEquipLevelOverride,SetMinEquipLevelOverride,ClearMinEquipLevelOverridemethods. - NwPlayer: Added
Latencyproperty. - NwPlayer: Added
LatencyAverageproperty. - NwPlayer: Added
CancelTargetModemethod. - NwPlayer: Added
UpdateCharacterSheetmethod. - NwPlaceable/NwTrigger: Added
LockedByproperty. - NwPlaceable/NwTrigger: Added
UnlockedByproperty. - NwRace: Added
GetFavoredEnemyFeatmethod. - EnforceLegalCharacterService: Added failure event for too many ability score increases.
- NWNX: 9865013 -> 7fc892a
- NWN.Core: 8193.36.1 -> 8193.37.2
- NWN.Native: 8193.36.2 -> 8193.37.3
- NLog: 5.2.8 -> 5.4.0
- System.Reflection.MetadataLoadContext: 8.0.1
- Changed NWNX_DotNET interop to use
NWNX.NETplugin. - Use
NWNX.NETfor encoding strings between UTF-16 and CP-1252. - Effect:
Polymorphnow supports optionalunPolymorphVfx,spellAbilityModifier,spellAbilityCasterLevelparameters. - Effect:
SpellFailurenow supports an optionalfailureTypeparameter. - Effect/ItemProperty:
Spellproperty is now correctly marked as nullable. - NwCreature:
TouchAttackMeleemethod is no-longer async. - NwCreature:
TouchAttackRangedmethod is no-longer async. - NwGameObject:
EndConversationmethod is now awaitable. - NwGameObject:
FaceToObjectmethod is no-longer async. - NwGameObject:
FaceToPointmethod is no-longer async. - NwGameObject:
SetFacingmethod is no-longer async. - NwModule:
PlayerCountproperty is now an int. - NwObject:
ClearActionQueuemethod is no-longer async. - ClassFeatListTypes: Renamed to match flags enum naming convention.
ItemProperty.OnHitCastSpell(IPCastSpell, IPSpellLevel)- use theItemProperty.OnHitCastSpell(IPCastSpell, int)overload instead.NwCreature.CheckResistSpell(NwGameObject)- use theNwCreature.SpellResistanceCheckmethod instead.NwGameObject.SetIsDestroyable(bool,bool,bool)- use the IsDestroyable/IsRaiseable/IsSelectableWhenDead properties instead.
- ItemProperty:
OnMonsterHitPropertiesnow correctly uses the "special" parameter. - OnItemUnequip: Fixed a function hook issue.
- SchedulerService: Fixed an issue where scheduling events immediately after reloading anvil would delay the event for the total uptime of the server.
- NwCreature:
BaseAttackBonusnow returns the correct value if the value was not overriden with a custom value. - Paket: Fixed an issue where logs would be printed multiple times after reloading anvil.
- NwCreature: Fixed an issue where setting
AlwaysWalktofalsewould not correctly update the encumbrance state of the player. - HookService: Re-implemented as core service, and added new API to persist some function hooks after reloading anvil.
- ObjectStorageService: Re-implemented as core service. Persistent variables should now persist after reloading anvil.
- EnforceLegalCharacterService: Fixed an IndexOutOfRangeException for characters with too many ability score increases.
https://github.com/nwn-dotnet/Anvil/compare/v8193.35.3...v8193.36.1
- EffectType: Added new 8193.36 constants
- GuiEventType: Added new 8193.36 constants
- PlayerDeviceProperty: Added new 8193.36 constants
- ResRefType: Added new 8193.36 constants and missing constants for 8193.35
- Effect: Added
EnemyAttackBonusmethod. - SQLQuery: Added
Columnsproperty. - SQLResult: Added overloads with column name parameters.
- OnPlayerGuiEvent: Added missing documentation for
EventObjectevent types. - NwArea: Added
SetAreaTileBorderDisabledmethod. - NwArea: Added
SetAreaGrassOverridemethod. - NwArea: Added
RemoveAreaGrassOverridemethod. - NwArea: Added
SetAreaDefaultGrassDisabledmethod. - NwGameObject: Added
CasterLevelproperty. This replacesLastSpellCasterLevelfrom NwCreature. - NwCreature: Added
SpellAbilitiesproperty for managing creature spell-like abilities. - NwPlayer: Added
StartAudioStreammethod. - NwPlayer: Added
StopAudioStreammethod. - NwPlayer: Added
SetAudioStreamPausedmethod. - NwPlayer: Added
SetAudioStreamVolumemethod. - NwPlayer: Added
SeekAudioStreammethod. - CRulesKeyHash: New structure to support working with the new hash-based ruleset key labels.
- RulesetKeys: New constants class with hashed keys for all known ruleset definitions.
- NwGameTables: Added
SurfaceMaterialTable.
- NWNX: 51162c5 -> 9865013
- NWN.Core: 8193.35.21 -> 8193.36.1
- NWN.Native: 8193.35.9 -> 8193.36.2
- NLog: 5.2.5 -> 5.2.8
- Effect:
DamageReductionnow supports an optionalrangedOnlyparameter. - Effect:
DamageResistancenow supports an optionalrangedOnlyparameter. - Effect:
EffectTypewill return the new types introduced in 8193.36. - NwDoor:
Clonenow uses the sharedCloneInternalbehaviour. - NwEncounter:
Cloneis now supported. - NwGameObject:
ActionCastSpellAtnow supports optionalspellClassandspontaneousCastparameters. - NwPlayer:
FloatingTextStringnow supports an optionalchatWindowparameter. - NwPlayer:
FloatingTextStrRefnow supports an optionalchatWindowparameter. - CampaignVariableObject: Tightened generic constraint to only allow
NwGameObjectinstead ofNwObjectto match base game behaviour.
- ItemProperty:
LimitUseByClass(IPClass)- Use theLimitUseByClass(NwClass)overload instead.
- Fixed
Possessornot correctly returning bags/containers.
https://github.com/nwn-dotnet/Anvil/compare/v8193.35.2...v8193.35.3
- Removed custom crash handler due to preventing dotnet from collecting a crash dump.
https://github.com/nwn-dotnet/Anvil/compare/v8193.35.1...v8193.35.2
- Effect: Added
AreaOfEffectoverload withPersistentVfxTableEntrysupport. - Effect: Added
Polymorphoverload withPolymorphTableEntrysupport. - Location: Added
TileInfoproperty. - Events: Added
OnDispelMagicApplyevent. - NuiDrawList: Added
NuiDrawListItemType.Linesupport. - NuiDrawList: Added support for item order and render options.
- NuiDrawList: Added
ImageRegionproperty. - NuiImage: Added
ImageRegionproperty. - NuiImage: Added
WordWrapproperty. - Nui: Added
NuiToggleswidget. - NuiElement: Added
DisabledTooltip,Encouragedproperties. - NuiWindow: Added
AcceptsInputproperty. - CreatureLevelInfo: Added
AbilityGainedproperty. - NwArea: Added
TileInfoproperty. - NwCreature: Added
RemainingSkillPointsproperty. - NwCreature: Added
BroadcastSkillRollmethod. - NwCreature: Added
CalculateAbilityModifierFromScoremethod. - NwCreature: Added
GetArmorClassVersusmethod. - NwCreature: Added parameter to
RemoveFeatto optionally remove the feat from the level stat list (for ELC). - NwItem: Extended
AddItemPropertyto support additional behaviours for managing existing item properties. - NwItem: Added
CompareItemmethod. - NwItem: Added
HasItemPropertymethod. - NwItem: Added
RemoveItemPropertiesmethod. - NwModule: Added
RefreshClientObjectsmethod. - NwPlayer: Added
RefreshClientObjectmethod. - NwPlayer: Added
RefreshPlayerClientObjectmethod. - NwServer: Added
DebugMode,DebugCombat,DebugSaveThrows,DebugHitDie,DebugMoveSpeedproperties. - NwGameTables: Added
PlaceableTypeTable - NwGameTables: Added
PolymorphTable - NwGameTables: Added
PortraitTable - NwGameTables: Added
PersistentEffectTable - PluginManager: Added support for specifying additional plugin directories with a new environment variable,
ADD_PLUGIN_PATHS - UnobservedTaskExceptionLogger: Added new service for logging and handling uncaught
async Taskexceptions.
- NWNX: b419e42 -> 51162c5
- NWN.Core: 8193.35.6 -> 8193.35.21
- NWN.Native: 8193.34.6 -> 8193.35.9
- NLog: 5.1.4 -> 5.2.5
- Effect:
Tagproperty is now correctly marked as nullable. - ItemProperty:
Tagproperty is now correctly marked as nullable. - OnClientConnect:
PlayerName,CDKeyproperties are no longer nullable. - CreatureLevelInfo:
Featsproperty is now a mutable list. - EncounterListEntry:
CreatureResRefis now correctly marked as nullable. - NwCreature:
DialogResRefis now correctly marked as nullable. - NwCreature:
TalentBest,TalentRandomnow returns the correct talent class type. - NwDoor:
DialogResRefis now correctly marked as nullable. - NwGameObject:
PortraitIdnow uses the 2da PortraitTableEntry type. - NwPlaceable:
DialogResRefis now correctly marked as nullable. - NwBaseItem:
DefaultIconis now correctly marked as nullable. - NwBaseItem:
DefaultModelis now correctly marked as nullable. - NwClass:
IconResRef,SpellTableColumnproperties are now correctly marked as nullable. - NwClass:
PreReqTableis now a nullable reference to a TwoDimArray wrapper of the associated class prereq table. - NwDomain:
Iconis now correctly marked as nullable. - NwFeat:
IconResRefis now correctly marked as nullable. - NwRace:
DefaultCharacterDescription,Description,Name,PluralNameproperties are now correctly marked as nullable. - NwSkill:
IconResRefis now correctly marked as nullable. - NwSpell:
CastGroundVisual,CastHandVisual,CastHeadVisual,CastSound,ConjureGroundVisual,ConjureHandVisual,ConjureHeadVisual,ConjureSound,IconResRef,ImpactScript,ProjectileModel,ProjectileSoundproperties are now correctly marked as nullable. - NativeObjectExtensions: Moved to
Anvil.Nativeto prevent missing method errors when using other extension overloads, and made public again. - ArrayWrapper: Added additional error checking.
- EnforceLegalCharacterService: Added 8 multiclass support.
- ServerLogRedirectorService: Don't log empty or null messages.
- ScriptDispatchService: Remove redundant try/catch, optimization.
- AnvilCore: Merged
VirtualMachineFunctionHandlerinto AnvilCore. - AnvilCore: Use better performant unmanaged function pointers for handling low level events from NWNX.
- AnvilCore: Implement custom crash handler with managed stacktrace.
IPRacialType- useNwRaceinstead.HitEffect.SlayRace- useNwRaceoverload instead.ItemProperty.ACBonusVsRace- useNwRaceoverload instead.ItemProperty.AttackBonusVsRace- useNwRaceoverload instead.ItemProperty.DamageBonusVsRace- useNwRaceoverload instead.ItemProperty.EnhancementBonusVsRace- useNwRaceoverload instead.ItemProperty.LimitUseByRace- useNwRaceoverload instead.DamageDataproperties - use GetDamageByType, SetDamageByType instead.
- EventService: Built-in game events subscribed in anvil will now preserve the event script identifier when calling the original script.
- ItemAppearance: Now correctly supports the extended appearance types added in 8193.35.
- NwArea:
GetTileInfonow correctly returns the correct tile when specifying a tile coordinate. - NwCreature: Fixed
ActionUseFeatsubFeat parameter not working. - EnforceLegalCharacterService: Fixed an erroneous calculation when calculating ability scores with a level stat bonus.
- WeaponService: Fixed a rare server crash when calculating levels for a specific class.
https://github.com/nwn-dotnet/Anvil/compare/v8193.35.0...v8193.35.1
- (Docker) Fixed an issue with libssl dependency.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.28...v8193.35.0
- DamageType: Added
CustomXXdamage type constants - EffectSubType: Added
Unyieldingsubtype. - EffectType: Added
Pacify,BonusFeat,TimeStopImmunity,ForceWalkeffects. - GuiEventType: Added
RadialOpen - GuiPanel: Added
Tile,Trigger,Creature,Item,Placeable,Door,Quickbarpanels. - PlayerDeviceProperty: Added various graphics properties.
- Effect: Added
BonusFeat,ForceWalk,Pacified,TimeStopImmunityeffect methods. - Effect: Added
LinkId,IgnoreImmunityproperties. - Location: Added
TileId,TileRotation,TileHeightproperties. - Location: Added
SetTile,SetTileAnimationLoopsmethods. - SQLQuery: Added
Resetmethod. - ModuleEvents.OnPlayerEquipItem: Added
Slotproperty. - ModuleEvents.OnPlayerGuiEvent: Added
Vectorproperty. - ModuleEvents.OnPlayerUnequipItem: Added
Slotproperty. - SpellEvents.OnSpellCast: Added
IsSpontaneousCast,SpellLevelproperties. - NwArea: Added
ReloadAreaGrass,ReloadAreaBorder,SetTiles,GetAreaLightColor,SetAreaLightColor,GetAreaLightDirection,SetAreaLightDirection,SetFogColormethods. - NwCreature: Added
ControllingPlayersetter. - NwCreature: Added
ActionUseFeat,GetSpellUsesLeft,SetEffectIconFlashingmethods - NwGameObject: Added
Usable,VisibleDistance,VisualTransform,UiDiscoveryFlagsproperties. - NwGameObject: Added
GetVisualTransformmethod with scope option. - NwGameObject: Added
ReplaceObjectAnimation,ClearObjectAnimationOverride,SetTextBubbleOverridemethods. - NwPlayer: Added
CameraFlags,ClientVersionCommitSha1properties. - NwPlayer: Added
AttachCamera,SetCameraLimits,SetShaderUniform,SetSpellTargetingDatamethods. - VisualTransform: Added
Clearmethod. - VisualTransformLerpSettings: Added
BehaviorFlags,Repeatsproperties. - DevastatingCriticalData: Added
Attackerproperty.
- NWNX: 2692ecb -> d44d373
- NWN.Core: 8193.34.15 -> 8193.35.6
- NWN.Native: 8193.34.5 -> 8193.35.6
- LightInject: 6.6.3 -> 6.6.4
- NLog: 5.1.3 -> 5.1.4
- !! Anvil now targets .NET 7. You may need to update your plugin's target framework to successfully compile against Anvil.
- !! HookService: NWNX and NWN.Native no-longer exposes a list of function addresses, and the address parameter has been removed from
RequestHook. The RequestHook now expects a delegate with theNativeFunctionattribute. See here for an example. - ItemAppearance: Update return values to support the extended part ranges introduced in 8193.35.
- NwPlayer:
ClientVersionnow includes the revision value of the client version. - NwPlayer:
EnterTargetModenow specifies a setting object that contains all new options added in 8193.35.
- ItemAppearanceArmorModel: Removed deprecated class.
- DoorEvents.OnDialogue: Removed deprecated class.
- PlaceableEvents.OnDialogue: Removed deprecated class.
- ItemAppearanceArmorModel: Removed deprecated class.
- Effect: Removed deprecated
EffectIconoverload. - ItemProperty: Removed deprecated
PropertyTypeproperty. - CreatureEvents.OnConversation: Removed deprecated
CurrentSpeakerproperty. - ModuleEvents.OnNuiEvent: Removed deprecated
WindowTokenproperty. - CreatureClassInfo: Removed deprecated
AddKnownSpell,GetKnownSpellCountByLevel,GetKnownSpells,RemoveKnownSpellmethods. - ItemAppearance: Removed deprecated
ClearArmorPieceColor,GetArmorModel,GetArmorPieceColor,SetArmorModel,SetArmorPieceColoroverloads. - NativeObjectInfoAttribute: Removed unused class.
- NwArea: Removed deprecated
GetFogAmount,GetFogColormethods. - NwGameObject: Removed deprecated
CreatureAppearanceTypeproperty. - NwGameObject: Remove
Destroy,PlaySoundByStrRefoverloads. - NwPlayer: Remove
ClearTlkOverride,CreateNuiWindow,NuiDestroy,NuiGetUserData,NuiGetWindowId,NuiSetUserData,SetTlkOverridemethods. - Color: Removed
ToIntmethod.
- (NWNX) Fixed an issue where nested VM scopes would cause an invalid stack and assertion error.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.27...v8193.34.28
- NwCreature: Fixed an issue where GetAssociates would return an empty list for certain associate types.
- VirtualMachine: Fix an issue where the context object would be incorrectly flagged as invalid.
- Creature.OnDeath: Support Area/Module as the killer of the creature.
- EventService: More reliable handling of game events.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.26...v8193.34.27
- NwCreature: Added
BodyBag,BodyBagTemplateproperties. - NwPlaceable: Added
IsBodyBagproperty.
- OnPlayerGuiEvent:
EffectIconproperty is now nullable. - OnDebugPlayVisualEffect:
Effectproperty is now nullable. - APIs that accept a
TableEntryparameter now have implicit casts (e.g.EffectIconTableEntry&EffectIcon).
- NwCreature: Fixed an infinite loop caused by the
Associatesproperty when having dominated creature associates. - Added some index/range checks for some usages of game table data.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.25...v8193.34.26
- NwGameTables: Added
EffectIconTable. - CreatureClassInfo: Added
School,KnownSpellsproperties. - CreatureLevelInfo: Added
AddedKnownSpells,RemovedKnownSpellsproperties.
- NWNX: 2692ecb -> d44d373
- NWN.Core: 8193.34.12 -> 8193.34.15
- NWN.Native: 8193.34.5 -> 8193.34.7
- Newtonsoft.Json: 13.0.2 -> 13.0.3
- NLog: 5.1.2 -> 5.1.3
- Paket.Core: 7.2.0 -> 7.2.1
- CollectionExtensions:
InsertOrderednow returns the index in which the item was inserted. - Anvil will now log a managed stack trace during an assertion failure. We're hoping this will help track down issues where the nwscript VM reports an invalid stack state.
CreatureClassInfo.AddKnownSpell- useCreatureClassInfo.KnownSpells[].Addinstead.CreatureClassInfo.RemoveKnownSpell- useCreatureClassInfo.KnownSpells[].Removeinstead.CreatureClassInfo.GetKnownSpellCountByLevel- useCreatureClassInfo.KnownSpells[].Countinstead.CreatureClassInfo.GetKnownSpells- useCreatureClassInfo.KnownSpellsinstead.
- Fixed null/empty script names not clearing object event scripts.
- Fixed an issue where an invalid script name could be assigned to an object event.
- Fixed a NRE in the
ModuleEvents.OnAcquireItemevent caused by characters failing ELC. - Fixed a cast exception in the
PlaceableEvents.OnDisturbedevent when the last inventory event was not caused by a creature. - NwStore: Fixed
WillNotBuyItems,WillOnlyBuyItemslists not removing items, and LINQ functions (ToList/ToArray) not working. - CreatureLevelInfo:
ClassInfonow returns the correct creature class. - ItemPropertyItemMapTable: Fixed some item property values returning valid when they shouldn't be.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.24...v8193.34.25
- Exposed
HomeStorageclass for accessing paths in anvil home. - Added support for creating
Cassowarysolvers throughnew Cassowary() - NwGameObject: Added
ActionJumpToLocationmethod. - Events: Added
OnPlayerQuickChatevent. - NwPlayer: Added object name override support (SetObjectNameOverride)
- NwPlayer: Added player-specific looping vfx support (AddLoopingVisualEffect)
- NwCreature: Added
LevelUpmethod that bypasses validation.
- NLog: 5.1.1 -> 5.1.2
- Microsoft.CodeAnalysis.CSharp: 4.4.0 -> 4.5.0
- Optional anvil services will now log a message when they are used.
- !! Fixed a memory leak when not using
Dispose()on engine structures. (Effect, Location, ItemProperty, Json, SQLQuery, Talent)
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.23...v8193.34.24
- Implemented AI message and listen system.
- NwGameObject: Added
IsListeningproperty. - NwGameObject: Added
SetListenPatternmethod. - NwCreature: Added
SetAssociateListenPatternsmethod. - OnConversation events: Added
ListenPattern,AssociateCommandproperties.
- NwGameObject: Added
- OnTrapTriggered: Added
TriggeredByproperty to door/placeable traps. - CreatureClassInfo: Added
Domainsarray for reading/modifying creature domains.
- NWN.Core: 8193.34.10 -> 8193.34.12
DoorEvents.OnDialogue- useDoorEvents.OnConversationinstead.PlaceableEvents.OnDialogue- usePlaceableEvents.OnConversationinstead.
- Fixed an issue with events that caused script handlers not to be called after reloading anvil.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.22...v8193.34.23
- Added
ANVIL_ENCODINGenvironment variable for specifying a custom encoding when converting native strings from nwserver. - Added
EncodingServicefor changing the server encoding at runtime. - NUI: Added StrRef support with
NuiBindStrRefandNuiValueStrReftypes. - Events: Added
OnDoorSetOpenStateevent. - Events: Added
OnObjectUseevent. - Extensions: Added
TryParseObjectextension for parsing object ID strings. - NwCreature: Added
GetInitiativeModifier,SetInitiativeModifier,ClearInitiativeModifiermethods. - NwCreature: Added
IsDMAvatarproperty. - NwCreature: Added
IsFlankingmethod. - NwDoor: Added
DoorOpenStateproperty. - NwRuleset: Added NwDomain ruleset table and replaced constant usages with table references.
- NwServer: Added
IsActivePausedproperty. - NwServer: Added
IsTimestopPausedproperty.
- Microsoft.CodeAnalysis.CSharp: 4.3.1 -> 4.4.0
- NWN.Core: 8193.34.7 -> 8193.34.10
- NWN.Native: 8193.34.4 -> 8193.34.5
- LightInject: 6.6.1 -> 6.6.3
- Newtonsoft.Json: 13.0.1 -> 13.0.2
- NLog: 5.0.5 -> 5.1.1
- Paket.Core: 7.1.5 -> 7.2.0
- NWNX: fe195ec -> 2692ecb
- Events:
OnSpellActionDomain and Feat is now nullable. - Events:
OnSpellInterruptDomain and Feat is now nullable. - Events:
OnSpellSlotMemorizeDomain is now nullable. System.Randomusages now use theSystem.Random.Sharedinstance, instead of individual instances.
- Fixed an issue where a GameObject or Player could become stuck in a hash-based collection when it became invalid.
- NwPlayer:
IsDMnow correctly returns true when a DM is possessing a creature. UseControlledCreature.IsDMfor the prior behaviour.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.21...v8193.34.22
- NLog: 5.0.4 -> 5.0.5
- OnSpellCast: Item, Spell and TargetObject can be null.
- NwItem:
Clone()now preserves the item'sDroppableflag. An optional parameter is provided to keep the old behaviour.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.20...v8193.34.21
- NwAreaOfEffect: Added
Radiusproperty.
- NWNX: 8faa9d4 -> fe195ec
- OnSpellCast:
CasterandTargetObjectnow correctly useNwObjectas the event data type.
- Fixed a server crash when a module or area attempted to cast a spell.
- Fixed an edge case where a deleted player's TURD would not be deleted.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.19...v8193.34.20
- CollectionExtensions: Added IList
AddRangeextension. - NwCreature: Added
IsBarteringproperty. - NwObject: Added
TryGetUUIDmethod. - NwObject: Added
SerializeToJsonmethod. - NwStore: Added
BuyStolenGoods,MarkDown,MarkDownStolen,MarkUp,WillNotBuyItems,WillOnlyBuyItemsproperties.
- LightInject: 6.5.1 -> 6.6.1
- Exposed Json engine structure.
- VirtualMachine: Fixed an issue where ObjectSelf would not be correctly assigned.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.18...v8193.34.19
- Events: Added
OnLoadCharacterFinishevent.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.17...v8193.34.18
- Fix an InvalidOperationException being thrown when checking player for equality.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.16...v8193.34.17
- NwCreature: Added
SittingObjectproperty. - NwArea: Added
LoadScreenproperty. - ResourceManager: Added
CreateResourceDirectory.
- NwBaseItem: Fixed
ItemClassreturning a type name instead of the item class name. - Fixed a rare compile issue when using
ToNwObjectcaused by exposed native types.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.15...v8193.34.16
- Events: Added
OnDebugPlayVisualEffect,OnDebugRunScript,OnDebugRunScriptChunkevents. - NwGameObject: Added
AnimationState. - Effect: Added
Effect.VisualEffect(VisualEffectTableEntry, bool, float, Vector3, Vector3)overload.
- NWN.Core 8193.34.6 -> 8193.34.7
- LightInject 6.4.1 -> 6.5.1
- NLog 5.0.1 -> 5.0.4
- NWNX 5ade7de -> 8faa9d4
- SchedulerService: Use
PriorityQueueto improve main server loop performance.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.14...v8193.34.15
- ItemProperty: Added
SubTypeTable.
- Fixed
CalculateValidItemsForPropertyreturning false for base items using column 0.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.13...v8193.34.14
- NuiText: Added
BorderandScrollbarsproperties. - ItemProperty: Added properties for referencing 2da data.
- ItemProperty: Added Create() factory method overload using the new table class types.
- NwGameTables: Added
ItemPropertyTable,ItemPropertyItemMapTable,ItemPropertyCostTables,ItemPropertyParamTables
- BREAKING CHANGE: TwoDimArrays must now be initialized via
NwGameTables.GetTable.
- Fixed a server crash when using TwoDimArray after the native array structure was evicted from the 2da cache.
- Fixed updating the weight of a equipped item with
NwItem.Weightnot correctly updating creature weight and encumbrance. - Fixed
NwBaseItem.ArmorCheckPenaltyreturning an unsigned integer.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.12...v8193.34.13
- NLog 5.0.0 -> 5.0.1
- NWN.Core 8193.34.5 -> 8193.34.6
- NWNX 95e700a -> 5ade7de
- NUI: DrawList is now supported on all NUI elements, instead of just layout elements.
- NUI: NuiGroup now supports a non-layout element.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.11...v8193.34.12
- NwGameTables: Exposed armor (armor.2da) and parts (parts_*.2da) tables.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.10...v8193.34.11
- NwCreature: Added
GetSlotFromItem - NwCreature: Added
RunEquip(item, EquipmentSlots) - ItemAppearance: Added
ChangeAppearance - NuiWindowToken: Added
Get/SetUserData() - Effect: Added
SkillIncreaseAll,SkillDecreaseAll
- NWNX 4842f60 -> 95e700a
- NWN.Native 8193.34.3 -> 8193.34.4
- NWN.Core 8193.34.4 -> 8193.34.5
- NLog 4.7.15 -> 5.0.0
ItemAppearanceArmorModelenum. UseCreaturePartinstead.NwPlayer.NuiDestroy. UseNuiWindowToken.Closeinstead.NwPlayer.NuiGetUserData. UseNuiWindowToken.NuiGetUserDatainstead.NwPlayer.NuiSetUserData. UseNuiWindowToken.NuiSetUserDatainstead.NwPlayer.NuiGetWindowId. UseNuiWindowToken.NuiGetWindowIdinstead.
- Fixed
NwGameObject.Locationsetter not working for newly deserialized game objects. - Fixed a crash when an equipped item was sent to limbo with
NwModule.MoveObjectToLimbo. - Fixed
NuiWindowToken.WindowIdreturning an empty string from events. - Speculative fix for a rare native crash when fetching 2da strings.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.9...v8193.34.10
- Added ClientVersion/ClientPlatform properties to OnClientConnect event.
- NWNX 3227d60 -> 4842f60
- NWN.Core 8193.34.3 -> 8193.34.4
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.8...v8193.34.9
- NwCreature - Added setters for base armor & shield arcane spell failure
NuiWindowToken- small structure with helper methods for controlling NuiWindow instances. Can be created fromNwPlayer.TryCreateNuiWindow- NwCreature - Added getter for BaseAttackCount
- NwCreature - Added setter for ChallengeRating.
- Paket 7.1.4 -> 7.1.5
NwCreature.Positionwill no-longer block the action queue from being modified.- This fixes inconsistencies with actions queued after setting the position, but the new position can sometimes not apply for players using drive mode.
- For players, it is recommended to immobilize them before setting their position.
NwPlayer.TryCreateNuiWindow- use theNuiWindowTokenoverload instead.NwPlayer.CreateNuiWindow- useTryCreateNuiWindowinstead.ModuleEvents.OnNuiEvent.WindowToken- useModuleEvents.OnNuiEvent.Tokeninstead.
- Fixed
NwGameObject.Locationsetter re-triggering Area Enter events. - Fixed
NwPlayer.PartyMembersthrowing a NRE when a party contained associate creatures. - Fixed a typo in PlayOptions.OnePartyOnly.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.7...v8193.34.8
NwObject.Destroy(float delay)- Use the non-delay overload instead, with theSchedulerService.
- Fixed
NwEncounter.Destroy()not destroying the encounter object. - Fixed
PlaceableEvents.OnPhysicalAttackedevent always returning no data.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.6...v8193.34.7
- NWNX 6a552d9 -> 3227d60
- Fixed an edge case issue that caused some servers to enter an infinite crash loop when shutting down.
- Fixed
NWNX_CORE_SHUTDOWN_SCRIPTthrowing a NRE during shutdown.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.5...v8193.34.6
- Added
Colorequality membersEqualsand operators==!= NwGameTables: AddedExpTableNwGameTables: AddedSkillItemCostTable
- Paket.Core 7.0.2 -> 7.1.4
- NWNX d15bc22 -> 6a552d9
- Fixed an issue that prevented .NET 6 plugins from being loaded with Paket.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.4...v8193.34.5
NwCreature.Encounter: Gets the encounter that spawned the creature.NwAreaOfEffect.Spell: Gets the spell that created the area of effect.NwAreaOfEffect.RemainingDuration: Gets the remaining duration on the area of effect.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.3...v8193.34.4
- Fixed an issue where API services would not be constructed in the expected order.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.2...v8193.34.3
StrRef.ToParsedString(): Gets the string associated with a StrRef and parses any tokens (e.g. <CUSTOM0>)StrTokenCustom: New structure for resolving/setting custom token values.NwGameTables: Added new 2da tablesBodyBagTableLightColorTablePlaceableSoundTablePlaceableTableProgrammedEffectTableVisualEffectTable
NwArea: AddedGetTileInfo()- Added
InjectionService&ServiceBindingtests. NwPlaceable.Appearance: Gets or sets the appearance for the placeable.ModuleLoadTracker: Added core service for tracking module load progress as debug log messages.- If a module fails to load due to an error with an area, the area is logged as an error instead.
NwPlayer: Added player name override methods.PlayerNameOverrideServicecontains configuration options.
NwCreature: AddedGetFeatRemainingUsesGetFeatTotalUsesSetFeatRemainingUses- Added
OnMapPinAddPin,OnMapPinChangePin,OnMapPinDestroyPinevents. NwCreature: Added damage level override functions (ClearDamageLevelOverride,GetDamageLevelOverride,SetDamageLevelOverride)NwCreature: AddedDamageLevelproperty.NwGameTables: AddedDamageLevelTable
- NWNX c51d233 -> d15bc22
- NWN.Core 8193.34.2 -> 8193.34.3
- LightInject 6.4.0 -> 6.4.1
- NLog 4.7.13 -> 4.7.15
- Paket.Core 6.2.1 -> 7.0.2
- Rewrote core services and initialisation logic for easier extensibility, and reduced coupling with AnvilCore.
- All core services now implement
ICoreService, an interface containing specific event functions that are called at specific times in the server lifecycle. - Core services are executed in the order defined by
ServiceBindingOptions. - The CoreService composition root is defined in
AnvilServiceManager. - AnvilCore is now "dumber", and simply passes signals to
AnvilServiceManagerandVirtualMachineFunctionHandler. AnvilServiceManagermerges service initialization inAnvilCore, with the container/composition root setup fromIContainerFactory
- All core services now implement
OnPlayerDeath.Killernow tries toGetLastDamagerwhenGetLastHostileActoris invalid.
NwGameObject.CreatureAppearanceType. UseNwCreature.Appearanceinstead.- APIs using int-based StrRef parameters have been deprecated. Please use the StrRef overloads:
NwGameObject.PlaySoundByStrRef()NwPlayer.ClearTlkOverride()NwPlayer.SetTlkOverride()NwBaseItem.BaseItemStatsTextNwBaseItem.DescriptionNwBaseItem.NameNwClass.DescriptionNwClass.NameNwClass.NameLowerNwClass.NamePluralNwFeat.DescriptionNwFeat.NameNwSkill.DescriptionNwSkill.NameNwSpell.AltMessageNwSpell.DescriptionNwSpell.NameOnELCValidationFailure.StrRef
- Fixed a stack overflow when injecting the
InjectionServiceas a property dependency. - Unload is now triggered on all plugins before waiting for the assemblies to be unloaded. This fixes some edge cases where assemblies would not unload.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.1...v8193.34.2
- Added net6.0 target framework. Since multiple frameworks are now being targeted, there is a small change to the binary output paths.
- When building locally, binaries are now located in
NWN.Anvil/bin/Release/<framework>. Release binaries on github will now have a folder for each framework.
- When building locally, binaries are now located in
NwColor: AddedFromRGBA,ToRGBAToUnsignedRGBAmethods.ToStringis now more explicit.- Added various tests for
Colorconversion. - Added
ResourceManagertests. NwArea: Added various properties for environment visual options and metadata.NwArea: AddedCreateEnvironmentPreset,ApplyEnvironmentPresetfor saving and loading preset visual options.NwWaypoint.Create: Added overload without template parameter for creating a general waypoint.PlayOptions: Added PlayerPartyControl option.StrRef: Added value structure for string references (StrRefs). The associated talk table string can be resolved by invokingToString.NwGameTables: Contains static members for commonly used 2das (internally cached byCTwoDimArrays).- Implemented
AppearanceTable&EnvironmentPresetTable
- Implemented
- Implemented new
TwoDimArray,TwoDimArrayEntryandITwoDimArrayEntryAPIs.- Supports general usage through
TwoDimArray, and a genericTwoDimArray<T>type for specifying a custom row format. See the docs for more info.
- Supports general usage through
ResourceManager: AddedDeleteTempResourceandGetResourceText.ResourceManager: Added string overload forWriteTempResource.LocalVariableStruct: Added local variable type for serializing any C# type to JSON.PersistentVariableStruct: Added persistent variable type for serializing any C# type to JSON.- Added
OnTriggerEnterevent.
- NWNX: 790a54b -> c51d233
- NWN.Core: 8193.34.1 -> 8193.34.2
- NWN.Native: 8193.34.2 -> 8193.34.3
- Change test assertion pattern to use NUnit constraints: https://docs.nunit.org/artcles/nunit/writing-tests/assertions/assertion-models/constraint.html
- Code samples are now built as a separate plugin project, and included in CI analysis.
- Improved path validation for
Delete/WriteTempResource. It should no-longer be possible to navigate outside of the resource folder.
NwServer.ReloadRules(). UseNwRuleset.ReloadRules()instead.NwColor.ToInt(). UseNwColor.ToRGBA()instead.ITwoDimArray/TwoDimArrayFactory: The 2da APIs have been superseded by a simpler API. See theITwoDimArrayEntryexample for more info.NwArea.GetFogAmount: UseSunFogAmountandMoonFogAmountinstead.NwArea.GetFogColor: UseSunFogColorandMoonFogColorinstead.
- NuiColor was removed and functionality replaced with the standard
Colorclass. The intention is to remove confusion and conversion issues when interacting with both types.
- Fixed a NRE when using visibility properties.
- Fixed a NRE when using
PersistentVariableEnum.
https://github.com/nwn-dotnet/Anvil/compare/v8193.34.0...v8193.34.1
- NwPlayer:
IsConnectedboolean added. Should be checked when enumeratingNwModule.Players - NwPlayer: Added
DMPossessCreatureandUnpossessCreaturefor controlling player creature. - NwPlayer:
ForceExaminenow supports creatures, placeables, items and doors. - Implemented
NWN.Anvil.TestRunnerfor running automated tests. - NwPlayer: Added
Get/SetPersonalVisibilityOverridemethods for customizing object visibility per player. - NwGameObject: Added
VisibilityOverrideproperty for customizing object visibility globally. - Creature Events: Added
OnCreatureCheckProficienciesevent. - Added
Local/Campaign/PersistentVariableEnum<T>object variable type for user enum types. The underlying type must be an integer. - NwGameObject: Added
Clonemethod for cloning non-creature and item objects. - NwDoor: Added
Createmethod for creating doors from ResRefs. - NwEncounter: Added
Createmethod for creating encounters from ResRefs. - NwSound: Added
Createmethod for creating sound objects from ResRefs. - NwTrigger: Added
Createmethod for creating triggers from ResRefs. - NWN.Anvil.TestRunner: Added generator for generating ResRef constants from the standard creator palette.
- NWN.Core: 8193.34.0 -> 8193.34.1
NwCreature.WalkRateCapandNwCreature.AlwaysWalkproperties are no-longer persistent. Additionally, the services and functions are not hooked until the associated property is used for the first time.NwObject.ObjectIdis now public.
AnvilCore.Reload()now uses the scheduler service to schedule the reload. This should fix some edge cases where async methods would hold a reference preventing unload.- Fixed an issue where the
SchedulerServicewould throw an exception if the server was shutdown/reloaded during a schedule callback. - Fixed a rare crash when subscribed to effect events.
https://github.com/nwn-dotnet/Anvil/compare/v8193.33.5...v8193.34.0
NwBaseItem: Added various properties.NwSpell: Added various properties.NwClass: Added various properties.- Added support for
NuiList&NuiListTemplateCell. Effect.DurationType: Added setter.- Added assembly attribute
PluginInfofor defining optional dependencies. PluginManager: Added check for missing types from optional plugins.
- (Docker) NWNX: 16b2c88 -> 790a54b
- NWN.Core: 8193.33.4 -> 8193.34.0
- NWN.Native: 8193.33.4 -> 8193.34.2
- Services implementing
IInitializableare now executed in deterministic order based on the service binding order defined inServiceBindingOptions. - Updated APIs to use ruleset classes
Effect.SkillDecrease(NwSkill,int)Effect.SkillIncrease(NwSkill,int)Effect.SpellItemProperty.DecreaseSkill(NwSkill,int)ItemProperty.SkillBonus(NwSkill,int)Talent.FeatTalent.SkillTalent.SpellNwSkill.ToTalent(this NwSkill)NwSkill.ToTalent(this NwSpell)NwSkill.ToTalent(this NwFeat)CreatureEvents.OnSpellCastAt.SpellCreatureEvents.OnSpellCastAt.Signal(NwObject,NwCreature,NwSpell,bool)DoorEvents.OnSpellCastAt.SpellDoorEvents.OnSpellCastAt.Signal(NwObject,NwDoor,NwSpell,bool)ModuleEvents.OnPlayerGuiEvent.FeatSelectionModuleEvents.OnPlayerGuiEvent.SkillSelectionPlaceableEvents.OnSpellCastAt.SpellPlaceableEvents.OnSpellCastAt.Signal(NwObject,NwPlaceable,NwSpell,bool)OnDisarmWeapon.FeatOnUseFeat.FeatOnUseSkill.SkillOnSpellAction.FeatOnSpellAction.SpellOnSpellBroadcast.FeatOnSpellBroadcast.SpellOnSpellCast.SpellOnSpellInterrupt.FeatOnSpellInterrupt.SpellOnSpellSlotMemorize.SpellSpellEvents.OnSpellCast.SpellSpellEvents.OnSpellCast.SpellCastClassCreatureClassInfo.ClassCreatureClassInfo.AddKnownSpell(NwSpell,byte)CreatureClassInfo.ClearMemorizedKnownSpells(NwSpell)CreatureClassInfo.GetKnownSpells(byte)CreatureClassInfo.RemoveKnownSpell(byte,NwSpell)CreatureLevelInfo.ClassCreatureLevelInfo.FeatsCreatureLevelInfo.GetSkillRank(NwSkill)CreatureLevelInfo.SetSkillRank(NwSkill,sbyte)CreatureTypeFilter.Class(NwClass)CreatureTypeFilter.DoesNotHaveSpellEffect(NwSpell)CreatureTypeFilter.HasSpellEffect(NwSpell)MemorizedSpellSlot.SpellNwCreature.ClassesNwCreature.FeatsNwCreature.ActionCastFakeSpellAt(NwSpell,Location,ProjectilePathType)NwCreature.ActionCastFakeSpellAt(NwSpell,NwGameObject,ProjectilePathType)NwCreature.ActionUseFeat(NwFeat,NwGameObject)NwCreature.ActionUseSkill(NwSkill,NwGameObject,SubSkill,NwItem)NwCreature.AddFeat(NwFeat)NwCreature.AddFeat(NwFeat,int)NwCreature.DecrementRemainingFeatUses(NwFeat,int)NwCreature.DoSkillCheck(NwSkill,int)NwCreature.GetClassDomains(NwClass)NwCreature.GetClassInfo(NwClass)NwCreature.GetFeatGainLevel(NwFeat)NwCreature.GetSkillRank(NwSkill,bool)NwCreature.GetSpecialization(NwClass)NwCreature.HasFeatEffect(NwFeat)NwCreature.HasFeatPrepared(NwFeat)NwCreature.HasSkill(NwSkill)NwCreature.HasSpellEffect(NwSpell)NwCreature.HasSpellUse(NwSpell)NwCreature.IncrementRemainingFeatUses(NwFeat,int)NwCreature.KnowsFeat(NwFeat)NwCreature.LevelUpHenchman(NwClass,PackageType,bool)NwCreature.MeetsFeatRequirements(NwFeat)NwCreature.RemoveFeat(NwFeat)NwCreature.SetSkillRank(NwSkill)NwGameObject.ActionCastSpellAt(NwSpell,NwGameObject,MetaMagic,bool,int,ProjectilePathType,bool)NwGameObject.ActionCastSpellAt(NwSpell,Location,MetaMagic,bool,int,ProjectilePathType,bool)SpecialAbility(NwSpell,byte,bool)SpecialAbility.SpellOnELCSkillValidationFailure.SkillOnELCSkillValidationFailure.FeatOnELCSkillValidationFailure.SpellWeaponService.Add***Feat(NwBaseItem,NwFeat)
CursorTargetService.EnterTargetMode- Use NwPlayer.EnterTargetMode/NwPlayer.TryEnterTargetMode instead.
Effect.AreaOfEffect(int,string,string,string)AttributeExtensionsStandardFactionExtensionsCreatureTypeFilter.RacialTypeInventory.CheckFit(BaseItemType)NwCreature.RacialTypeNwCreature.ChangeToStandardFactionNwItem.BaseItemTypeNwItem.CanStackNwItem.IsStackableNwPlayer.NuiSetGroupLayout(int,string,NuiGroup)NwPlayer.NuiSetGroupLayout(int,string,NuiWindow)NwFaction(int)Anvil.Services.NwDateTimeLoopTimeServiceServiceBindingOptions.MissingPluginDependenciesServiceBindingOptions.Order
https://github.com/nwn-dotnet/Anvil/compare/v8193.33.4...v8193.33.5
- NwModule: Added
LimboGameObjectsproperty to list all GameObjects currently stored in limbo. - NwModule: Added
MoveObjectToLimbomethod to remove a GameObject from an area and store it in limbo. - NwCreature: Added
AlwaysWalkandWalkRateCapfor restricting creature & player movement. - Added
OnCheckEffectImmunityevent for bypassing effect immunity checks. - Added
OnEffectApplyandOnEffectRemoveevents. - Added ruleset APIs:
NwRuleset,NwBaseItem,NwClass,NwFeat,NwRaceNwSkillandNwSpell
- Migrated LoopTimeService properties to static class
Anvil.API.Time. - Exposed
ScheduledTaskto Scheduler Service. - Services implementing
IUpdateableare now executed in deterministic order based on the service binding order defined inServiceBindingOptions.
LoopTimeService- useAnvil.API.Timeinstead.- Moved
NwDateTimeandNwTimeSpantoAnvil.APInamespace. - Duplicated APIs
NwItem.CanStack/NwItem.IsStackable. UseNwBaseItem.IsStackableinstead.
https://github.com/nwn-dotnet/Anvil/compare/v8193.33.3...v8193.33.4
- (Docker) Update NWNX to 16b2c88.
- Startup log now includes the git revision of the current running server binary.
- Server revision is now printed to stdout if startup fails.
https://github.com/nwn-dotnet/Anvil/compare/v8193.33.2...v8193.33.3
- Implemented
PaketPluginSourcefor installing and running NuGet-based plugins. - Implemented support for custom plugin sources with the
IPluginSourceinterface. - Implemented
PluginStorageService- a unified API for storing plugin data and configurations. - Added
ANVIL_HOMEenvironment variable. This variable defines the root path where Anvil config files, plugins and plugin data are read from. - Added additional properties to
NwEncounter. - Added IsStackable to 'NwItem'
- NWN.Core -> 8193.33.4
- NWN.Native -> 8193.33.4
- BREAKING CHANGE - Removed
ANVIL_NLOG_CONFIGenvironment variable. The config path is now fixed to{ANVIL_HOME}/nlog.config - BREAKING CHANGE - Removed
ANVIL_PLUGIN_PATHenvironment variable. The plugin load path is now fixed to{ANVIL_HOME}/Plugins
- Fixed a server crash when preventing player connections in the
OnClientConnectevent. - Fixed
OnClientConnect.CDKeyreturning a type name instead of the client's public CD key.
https://github.com/nwn-dotnet/Anvil/compare/v8193.33.1...v8193.33.2
- ResourceManager: Implemented GffResource API.
- [Inject]: Property-based dependencies can now be flagged as "Optional". Optional dependencies do not throw exceptions if the service could not be loaded from a missing plugin assembly.
[ServiceBindingOptions]- TheBindingPriorityproperty defines the initialization order of a service. (Higher priority = initialized first).- When injecting a dependency of an interface/base class and multiple candidates are available, the service with the highest
BindingPrioritywill be injected. NwCreature.Agecan now be set.
[ServiceBindingOptions]-Orderhas been deprecated and replaced with theBindingPriorityproperty.[ServiceBindingOptions]-MissingPluginDependencieshas been deprecated as functionality is covered by theBindingPrioritydependency resolve behaviour.AttributeExtensions- moved toReflectionExtensions.NwPlayer.NuiSetGroupLayout- moved toNuiGroup.SetLayout.
- Properties injected into service classes with plugin dependency requirements will no-longer throw an exception when the assembly is missing.
- Fixed NuiGroup.SetLayout creating nested layout elements instead of updating the existing element (
NwPlayer.NuiSetGroupLayoutstill has the old behaviour.)
https://github.com/nwn-dotnet/Anvil/compare/v8193.33.0...v8193.33.1
- Update to NWN.Core 8193.33.1
- Fixed an issue when retrieving bind values for certain class/structures (NuiRect, NuiVector, etc.) would return the default value.
- Fixed an incorrect API/object mapping for NuiDrawList.
https://github.com/nwn-dotnet/Anvil/compare/v8193.26.3...v8193.33.0
- NUI: Implement API with classes, added methods to NwPlayer.
- Effect: Added
Effect.Icon()factory method for creating Icon effects. - Effect: Added
Effect.RunAction()factory methods for creating effects that invoke C# actions. - ScriptHandleFactory: New service for dynamically creating function callbacks at runtime that are bound to script names. The returned handle is currently used for script parameters in effects.
- ModuleEvents: Added
OnPlayerGuiEvent,OnNuiEventandOnPlayerTargetevents. - GUIPanel: Added new constants published with NWN 8193.31
- NwPlayer: Added
SetGuiPanelDisabledfor disabling built-in GUI elements. - NwPlayer: Added
RestDurationOverrideproperty. - VirtualMachine: Added
RecursionLevelproperty. - LocalVariableCassowary: Added to support cassowary local variables.
- ILateDisposable: Added a new service event interface that is invoked after the server is destroyed.
- ServiceBindingOptions: Added
PluginDependenciesandMissingPluginDependenciesproperties for setting up services with optional plugin dependencies. - Added
PRELINK_ENABLEDsetting for disabling native prelink checks.
- Refactored various internal usages of NWN.Native to use collection/list accessors for native types.
- VirtualMachine:
IsInScriptContextnow checks the current executing thread, and now only returns true while on the main thread and inside of a VM script context. - HookService: Hooks are now returned/disposed after the server has been destroyed.
- IScriptDispatcher: Custom Script Dispatchers must now define an execution order. This order is used when a script call is triggered from the VM, and determines which service/s implementing this interface get executed first.
- ObjectStorageService (Breaking): Persistent data written in Anvil can no-longer be accessed by NWNX. Anvil can still import NWNX persistent data.
- ObjectStorageSerive: Anvil no-longer writes a duplicate
NWNX_POSserialized field and instead writes its ownANVIL_POSfield for persistent object data.
- Effect: Deprecated
Effect.AreaOfEffectthat uses strings for the script handlers. Use the overload that usesScriptCallbackHandleparameters instead.
- HookService: Removed the optional
shutdownDisposeparameter (superseded byILateDisposable). - AnvilCore: Removed custom
ITypeLoadersupport, and hardcoded references to the updatedPluginManager.
- Fixed an issue where the
ObjectStorageServicewould cause errors when performing hot reloads withAnvilCore.Reload() - Fixed an issue where the PluginLoader would attempt to unload plugins too early during server shutdown/hot reload.
- Fixed an issue where the
EnforceLegalCharacterServicewould call theELCValidationBeforeevent outside of a script context. - Fixed
OnChatMessageSend.Targetalways being null. - Fixed Plugin Unloadability & Hot Reload.
- Fixed a native crash caused by a conflict with Anvil's
ObjectStorageServiceand NWNX's Object Storage (POS).
https://github.com/nwn-dotnet/Anvil/compare/v8193.26.2...v8193.26.3
- OnCreatureDamage: Fixed damage hook function returning void instead of an int. Resolves an issue where damage effects would persist on a character, and be applied again after login.
https://github.com/nwn-dotnet/Anvil/compare/v8193.26.1...v8193.26.2
- IEvent: Exposed "Context" property, allowing plugins to implement custom events.
https://github.com/nwn-dotnet/Anvil/compare/v8193.26.0...v8193.26.1
- OnCreatureDamage: Fixed a server crash when a creature received damage from non-object sources. (EffectDamage from a module/area event, etc.)