Exemplo n.º 1
0
        /// Add classes to a skill feat instead of working with the NWNX_SkillRanks_SkillFeat::sClasses string.
        ///
        /// Manipulating the sClasses string in the NWNX_SkillRanks_SkillFeat struct can be difficult. This
        /// function allows the builder to enter one class at a time.
        /// <param name="skillFeat">The NWNX_SkillRanks_SkillFeat for which the sClasses field will be modifier.</param>
        /// <param name="iClass">The class to add to the Skill Feat.</param>
        /// <returns>The updated NWNX_SkillRanks_SkillFeat.</returns>
        public static SkillFeat AddSkillFeatClass(SkillFeat skillFeat, int iClass)
        {
            VM.NWNX.SetFunction(NWNX_SkillRanks, "AddSkillFeatClass");
            VM.NWNX.StackPush(iClass);
            VM.NWNX.StackPush(skillFeat.iSkill);
            VM.NWNX.StackPush(skillFeat.iFeat);
            VM.NWNX.StackPush(skillFeat.iModifier);
            VM.NWNX.StackPush(skillFeat.iFocusFeat);
            VM.NWNX.StackPush(skillFeat.sClasses);
            VM.NWNX.StackPush(skillFeat.fClassLevelMod);
            VM.NWNX.StackPush(skillFeat.iAreaFlagsRequired);
            VM.NWNX.StackPush(skillFeat.iAreaFlagsForbidden);
            VM.NWNX.StackPush(skillFeat.iDayOrNight);
            VM.NWNX.StackPush(skillFeat.bBypassArmorCheckPenalty);
            VM.NWNX.StackPush(skillFeat.iKeyAbilityMask);
            VM.NWNX.Call();
            SkillFeat retVal;

            retVal.iKeyAbilityMask          = VM.NWNX.StackPopInt();
            retVal.bBypassArmorCheckPenalty = VM.NWNX.StackPopInt();
            retVal.iDayOrNight         = VM.NWNX.StackPopInt();
            retVal.iAreaFlagsForbidden = VM.NWNX.StackPopInt();
            retVal.iAreaFlagsRequired  = VM.NWNX.StackPopInt();
            retVal.fClassLevelMod      = VM.NWNX.StackPopFloat();
            retVal.sClasses            = VM.NWNX.StackPopString();
            retVal.iFocusFeat          = VM.NWNX.StackPopInt();
            retVal.iModifier           = VM.NWNX.StackPopInt();
            retVal.iFeat  = VM.NWNX.StackPopInt();
            retVal.iSkill = VM.NWNX.StackPopInt();
            return(retVal);
        }
Exemplo n.º 2
0
 /// Modifies or creates a skill feat.
 /// <param name="skillFeat">The defined NWNX_SkillRanks_SkillFeat.</param>
 /// <param name="createIfNonExistent">TRUE to create if the feat does not exist.</param>
 public static void SetSkillFeat(SkillFeat skillFeat, int createIfNonExistent = NWScript.FALSE)
 {
     VM.NWNX.SetFunction(NWNX_SkillRanks, "SetSkillFeat");
     VM.NWNX.StackPush(createIfNonExistent);
     VM.NWNX.StackPush(skillFeat.iSkill);
     VM.NWNX.StackPush(skillFeat.iFeat);
     VM.NWNX.StackPush(skillFeat.iModifier);
     VM.NWNX.StackPush(skillFeat.iFocusFeat);
     VM.NWNX.StackPush(skillFeat.sClasses);
     VM.NWNX.StackPush(skillFeat.fClassLevelMod);
     VM.NWNX.StackPush(skillFeat.iAreaFlagsRequired);
     VM.NWNX.StackPush(skillFeat.iAreaFlagsForbidden);
     VM.NWNX.StackPush(skillFeat.iDayOrNight);
     VM.NWNX.StackPush(skillFeat.bBypassArmorCheckPenalty);
     VM.NWNX.StackPush(skillFeat.iKeyAbilityMask);
     VM.NWNX.Call();
 }
 public static void SetSkillFeat(SkillFeat skillFeat, bool createIfNonExistent = false)
 {
     Internal.NativeFunctions.nwnxSetFunction(PLUGIN_NAME, "SetSkillFeat");
     Internal.NativeFunctions.nwnxPushInt(createIfNonExistent ? 1 : 0);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.keyAbilityMask);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.bypassArmorCheckPenalty);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.dayOrNight);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.areaFlagsForbidden);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.areaFlagsRequired);
     Internal.NativeFunctions.nwnxPushFloat(skillFeat.classLevelMod);
     // We only need to send the string from the point of the first set bit
     Internal.NativeFunctions.nwnxPushString(
         skillFeat.classes !.Substring(skillFeat.classes !.Length - skillFeat.classes !.IndexOf("1"),
                                       skillFeat.classes.Length));
     Internal.NativeFunctions.nwnxPushInt(skillFeat.focusFeat);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.modifier);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.feat);
     Internal.NativeFunctions.nwnxPushInt(skillFeat.skill);
     Internal.NativeFunctions.nwnxCallFunction();
 }