예제 #1
0
    public static void RemoveRadiusEffect(String strItemClass, ref Block myBlock)
    {
        ItemClass itemClass = ItemClass.GetItemClass(strItemClass, false);

        if (itemClass.Properties.Values.ContainsKey("ActivatedBuff"))
        {
            String   strBuff = itemClass.Properties.Values["ActivatedBuff"];
            string[] array5  = strBuff.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);

            // Grab the current radius effects
            List <BlockRadiusEffect> list2 = myBlock.RadiusEffects.OfType <BlockRadiusEffect>().ToList();
            foreach (string text4 in array5)
            {
                int num12 = text4.IndexOf('(');
                int num13 = text4.IndexOf(')');
                BlockRadiusEffect item = default(BlockRadiusEffect);
                if (num12 != -1 && num13 != -1 && num13 > num12 + 1)
                {
                    item.radius   = StringParsers.ParseFloat(text4.Substring(num12 + 1, num13 - num12 - 1), 0, -1, NumberStyles.Any);
                    item.variable = text4.Substring(0, num12);
                }
                else
                {
                    item.radius   = 1f;
                    item.variable = text4;
                }
                if (list2.Contains(item))
                {
                    list2.Remove(item);
                }
            }

            myBlock.RadiusEffects = list2.ToArray();
        }
    }
예제 #2
0
    private void updateBlockRadiusEffects()
    {
        Vector3i blockPosition = base.GetBlockPosition();
        int      num           = World.toChunkXZ(blockPosition.x);
        int      num2          = World.toChunkXZ(blockPosition.z);

        this.startedThisFrame = new List <string>();
        for (int i = -1; i < 2; i++)
        {
            for (int j = -1; j < 2; j++)
            {
                Chunk chunk = (Chunk)this.world.GetChunkSync(num + j, num2 + i);
                if (chunk != null)
                {
                    DictionaryList <Vector3i, TileEntity> tileEntities = chunk.GetTileEntities();
                    for (int k = 0; k < tileEntities.list.Count; k++)
                    {
                        TileEntity tileEntity = tileEntities.list[k];
                        if (tileEntity.IsActive(this.world))
                        {
                            BlockValue block  = this.world.GetBlock(tileEntity.ToWorldPos());
                            Block      block2 = Block.list[block.type];
                            if (block2.RadiusEffects != null)
                            {
                                float distanceSq = base.GetDistanceSq(tileEntity.ToWorldPos().ToVector3());
                                for (int l = 0; l < block2.RadiusEffects.Length; l++)
                                {
                                    BlockRadiusEffect blockRadiusEffect = block2.RadiusEffects[l];
                                    if (distanceSq <= blockRadiusEffect.radius * blockRadiusEffect.radius && !this.Buffs.HasBuff(blockRadiusEffect.variable))
                                    {
                                        this.Buffs.AddBuff(blockRadiusEffect.variable, -1, true, false, false);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }