Пример #1
0
    public NPC SpawnNPC(GridSpace g, GenericFlags <SpawnKeywords> keywords)
    {
        LeveledPool <NPC> pool = GetPool(keywords);
        NPC n;

        if (!pool.Get(Probability.SpawnRand, out n, BigBoss.Player.Level))
        {
            throw new ArgumentException("NPC Pool was empty for keywords: " + keywords);
        }
        return(SpawnNPC(g, n));
    }
Пример #2
0
 public override void ParseXML(XMLNode x)
 {
     base.ParseXML(x);
     Attributes    = x.Select <AttributesData>("attributes");
     Stats         = x.Select <Stats>("stats");
     Flags         = new GenericFlags <NPCFlags>(x.SelectEnums <NPCFlags>("flags"));
     SpawnKeywords = new GenericFlags <SpawnKeywords>(x.SelectEnums <SpawnKeywords>("spawnkeywords"));
     KnownSpells   = x.Select <Spells>("spells");
     StartingItems = x.Select <StartingItems>("startingitems");
     Equipment     = x.Select <Equipment>("equipslots");
     NaturalWeapon = x.Select <Item>("naturalweapon");
     //parse AI packages
 }
Пример #3
0
    private static void LoadBasicStats(Player player)
    {
        AttributesData attr = new AttributesData();

        attr.Constitution = 14;
        attr.Charisma     = 12;
        attr.Wisdom       = 9;
        attr.Dexterity    = 17;
        attr.Intelligence = 16;
        attr.Strength     = 16;
        attr.Size         = Size.MEDIUM;
        player.Attributes = attr;

        Stats stats = new Stats();

        //stats.MaxHealth = 100;
        stats.MaxPower = 50;
        stats.Level    = 1;
        stats.initialize();
        stats.Hunger = 900;
        player.Stats = stats;

        GenericFlags <NPCFlags> flags = new GenericFlags <NPCFlags>();

        flags[NPCFlags.NOPOLY]          = true;
        flags[NPCFlags.NO_RANDOM_SPAWN] = true;
        player.Flags = flags;

        player.PlayerTitle = BigBoss.Objects.PlayerProfessions.getTitle(player.PlayerChosenProfession, player.Stats.Level);
        player.IsActive    = true;

        Equipment equipment = new Equipment();

        player.Equipment = equipment;
        equipment.AddSlot(EquipType.BODY);
        equipment.AddSlot(EquipType.FEET);
        equipment.AddSlot(EquipType.HAND, 2);
        equipment.AddSlot(EquipType.HEAD);
        equipment.AddSlot(EquipType.LEGS);
        equipment.AddSlot(EquipType.NECK);
        equipment.AddSlot(EquipType.RING, 2);
        equipment.AddSlot(EquipType.SHIRT);

        player.Name = "Kurtis";

        foreach (KeyValuePair <string, Spell> kvp in BigBoss.Objects.PlayerSpells)
        {
            player.KnownSpells.Add(kvp.Key, kvp.Value);
        }
    }
Пример #4
0
    public override bool Equals(object obj)
    {
        GenericFlags <T> rhs = obj as GenericFlags <T>;

        if (rhs == null)
        {
            return(false);
        }
        if (_set.Count != rhs._set.Count)
        {
            return(false);
        }
        return(_set.IsSubsetOf(rhs._set));
    }
Пример #5
0
        private HandlerBlock CreateHandlerBlock(IMethod method, IMethodContext context, IInstructionList code, SEHBlock block)
        {
            switch (block.Type)
            {
            case SEHFlags.Catch:
            {
                int token = block.Value;

                var type = context.ResolveType(method, token);
                if (!HasGenericExceptions && type.IsGenericContext())
                {
                    _genericFlags |= GenericFlags.HasGenericExceptions;
                }

                var h = new HandlerBlock(BlockType.Catch)
                {
                    ExceptionType = type
                };
                return(h);
            }

            case SEHFlags.Filter:
            {
                var h = new HandlerBlock(BlockType.Filter)
                {
                    FilterIndex = code.GetOffsetIndex(block.Value)
                };
                return(h);
            }

            case SEHFlags.Finally:
                return(new HandlerBlock(BlockType.Finally));

            case SEHFlags.Fault:
                return(new HandlerBlock(BlockType.Fault));

            default:
                throw new IndexOutOfRangeException();
            }
        }
