Esempio n. 1
0
    public static patch_CreatureTemplate AddTemplateData(patch_CreatureTemplate template)
    {
        List <TileConnectionResistance> list3 = new List <TileConnectionResistance>();
        List <TileTypeResistance>       list2 = new List <TileTypeResistance>();

        switch ((int)template.type)
        {
        default:
            break;

        case (int)patch_CreatureTemplate.Type.LightWorm:

            break;

        case (int)patch_CreatureTemplate.Type.CrossBat:

            break;

        case (int)patch_CreatureTemplate.Type.SeaDrake:
            list2.Clear();
            list3.Clear();
            template.baseDamageResistance    = 0.95f;
            template.baseStunResistance      = 0.9f;
            template.instantDeathDamageLimit = 1f;
            template.abstractedLaziness      = 100;
            template.AI                      = true;
            template.requireAImap            = true;
            template.canSwim                 = true;
            template.doPreBakedPathing       = false;
            template.offScreenSpeed          = 2f;
            template.bodySize                = 2f;
            template.preBakedPathingAncestor = new CreatureTemplate(CreatureTemplate.Type.Leech, null, list2, list3, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Eats, 1f));;
            template.grasps                  = 1;
            template.stowFoodInDen           = true;
            template.visualRadius            = 300f;
            template.waterVision             = 1f;
            template.throughSurfaceVision    = 0.65f;
            template.movementBasedVision     = 0f;
            template.socialMemory            = true;
            template.communityInfluence      = 0f;
            template.communityID             = CreatureCommunities.CommunityID.None;
            template.waterRelationship       = CreatureTemplate.WaterRelationship.WaterOnly;
            template.meatPoints              = 6;
            break;

        case (int)patch_CreatureTemplate.Type.GreyLizard:
            list2.Clear();
            list3.Clear();
            list2.Add(new TileTypeResistance(AItile.Accessibility.OffScreen, 1f, PathCost.Legality.Allowed));
            list2.Add(new TileTypeResistance(AItile.Accessibility.Floor, 1f, PathCost.Legality.Allowed));
            list2.Add(new TileTypeResistance(AItile.Accessibility.Corridor, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.Standard, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OpenDiagonal, 3f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ReachOverGap, 3f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ReachUp, 2f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.DoubleReachUp, 2f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ReachDown, 2f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.SemiDiagonalReach, 2f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.DropToFloor, 20f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.DropToWater, 20f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.ShortCut, 1.5f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.NPCTransportation, 25f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OffScreenMovement, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.BetweenRooms, 10f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.LizardTurn, 10f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.Slope, 1.5f, PathCost.Legality.Allowed));
            CreatureTemplate creatureTemplate2 = new CreatureTemplate(CreatureTemplate.Type.LizardTemplate, null, list2, list3, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Ignores, 0f));
            creatureTemplate2.offScreenSpeed     = 0.3f;
            creatureTemplate2.grasps             = 1;
            creatureTemplate2.virtualCreature    = true;
            creatureTemplate2.abstractedLaziness = 50;
            template.name                        = "GreyLizard";
            creatureTemplate2.AI                 = true;
            creatureTemplate2.requireAImap       = true;
            creatureTemplate2.bodySize           = 2f;
            creatureTemplate2.stowFoodInDen      = true;
            creatureTemplate2.shortcutSegments   = 3;
            creatureTemplate2.communityID        = CreatureCommunities.CommunityID.Lizards;
            creatureTemplate2.communityInfluence = 1f;
            creatureTemplate2.waterRelationship  = CreatureTemplate.WaterRelationship.AirAndSurface;
            creatureTemplate2.canSwim            = true;
            creatureTemplate2.socialMemory       = true;
            CreatureTemplate creatureTemplate3 = LizardBreeds.BreedTemplate(CreatureTemplate.Type.PinkLizard, creatureTemplate2, null, null, null);
            template      = (patch_CreatureTemplate)GreyLizardBreed.BreedTemplate(patch_CreatureTemplate.Type.GreyLizard, creatureTemplate2, creatureTemplate3, null, null);
            template.type = (CreatureTemplate.Type)patch_CreatureTemplate.Type.GreyLizard;
            break;

        case (int)patch_CreatureTemplate.Type.WalkerBeast:
            list2.Clear();
            list3.Clear();
            list2.Add(new TileTypeResistance(AItile.Accessibility.Air, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.Standard, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OutsideRoom, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.SideHighway, 100000f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.OffScreenMovement, 1f, PathCost.Legality.Allowed));
            list3.Add(new TileConnectionResistance(MovementConnection.MovementType.BetweenRooms, 10f, PathCost.Legality.Allowed));
            template = new patch_CreatureTemplate(CreatureTemplate.Type.Deer, null, list2, list3, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Ignores, 0f));
            template.baseDamageResistance = 200f;
            template.baseStunResistance   = 8f;
            template.name = "WalkerBeast";
            template.type = (CreatureTemplate.Type)patch_CreatureTemplate.Type.WalkerBeast;
            template.abstractedLaziness = 10;
            template.AI                      = true;
            template.requireAImap            = true;
            template.doPreBakedPathing       = true;
            template.offScreenSpeed          = 1.5f;
            template.bodySize                = 2f;
            template.grasps                  = 1;
            template.stowFoodInDen           = false;
            template.visualRadius            = 1450f;
            template.waterVision             = 0.5f;
            template.throughSurfaceVision    = 0.65f;
            template.movementBasedVision     = 0f;
            template.hibernateOffScreen      = true;
            template.communityInfluence      = 0.85f;
            template.communityID             = CreatureCommunities.CommunityID.None;
            template.waterRelationship       = CreatureTemplate.WaterRelationship.AirOnly;
            template.preBakedPathingAncestor = StaticWorld.GetCreatureTemplate(CreatureTemplate.Type.Deer).preBakedPathingAncestor;
            break;
        }


        return(template);
    }
    public void ctor(World world, patch_CreatureTemplate creatureTemplate, patch_Creature realizedCreature, WorldCoordinate pos, EntityID ID)
    {
        orig_ctor(world, creatureTemplate, realizedCreature, pos, ID);
        CreatureTemplate.Type type = creatureTemplate.TopAncestor().type;
        if (creatureTemplate.AI)
        {
            type = creatureTemplate.type;
            switch (type)
            {
            case CreatureTemplate.Type.Scavenger:
                abstractAI = new ScavengerAbstractAI(world, this);
                goto IL_2F4;

            case CreatureTemplate.Type.Overseer:
                abstractAI = new OverseerAbstractAI(world, this);
                goto IL_2F4;

            default:
                switch (type)
                {
                case CreatureTemplate.Type.Vulture:
                    break;

                default:
                    if (type != CreatureTemplate.Type.MirosBird)
                    {
                        abstractAI = new AbstractCreatureAI(world, this);
                        goto IL_2F4;
                    }
                    abstractAI = new MirosBirdAbstractAI(world, this);
                    goto IL_2F4;

                case CreatureTemplate.Type.CicadaA:
                case CreatureTemplate.Type.CicadaB:
                    abstractAI = new CicadaAbstractAI(world, this);
                    goto IL_2F4;

                case CreatureTemplate.Type.BigEel:
                    abstractAI = new BigEelAbstractAI(world, this);
                    goto IL_2F4;

                case CreatureTemplate.Type.Deer:
                    abstractAI = new DeerAbstractAI(world, this);
                    goto IL_2F4;

                case (CreatureTemplate.Type)patch_CreatureTemplate.Type.WalkerBeast:
                    abstractAI = new WalkerBeastAbstractAI(world, this);
                    goto IL_2F4;
                }
                break;

            case CreatureTemplate.Type.SmallNeedleWorm:
            case CreatureTemplate.Type.BigNeedleWorm:
                abstractAI = new NeedleWormAbstractAI(world, this);
                goto IL_2F4;

            case CreatureTemplate.Type.DropBug:
                abstractAI = new DropBugAbstractAI(world, this);
                goto IL_2F4;

            case CreatureTemplate.Type.KingVulture:
                break;
            }
            abstractAI = new VultureAbstractAI(world, this);
        }
IL_2F4:
        if (pos.abstractNode > -1 && pos.abstractNode < Room.nodes.Length && Room.nodes[pos.abstractNode].type == AbstractRoomNode.Type.Den && !pos.TileDefined)
        {
            if (Room.offScreenDen)
            {
                remainInDenCounter = 1;
            }
            else
            {
                remainInDenCounter = UnityEngine.Random.Range(100, 1000);
            }
            if (abstractAI != null)
            {
                abstractAI.denPosition = new WorldCoordinate?(pos);
            }
            spawnDen = pos;
        }
        if (creatureTemplate.type == CreatureTemplate.Type.TentaclePlant || creatureTemplate.type == CreatureTemplate.Type.PoleMimic)
        {
            remainInDenCounter = 0;
        }
    }
 public patch_AbstractCreature(World world, patch_CreatureTemplate creatureTemplate, Creature realizedCreature, WorldCoordinate pos, EntityID ID) : base(world, creatureTemplate, realizedCreature, pos, ID)
 {
 }
 public extern void orig_ctor(World world, patch_CreatureTemplate creatureTemplate, patch_Creature realizedCreature, WorldCoordinate pos, EntityID ID);