public override void DumpCondition(LuaTextWriter output)
        {
            if (Inverted)
            {
                output.Write("not (");
            }

            void WriteFilter()
            {
                output.WriteStartFunction("ability");
                output.Write("if ability.Category ~= ");
                output.WriteValue(Category);
                output.Write(" then return false end\n");
                if (NotTypes.Any())
                {
                    output.Write("if ability.IsAnyType(");
                    output.WriteValues(NotTypes);
                    output.Write(") then return false end\n");
                }

                foreach (var name in NotNames)
                {
                    output.Write("if ability.Name == ");
                    output.WriteValue(name);
                    output.Write(" then return false end\n");
                }

                if (Types.Any())
                {
                    output.Write("if ability.IsAnyType(");
                    output.WriteValues(Types);
                    output.Write(") then return true end\n");
                }

                foreach (var name in Names)
                {
                    output.Write("if ability.Name == ");
                    output.WriteValue(name);
                    output.Write(" then return true end\n");
                }
                output.Write("return false\n");
                output.WriteEndFunction();
            }

            if (Count == 1)
            {
                output.Write("character.HasAnyAbility(");
                WriteFilter();
                output.Write(")");
            }
            else
            {
                output.Write(Count.ToString());
                output.Write(" <= character.CountAbilities(");
                WriteFilter();
                output.Write(")");
            }

            if (Inverted)
            {
                output.Write(")");
            }
        }