Пример #6
0
        private ILStream ReadCode(IMethod method, IMethodContext context, BufferedBinaryReader reader, int codeSize)
        {
            var list     = new ILStream();
            var startPos = reader.Position;
            int offset   = 0;

            while (offset < codeSize)
            {
                var pos   = reader.Position;
                var instr = ReadInstruction(method, context, reader, startPos);
                var size  = reader.Position - pos;
                offset += (int)size;

                instr.Index = list.Count;
                list.Add(instr);

                if (!HasGenericInstructions && instr.IsGenericContext)
                {
                    _genericFlags |= GenericFlags.HasGenericInstructions;
                }
            }
            return(list);
        }
Пример #7
0
    protected LeveledPool <NPC> GetPool(GenericFlags <SpawnKeywords> keywords)
    {
        LeveledPool <NPC> pool;

        if (!npcPools.TryGetValue(keywords, out pool))
        {
            #region DEBUG
            if (BigBoss.Debug.logging(Logs.NPCs))
            {
                BigBoss.Debug.printHeader(Logs.NPCs, "Get Pool");
                BigBoss.Debug.w(Logs.NPCs, "Keywords:");
                BigBoss.Debug.incrementDepth(Logs.NPCs);
                keywords.ToLog(Logs.NPCs);
                BigBoss.Debug.decrementDepth(Logs.NPCs);
            }
            #endregion
            pool = new LeveledPool <NPC>(DefaultLevelCurve);
            npcPools.Add(keywords, pool);
            foreach (NPC n in BigBoss.Objects.NPCs.Prototypes)
            {
                if (!keywords.Empty && n.SpawnKeywords.Contains(keywords) || // NPC has keywords
                    (keywords.Empty && !n.Flags[NPCFlags.NO_RANDOM_SPAWN]))    // If keywords empty
                {
                    pool.Add(n);
                }
            }
            #region DEBUG
            if (BigBoss.Debug.logging(Logs.NPCs))
            {
                pool.ToLog(Logs.NPCs, "NPCs");
                BigBoss.Debug.printFooter(Logs.NPCs, "Get Pool");
            }
            #endregion
        }
        return(pool);
    }
Пример #8
0
 public virtual void Init()
 {
     _roomMods    = new RoomModCollection();
     KeywordFlags = new GenericFlags <SpawnKeywords>(Keywords);
 }
Пример #9
0
 public bool Contains(GenericFlags <T> rhs)
 {
     return(rhs._set.IsSubsetOf(_set));
 }
Пример #10
0
        public MethodBody(IMethod method, IMethodContext context, BufferedBinaryReader reader)
        {
            if (method == null)
            {
                throw new ArgumentNullException("method");
            }
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            _method = method;

            int lsb   = reader.ReadUInt8();
            var flags = (MethodBodyFlags)lsb;

            _maxStackSize = 8;

            var             format    = flags & MethodBodyFlags.FormatMask;
            List <SEHBlock> sehBlocks = null;

            switch (format)
            {
            case MethodBodyFlags.FatFormat:
            {
                byte msb = reader.ReadUInt8();
                int  dwordMultipleSize = (msb & 0xF0) >> 4;
                Debug.Assert(dwordMultipleSize == 3);         // the fat header is 3 dwords

                _maxStackSize = reader.ReadUInt16();

                int codeSize = reader.ReadInt32();
                int localSig = reader.ReadInt32();

                flags = (MethodBodyFlags)((msb & 0x0F) << 8 | lsb);

                _code = ReadCode(method, context, reader, codeSize);

                if ((flags & MethodBodyFlags.MoreSects) != 0)
                {
                    sehBlocks = ReadSehBlocks(reader);
                }

                bool hasGenericVars;
                _vars = context.ResolveLocalVariables(method, localSig, out hasGenericVars);

                if (hasGenericVars)
                {
                    _genericFlags |= GenericFlags.HasGenericVars;
                }
            }
            break;

            case MethodBodyFlags.TinyFormat:
            case MethodBodyFlags.TinyFormat1:
            {
                int codeSize = (lsb >> 2);
                _code = ReadCode(method, context, reader, codeSize);
            }
            break;

            default:
                throw new NotSupportedException("Not supported method body format!");
            }

            TranslateOffsets();

            if (sehBlocks != null)
            {
                _protectedBlocks = TranslateSehBlocks(method, context, sehBlocks, _code);
            }

            context.LinkDebugInfo(this);
        }