private CNWSItem?GetEquippedWeapon(CNWSCreature creature, bool offHand) { CNWSItem weapon; if (offHand) { weapon = creature.m_pInventory.GetItemInSlot((uint)EquipmentSlot.LeftHand); if (weapon == null) { CNWSItem main = creature.m_pInventory.GetItemInSlot((uint)EquipmentSlot.RightHand); if (main != null) { CNWBaseItem baseWeapon = NWNXLib.Rules().m_pBaseItemArray.GetBaseItem((int)main.m_nBaseItem); if (baseWeapon != null && baseWeapon.m_nWeaponWield == 8) { weapon = main; } } } } else { weapon = creature.m_pInventory.GetItemInSlot((uint)EquipmentSlot.RightHand); } return(weapon); }
private float OnMaxAttackRange(void *pCreature, uint oidTarget, int bBaseValue, int bPassiveRange) { CNWSCreature creature = CNWSCreature.FromPointer(pCreature); CNWSItem equippedItem = creature.m_pInventory.GetItemInSlot((uint)EquipmentSlot.RightHand); if (equippedItem != null) { uint baseItemType = equippedItem.m_nBaseItem; CNWBaseItem baseItem = NWNXLib.Rules().m_pBaseItemArray.GetBaseItem((int)baseItemType); if (baseItem != null && baseItem.m_nWeaponRanged > 0 && maxRangedAttackDistanceOverrideMap.TryGetValue(baseItemType, out MaxRangedAttackDistanceOverride distanceOverride)) { return(bPassiveRange.ToBool() ? distanceOverride.MaxRangedPassiveAttackDistance : distanceOverride.MaxRangedAttackDistance); } } return(creature.DesiredAttackRange(oidTarget, bBaseValue) + 1.5f); }
internal NwBaseItem(uint baseItemId, CNWBaseItem baseItemInfo) { Id = baseItemId; BaseItemInfo = baseItemInfo; }