示例#1
0
        public static void BraveBehaviorDebug()
        {
            string  enemyGuid   = "dc3cd41623d447aeba77c77c99598426"; //MarinePast
            AIActor prefabActor = EnemyDatabase.GetOrLoadByGuid(enemyGuid);


            GameObject objectToInstantiate = prefabActor.gameObject;

            // int flag = 0;

            Debug.Log("Begin BraveBehavior Debug");


            BehaviorSpeculator behaviorspeculator = objectToInstantiate.GetComponent <BehaviorSpeculator>();
            AIBulletBank       aibulletbank       = objectToInstantiate.GetComponent <AIBulletBank>();

            List <AttackBehaviorBase> attackbehaviorbase = behaviorspeculator.AttackBehaviors;

            foreach (AttackBehaviorBase attack in attackbehaviorbase)
            {
                Debug.Log("ATTACK Behaviors: " + attack.ToString());
            }

            AttackBehaviorGroup attackbehaviorgroup = behaviorspeculator.AttackBehaviorGroup;
            List <AttackBehaviorGroup.AttackGroupItem> attackbehaviors = attackbehaviorgroup.AttackBehaviors;

            foreach (AttackBehaviorGroup.AttackGroupItem attackgroupitem in attackbehaviors)
            {
                Debug.Log("AttackGroup Item :" + attackgroupitem.Behavior.ToString());
            }
            //AttackBehaviorGroup
            //AttackGruop //ShootBehavior --> has bullet scripts

            Debug.Log("End BraveBehavior Debug");
        }
 public void SetupOB(AIActor actor)
 {
     this.actor        = actor;
     this.behaviorSpec = actor.behaviorSpeculator;
     this.bulletBank   = actor.bulletBank;
     this.healthHaver  = actor.healthHaver;
 }
        private void Start()
        {
            this.m_projectile = base.GetComponent <Projectile>();
            BulletScriptSource source = this.m_projectile.gameObject.GetOrAddComponent <BulletScriptSource>();

            this.m_projectile.gameObject.AddComponent <BulletSourceKiller>();
            var          bulletScriptSelected = new CustomBulletScriptSelector(typeof(GunjurerSlamPlayerScript));
            AIBulletBank bulletBank           = DataCloners.CopyAIBulletBank(EnemyDatabase.GetOrLoadByGuid("206405acad4d4c33aac6717d184dc8d4").bulletBank);

            bulletBank.OnProjectileCreated += this.OnBulletSpawned;
            foreach (AIBulletBank.Entry bullet in bulletBank.Bullets)
            {
                bullet.BulletObject.GetComponent <Projectile>().BulletScriptSettings.preventPooling = true;
            }
            source.BulletManager = bulletBank;
            source.BulletScript  = bulletScriptSelected;
            source.Initialize();//to fire the script once
            GunjurerSlamPlayerScript spawnedScript = source.RootBullet as GunjurerSlamPlayerScript;

            spawnedScript.aimDirection = this.m_projectile.Direction.ToAngle();

            /*if (this.m_projectile.ProjectilePlayerOwner() != null)
             * {
             *  spawnedScript.overrideSpeed *= this.m_projectile.ProjectilePlayerOwner().stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed);
             * }*/
        }
示例#4
0
        public static void DebugBulletBank(AIBulletBank bank, string path = "")
        {
            List <string> logs = new List <string>();

            logs.Add("bullet bank report");
            logs.Add("");

            logs.Add("");
            if (bank)
            {
                logs.Add("--- Beginning bullet bank report");

                foreach (var b in bank.Bullets)
                {
                    logs.Add(ReturnPropertiesAndFields(b, "Logging bullet " + b.Name));
                }
                logs.Add("--- End of bullet bank report");
            }
            else
            {
                logs.Add("--- Actor does not have a bullet bank.");
            }

            var retstr = string.Join("\n", logs.ToArray());

            if (string.IsNullOrEmpty(path))
            {
                ETGModConsole.Log(retstr);
            }
            else
            {
                File.WriteAllText(path, retstr);
            }
        }
示例#5
0
        public static AIBulletBank CopyAIBulletBank(AIBulletBank bank)
        {
            UnityEngine.GameObject obj     = new UnityEngine.GameObject();
            AIBulletBank           newBank = obj.GetOrAddComponent <AIBulletBank>();

            newBank.Bullets                          = bank.Bullets;
            newBank.FixedPlayerPosition              = bank.FixedPlayerPosition;
            newBank.OnProjectileCreated              = bank.OnProjectileCreated;
            newBank.OverrideGun                      = bank.OverrideGun;
            newBank.rampTime                         = bank.rampTime;
            newBank.OnProjectileCreatedWithSource    = bank.OnProjectileCreatedWithSource;
            newBank.rampBullets                      = bank.rampBullets;
            newBank.transforms                       = bank.transforms;
            newBank.useDefaultBulletIfMissing        = bank.useDefaultBulletIfMissing;
            newBank.rampStartHeight                  = bank.rampStartHeight;
            newBank.SpecificRigidbodyException       = bank.SpecificRigidbodyException;
            newBank.PlayShells                       = bank.PlayShells;
            newBank.PlayAudio                        = bank.PlayAudio;
            newBank.PlayVfx                          = bank.PlayVfx;
            newBank.CollidesWithEnemies              = bank.CollidesWithEnemies;
            newBank.FixedPlayerRigidbodyLastPosition = bank.FixedPlayerRigidbodyLastPosition;
            newBank.ActorName                        = bank.ActorName;
            newBank.TimeScale                        = bank.TimeScale;
            newBank.SuppressPlayerVelocityAveraging  = bank.SuppressPlayerVelocityAveraging;
            newBank.FixedPlayerRigidbody             = bank.FixedPlayerRigidbody;
            return(newBank);
        }
示例#6
0
        // Token: 0x06000056 RID: 86 RVA: 0x00004194 File Offset: 0x00002394
        public void KnightPlacer(PlayerController owner)
        {
            try
            {
                AIActor     orLoadByGuid             = EnemyDatabase.GetOrLoadByGuid("ec8ea75b557d4e7b8ceeaacdf6f8238c");
                IntVector2  intVector                = Vector2Extensions.ToIntVector2(owner.unadjustedAimPoint, (VectorConversions)2);
                RoomHandler absoluteRoomFromPosition = GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector);
                bool        flag = absoluteRoomFromPosition != null && absoluteRoomFromPosition == owner.CurrentRoom && owner.IsInCombat;
                if (flag)
                {
                    AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, owner.CenterPosition, absoluteRoomFromPosition, true, (AIActor.AwakenAnimationType) 2, true);
                    PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false);
                    aiactor.CanTargetEnemies   = true;
                    aiactor.CanTargetPlayers   = false;
                    aiactor.IsHarmlessEnemy    = true;
                    aiactor.CanDropCurrency    = false;
                    aiactor.IgnoreForRoomClear = true;
                    aiactor.MovementSpeed      = 5.95f;
                    aiactor.CompanionOwner     = owner;
                    aiactor.IsBuffEnemy        = true;
                    aiactor.isPassable         = true;
                    aiactor.gameObject.AddComponent <KillOnRoomClear>();
                    aiactor.reinforceType = (AIActor.ReinforceType) 2;
                    aiactor.HandleReinforcementFallIntoRoom(0.1f);

                    //added this so the player doesn't collide with the nut when dodge rolling, he goes through companions
                    aiactor.gameObject.AddComponent <CompanionController>();
                    CompanionController component = aiactor.gameObject.GetComponent <CompanionController>();
                    component.Initialize(owner);

                    this.nut = aiactor;
                    MindControlEffect orAddComponent = GameObjectExtensions.GetOrAddComponent <MindControlEffect>(aiactor.gameObject);
                    orAddComponent.owner = (this.gun.CurrentOwner as PlayerController);

                    // to make the nut invincible against the player effects or any other damage effects
                    if (aiactor.healthHaver != null)
                    {
                        aiactor.healthHaver.PreventAllDamage = true;
                    }

                    // to prevent the attacks of the nut from damaging the player
                    if (aiactor.bulletBank != null)
                    {
                        AIBulletBank bulletBank = aiactor.bulletBank;
                        bulletBank.OnProjectileCreated = (Action <Projectile>)Delegate.Combine(bulletBank.OnProjectileCreated, new Action <Projectile>(CopperChariot.OnPostProcessProjectile));
                    }
                    if (aiactor.aiShooter != null)
                    {
                        AIShooter aiShooter = aiactor.aiShooter;
                        aiShooter.PostProcessProjectile = (Action <Projectile>)Delegate.Combine(aiShooter.PostProcessProjectile, new Action <Projectile>(CopperChariot.OnPostProcessProjectile));
                    }
                }
            }
            catch (Exception e)
            {
                Tools.Print("Copper KnightPlacer", "FFFFFF", true);
                Tools.PrintException(e);
            }
        }
 public void BindWithOwner(PlayerController player)
 {
     this.owner = player;
     if (base.bulletBank)
     {
         AIBulletBank bulletBank2 = base.bulletBank;
         bulletBank2.OnProjectileCreated += this.HandleCompanionPostProcessProjectile;
     }
 }
        public void knightPlacer(PlayerController owner)
        {
            IntVector2  aim  = Vector2Extensions.ToIntVector2(owner.unadjustedAimPoint, VectorConversions.Round);
            RoomHandler room = GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(aim);

            if (room != null && room == owner.CurrentRoom && owner.IsInCombat)
            {
                AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("ec8ea75b557d4e7b8ceeaacdf6f8238c");


                AIActor aiActor = AIActor.Spawn(orLoadByGuid.aiActor, owner.CenterPosition, room, true, AIActor.AwakenAnimationType.Spawn, true);
                PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiActor.specRigidbody, null, false);
                aiActor.CanTargetEnemies   = true;
                aiActor.CanTargetPlayers   = false;
                aiActor.IsHarmlessEnemy    = true;
                aiActor.CanDropCurrency    = false;
                aiActor.IgnoreForRoomClear = true;
                aiActor.MovementSpeed      = 6.1f;
                aiActor.CompanionOwner     = owner;
                aiActor.IsBuffEnemy        = true;
                aiActor.isPassable         = true;

                aiActor.gameObject.AddComponent <KillOnRoomClear>();
                aiActor.reinforceType = AIActor.ReinforceType.Instant;
                aiActor.HandleReinforcementFallIntoRoom(.1f);
                nut = aiActor;

                MindControlEffect mindControl = aiActor.gameObject.GetOrAddComponent <MindControlEffect>();
                mindControl.owner = (this.gun.CurrentOwner as PlayerController);

                aiActor.aiShooter.IsReallyBigBoy = true;

                aiActor.aiShooter.customShootCooldownPeriod = .25f;
                aiActor.Update();

                if (nut.bulletBank != null)
                {
                    AIBulletBank bulletBank = nut.bulletBank;
                    bulletBank.OnProjectileCreated = (Action <Projectile>)Delegate.Combine(bulletBank.OnProjectileCreated, new Action <Projectile>(CopperChariot.OnPostProcessProjectile));
                }
                if (nut.aiShooter != null)
                {
                    AIShooter aiShooter = nut.aiShooter;
                    aiShooter.PostProcessProjectile = (Action <Projectile>)Delegate.Combine(aiShooter.PostProcessProjectile, new Action <Projectile>(CopperChariot.OnPostProcessProjectile));
                }
            }
        }
        public void Start()
        {
            enemy = base.aiActor;
            AIBulletBank bulletBank2 = enemy.bulletBank;

            foreach (AIBulletBank.Entry bullet in bulletBank2.Bullets)
            {
                bullet.BulletObject.GetComponent <Projectile>().BulletScriptSettings.preventPooling = true;
            }
            if (enemy.aiShooter != null)
            {
                AIShooter aiShooter = enemy.aiShooter;
                aiShooter.PostProcessProjectile = (Action <Projectile>)Delegate.Combine(aiShooter.PostProcessProjectile, new Action <Projectile>(this.PostProcessSpawnedEnemyProjectiles));
            }

            if (enemy.bulletBank != null)
            {
                AIBulletBank bulletBank = enemy.bulletBank;
                bulletBank.OnProjectileCreated = (Action <Projectile>)Delegate.Combine(bulletBank.OnProjectileCreated, new Action <Projectile>(this.PostProcessSpawnedEnemyProjectiles));
            }
        }
示例#10
0
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize, bool HasAiShooter, bool UsesAttackGroup = false)
        {
            if (BossBuilder.Dictionary.ContainsKey(guid))
            {
                ETGModConsole.Log("BossBuilder: Yea something went wrong. Complain to Neighborino about it.");
                return(null);
            }
            var prefab = GameObject.Instantiate(behaviorSpeculatorPrefab);

            prefab.name = name;

            //setup misc components
            var sprite = SpriteBuilder.SpriteFromResource(defaultSpritePath, prefab).GetComponent <tk2dSprite>();

            sprite.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = true;
            prefab.AddComponent <tk2dSpriteAnimator>();
            prefab.AddComponent <AIAnimator>();
            PickupObject item = PickupObjectDatabase.GetById(291);
            //setup knockback
            var knockback = prefab.AddComponent <KnockbackDoer>();

            knockback.weight = 1;
            SpriteBuilder.AddSpriteToCollection("FrostAndGunfireItems/Resources/roomimic_bosscard", SpriteBuilder.ammonomiconCollection);



            //setup health haver
            var healthHaver = prefab.AddComponent <HealthHaver>();

            healthHaver.RegisterBodySprite(sprite);
            healthHaver.PreventAllDamage = false;
            healthHaver.SetHealthMaximum(15000);
            healthHaver.FullHeal();


            //setup AI Actor
            var aiActor = prefab.AddComponent <AIActor>();

            aiActor.State     = AIActor.ActorState.Normal;
            aiActor.EnemyGuid = guid;
            aiActor.HasShadow = false;

            //setup behavior speculator
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            bs.MovementBehaviors = new List <MovementBehaviorBase>();
            bs.TargetBehaviors   = new List <TargetBehaviorBase>();
            bs.OverrideBehaviors = new List <OverrideBehaviorBase>();
            bs.OtherBehaviors    = new List <BehaviorBase>();
            bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem>();
            if (HasAiShooter)
            {
                var actor = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5");
                behaviorSpeculatorPrefab = GameObject.Instantiate(actor.gameObject);
                foreach (Transform child in behaviorSpeculatorPrefab.transform)
                {
                    if (child != behaviorSpeculatorPrefab.transform)
                    {
                        GameObject.DestroyImmediate(child);
                    }
                }

                foreach (var comp in behaviorSpeculatorPrefab.GetComponents <Component>())
                {
                    if (comp.GetType() != typeof(BehaviorSpeculator))
                    {
                        GameObject.DestroyImmediate(comp);
                    }
                }

                GameObject.DontDestroyOnLoad(behaviorSpeculatorPrefab);
                FakePrefab.MarkAsFakePrefab(behaviorSpeculatorPrefab);
                behaviorSpeculatorPrefab.SetActive(false);
            }
            else
            {
                AIBulletBank aibulletBank = prefab.AddComponent <AIBulletBank>();
            }

            //Add to enemy database
            EnemyDatabaseEntry enemyDatabaseEntry = new EnemyDatabaseEntry
            {
                myGuid          = guid,
                placeableWidth  = 2,
                placeableHeight = 2,
                isNormalEnemy   = true,
                path            = guid,
                isInBossTab     = true,
                encounterGuid   = guid,
            };

            EnemyDatabase.Instance.Entries.Add(enemyDatabaseEntry);
            BossBuilder.Dictionary.Add(guid, prefab);
            //finalize
            GameObject.DontDestroyOnLoad(prefab);
            FakePrefab.MarkAsFakePrefab(prefab);
            prefab.SetActive(false);

            return(prefab);
        }
示例#11
0
 public static void DuplicateAIShooterAndAIBulletBank(GameObject targetObject, AIShooter sourceShooter, AIBulletBank sourceBulletBank, int startingGunOverrideID = 0, Transform gunAttachPointOverride = null, Transform bulletScriptAttachPointOverride = null, PlayerHandController overrideHandObject = null)
 {
     if (targetObject.GetComponent <AIShooter>() && targetObject.GetComponent <AIBulletBank>())
     {
         return;
     }
     if (!targetObject.GetComponent <AIBulletBank>())
     {
         AIBulletBank aibulletBank = targetObject.AddComponent <AIBulletBank>();
         aibulletBank.Bullets = new List <AIBulletBank.Entry>(0);
         if (sourceBulletBank.Bullets.Count > 0)
         {
             foreach (AIBulletBank.Entry entry in sourceBulletBank.Bullets)
             {
                 aibulletBank.Bullets.Add(new AIBulletBank.Entry
                 {
                     Name               = entry.Name,
                     BulletObject       = entry.BulletObject,
                     OverrideProjectile = entry.OverrideProjectile,
                     ProjectileData     = new ProjectileData
                     {
                         damage  = entry.ProjectileData.damage,
                         speed   = entry.ProjectileData.speed,
                         range   = entry.ProjectileData.range,
                         force   = entry.ProjectileData.force,
                         damping = entry.ProjectileData.damping,
                         UsesCustomAccelerationCurve     = entry.ProjectileData.UsesCustomAccelerationCurve,
                         AccelerationCurve               = entry.ProjectileData.AccelerationCurve,
                         CustomAccelerationCurveDuration = entry.ProjectileData.CustomAccelerationCurveDuration,
                         onDestroyBulletScript           = entry.ProjectileData.onDestroyBulletScript,
                         IgnoreAccelCurveTime            = entry.ProjectileData.IgnoreAccelCurveTime
                     },
                     PlayAudio               = entry.PlayAudio,
                     AudioSwitch             = entry.AudioSwitch,
                     AudioEvent              = entry.AudioEvent,
                     AudioLimitOncePerFrame  = entry.AudioLimitOncePerFrame,
                     AudioLimitOncePerAttack = entry.AudioLimitOncePerAttack,
                     MuzzleFlashEffects      = new VFXPool
                     {
                         effects = entry.MuzzleFlashEffects.effects,
                         type    = entry.MuzzleFlashEffects.type
                     },
                     MuzzleLimitOncePerFrame          = entry.MuzzleLimitOncePerFrame,
                     MuzzleInheritsTransformDirection = entry.MuzzleInheritsTransformDirection,
                     ShellTransform                = entry.ShellTransform,
                     ShellPrefab                   = entry.ShellPrefab,
                     ShellForce                    = entry.ShellForce,
                     ShellForceVariance            = entry.ShellForceVariance,
                     DontRotateShell               = entry.DontRotateShell,
                     ShellGroundOffset             = entry.ShellGroundOffset,
                     ShellsLimitOncePerFrame       = entry.ShellsLimitOncePerFrame,
                     rampBullets                   = entry.rampBullets,
                     conditionalMinDegFromNorth    = entry.conditionalMinDegFromNorth,
                     forceCanHitEnemies            = entry.forceCanHitEnemies,
                     suppressHitEffectsIfOffscreen = entry.suppressHitEffectsIfOffscreen,
                     preloadCount                  = entry.preloadCount
                 });
             }
         }
         aibulletBank.useDefaultBulletIfMissing = true;
         aibulletBank.transforms = new List <Transform>();
         if (sourceBulletBank.transforms != null && sourceBulletBank.transforms.Count > 0)
         {
             foreach (Transform item in sourceBulletBank.transforms)
             {
                 aibulletBank.transforms.Add(item);
             }
         }
         aibulletBank.RegenerateCache();
     }
     if (!targetObject.GetComponent <AIShooter>())
     {
         AIShooter aishooter = targetObject.AddComponent <AIShooter>();
         aishooter.volley = sourceShooter.volley;
         if (startingGunOverrideID != 0)
         {
             aishooter.equippedGunId = startingGunOverrideID;
         }
         else
         {
             aishooter.equippedGunId = sourceShooter.equippedGunId;
         }
         aishooter.shouldUseGunReload        = true;
         aishooter.volleyShootPosition       = sourceShooter.volleyShootPosition;
         aishooter.volleyShellCasing         = sourceShooter.volleyShellCasing;
         aishooter.volleyShellTransform      = sourceShooter.volleyShellTransform;
         aishooter.volleyShootVfx            = sourceShooter.volleyShootVfx;
         aishooter.usesOctantShootVFX        = sourceShooter.usesOctantShootVFX;
         aishooter.bulletName                = sourceShooter.bulletName;
         aishooter.customShootCooldownPeriod = sourceShooter.customShootCooldownPeriod;
         aishooter.doesScreenShake           = sourceShooter.doesScreenShake;
         aishooter.rampBullets               = sourceShooter.rampBullets;
         aishooter.rampStartHeight           = sourceShooter.rampStartHeight;
         aishooter.rampTime = sourceShooter.rampTime;
         if (gunAttachPointOverride)
         {
             aishooter.gunAttachPoint = gunAttachPointOverride;
         }
         else
         {
             aishooter.gunAttachPoint = sourceShooter.gunAttachPoint;
         }
         if (bulletScriptAttachPointOverride)
         {
             aishooter.bulletScriptAttachPoint = bulletScriptAttachPointOverride;
         }
         else
         {
             aishooter.bulletScriptAttachPoint = sourceShooter.bulletScriptAttachPoint;
         }
         aishooter.overallGunAttachOffset = sourceShooter.overallGunAttachOffset;
         aishooter.flippedGunAttachOffset = sourceShooter.flippedGunAttachOffset;
         if (overrideHandObject)
         {
             aishooter.handObject = overrideHandObject;
         }
         else
         {
             aishooter.handObject = sourceShooter.handObject;
         }
         aishooter.AllowTwoHands            = sourceShooter.AllowTwoHands;
         aishooter.ForceGunOnTop            = sourceShooter.ForceGunOnTop;
         aishooter.IsReallyBigBoy           = sourceShooter.IsReallyBigBoy;
         aishooter.BackupAimInMoveDirection = sourceShooter.BackupAimInMoveDirection;
         aishooter.RegenerateCache();
     }
 }
示例#12
0
 public static void BuildSynergyPrefab()
 {
     if (synergyPrefab == null && !CompanionBuilder.companionDictionary.ContainsKey("Synergy_Cross_Chamber"))
     {
         synergyPrefab = CompanionBuilder.BuildPrefab("Synergy Cross Chamber", "Synergy_Cross_Chamber", "LichItems/Resources/CrossChamber/IdleRight/tomb_idle_right_001", new IntVector2(0, 0), new IntVector2(14, 16));
         var           companion = synergyPrefab.AddComponent <CompanionController>();
         PixelCollider collider  = new PixelCollider();
         collider.ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual;
         collider.CollisionLayer         = CollisionLayer.PlayerHitBox;
         collider.ManualWidth            = 14;
         collider.ManualHeight           = 16;
         collider.ManualOffsetX          = 0;
         collider.ManualOffsetY          = 0;
         KnockbackDoer knockback = companion.gameObject.GetOrAddComponent <KnockbackDoer>();
         knockback.weight = 100f;
         companion.aiActor.IsNormalEnemy = false;
         companion.CanInterceptBullets   = true;
         companion.specRigidbody.PrimaryPixelCollider.CollisionLayer = CollisionLayer.PlayerCollider;
         companion.specRigidbody.PixelColliders.Add(collider);
         companion.gameObject.AddComponent <IgnoreEnemyCollisions>();
         companion.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyHitBox));
         companion.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyCollider));
         companion.specRigidbody.CollideWithOthers = true;
         companion.aiActor.CollisionDamage         = 0f;
         companion.aiActor.MovementSpeed           = 3f;
         companion.aiActor.CanDropCurrency         = false;
         companion.healthHaver.PreventAllDamage    = false;
         GameObject gunAttachPointObject = new GameObject("GunAttachPoint");
         FakePrefab.MarkAsFakePrefab(gunAttachPointObject);
         UnityEngine.Object.DontDestroyOnLoad(gunAttachPointObject);
         Transform gunAttachPoint = gunAttachPointObject.transform;
         gunAttachPoint.parent        = synergyPrefab.transform;
         gunAttachPoint.localPosition = new Vector3(-0.1250f, 0.3125f, 0f);
         GameObject hand = SpriteBuilder.SpriteFromResource("LichItems/Resources/CrossChamber/Hand/hand_001", new GameObject("SynergyCrossChamberHand"));
         FakePrefab.MarkAsFakePrefab(hand);
         UnityEngine.Object.DontDestroyOnLoad(hand);
         LichsBookItem.ConstructOffsetsFromAnchor(hand.GetComponent <tk2dBaseSprite>().GetCurrentSpriteDef(), tk2dBaseSprite.Anchor.MiddleCenter);
         PlayerHandController handController = hand.AddComponent <PlayerHandController>();
         handController.ForceRenderersOff = false;
         handController.attachPoint       = null;
         handController.handHeightFromGun = 0.05f;
         SetupBasicAIShooter(synergyPrefab, 38 /*38 is the id of magnum*/, gunAttachPoint, hand);
         synergyPrefab.AddAnimation("idle_right", "LichItems/Resources/CrossChamber/IdleRight", 4, AnimationType.Idle, DirectionType.TwoWayHorizontal);
         synergyPrefab.AddAnimation("idle_left", "LichItems/Resources/CrossChamber/IdleLeft", 4, AnimationType.Idle, DirectionType.TwoWayHorizontal);
         synergyPrefab.AddAnimation("run_right", "LichItems/Resources/CrossChamber/MoveRight", 10, AnimationType.Move, DirectionType.TwoWayHorizontal);
         synergyPrefab.AddAnimation("run_left", "LichItems/Resources/CrossChamber/MoveLeft", 10, AnimationType.Move, DirectionType.TwoWayHorizontal);
         synergyPrefab.AddAnimation("hit_left", "LichItems/Resources/CrossChamber/HitLeft", 6, AnimationType.Hit, DirectionType.TwoWayHorizontal).wrapMode   = tk2dSpriteAnimationClip.WrapMode.Once;
         synergyPrefab.AddAnimation("hit_right", "LichItems/Resources/CrossChamber/HitRight", 6, AnimationType.Hit, DirectionType.TwoWayHorizontal).wrapMode = tk2dSpriteAnimationClip.WrapMode.Once;
         BehaviorSpeculator component = CrossChamber.synergyPrefab.GetComponent <BehaviorSpeculator>();
         component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
         {
             IdleAnimations = new string[]
             {
                 "idle"
             },
             DisableInCombat = false
         });
         component.TargetBehaviors = new List <TargetBehaviorBase>
         {
             new TargetPlayerBehavior
             {
                 Radius              = 35f,
                 LineOfSight         = true,
                 ObjectPermanence    = true,
                 SearchInterval      = 0.25f,
                 PauseOnTargetSwitch = false,
                 PauseTime           = 0.25f
             }
         };
         component.AttackBehaviors = new List <AttackBehaviorBase>
         {
             new ShootGunBehavior()
             {
                 GroupCooldownVariance        = -1f,
                 LineOfSight                  = true,
                 WeaponType                   = WeaponType.AIShooterProjectile,
                 OverrideBulletName           = "default",
                 BulletScript                 = null,
                 FixTargetDuringAttack        = false,
                 StopDuringAttack             = false,
                 LeadAmount                   = 0f,
                 LeadChance                   = 1f,
                 RespectReload                = true,
                 MagazineCapacity             = 6,
                 ReloadSpeed                  = 2f,
                 EmptiesClip                  = false,
                 SuppressReloadAnim           = false,
                 TimeBetweenShots             = -1f,
                 PreventTargetSwitching       = false,
                 OverrideAnimation            = string.Empty,
                 OverrideDirectionalAnimation = string.Empty,
                 HideGun                      = false,
                 UseLaserSight                = false,
                 UseGreenLaser                = false,
                 PreFireLaserTime             = -1f,
                 AimAtFacingDirectionWhenSafe = false
             }
         };
         AIBulletBank bulletBank = synergyPrefab.GetOrAddComponent <AIBulletBank>();
         bulletBank.Bullets = new List <AIBulletBank.Entry>
         {
             new AIBulletBank.Entry()
             {
                 Name = "default",
                 OverrideProjectile = true,
                 ProjectileData     = new ProjectileData()
                 {
                     damage  = 10f,
                     speed   = 16f,
                     range   = 60f,
                     force   = 20f,
                     damping = 0f,
                     UsesCustomAccelerationCurve     = false,
                     AccelerationCurve               = null,
                     CustomAccelerationCurveDuration = 0f,
                     IgnoreAccelCurveTime            = 0f,
                     onDestroyBulletScript           = null
                 },
                 BulletObject = null
             }
         };
         bulletBank.useDefaultBulletIfMissing = false;
         bulletBank.transforms = new List <Transform>
         {
             synergyPrefab.transform
         };
         bulletBank.rampBullets                   = false;
         bulletBank.rampStartHeight               = 0f;
         bulletBank.rampTime                      = 0f;
         bulletBank.OverrideGun                   = null;
         bulletBank.OnProjectileCreated           = null;
         bulletBank.OnProjectileCreatedWithSource = null;
         bulletBank.FixedPlayerPosition           = null;
     }
 }
        public static void BuildPrefab()
        {
            ExpandPrefabs.EXFriendlyForgeHammer = new GameObject("Friendly_Forge_Hammer")
            {
                layer = 22
            };

            GameObject m_HitEffectObject      = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().HitEffectAnimator.gameObject);
            GameObject m_TargetAnimatorObject = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().TargetAnimator.gameObject);
            GameObject m_ShadowObject         = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().ShadowAnimator.gameObject);
            GameObject m_ShootPointObject     = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().ShootPoint.gameObject);

            m_ShootPointObject.name = ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().ShootPoint.gameObject.name;

            m_HitEffectObject.transform.parent      = ExpandPrefabs.EXFriendlyForgeHammer.transform;
            m_TargetAnimatorObject.transform.parent = ExpandPrefabs.EXFriendlyForgeHammer.transform;
            m_ShadowObject.transform.parent         = ExpandPrefabs.EXFriendlyForgeHammer.transform;
            m_ShootPointObject.transform.parent     = ExpandPrefabs.EXFriendlyForgeHammer.transform;

            ExpandPrefabs.EXFriendlyForgeHammer.SetActive(false);

            m_ShadowObject.GetComponent <tk2dSpriteAnimator>().playAutomatically = false;
            m_ShadowObject.GetComponent <tk2dSpriteAnimator>().DefaultClipId     = 28;

            tk2dSprite m_NewHammerSprite = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <tk2dSprite>();

            ExpandUtility.DuplicateSprite(m_NewHammerSprite, ExpandPrefabs.ForgeHammer.GetComponent <tk2dSprite>());

            tk2dSpriteAnimation m_SourceHammerAnimationLibrary = ExpandPrefabs.ForgeHammer.GetComponent <tk2dSpriteAnimator>().Library;
            tk2dSpriteAnimation m_HammerAnimationLibrary       = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <tk2dSpriteAnimation>();

            List <tk2dSpriteAnimationClip> m_Clips = new List <tk2dSpriteAnimationClip>();

            foreach (tk2dSpriteAnimationClip clip in m_SourceHammerAnimationLibrary.clips)
            {
                if (!string.IsNullOrEmpty(clip.name))
                {
                    if (clip.name.ToLower().StartsWith("hammer_right_out"))
                    {
                        m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip));
                    }
                    else if (clip.name.ToLower().StartsWith("hammer_left_out"))
                    {
                        m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip));
                    }
                    else if (clip.name.ToLower().StartsWith("hammer_right_slam"))
                    {
                        m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip));
                    }
                    else if (clip.name.ToLower().StartsWith("hammer_left_slam"))
                    {
                        m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip));
                    }
                }
            }

            if (m_Clips.Count > 0)
            {
                m_HammerAnimationLibrary.clips = m_Clips.ToArray();
            }

            ExpandUtility.GenerateSpriteAnimator(ExpandPrefabs.EXFriendlyForgeHammer, m_HammerAnimationLibrary, 0, 0, false, false, false, false, false, false, 0, 0, false, false, false);

            ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXFriendlyForgeHammer, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, false, false, false, false, true, new IntVector2(30, 24), new IntVector2(16, 24));
            ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXFriendlyForgeHammer, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, false, false, false, false, true, new IntVector2(30, 8), new IntVector2(16, 16));

            AIBulletBank m_HammerBulletBank = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <AIBulletBank>();

            m_HammerBulletBank.useDefaultBulletIfMissing = true;
            m_HammerBulletBank.transforms = new List <Transform>(0);
            m_HammerBulletBank.Bullets    = new List <AIBulletBank.Entry>()
            {
                new AIBulletBank.Entry()
                {
                    Name                             = "default",
                    BulletObject                     = ExpandPrefabs.EXFriendlyForgeHammerBullet,
                    OverrideProjectile               = false,
                    PlayAudio                        = false,
                    AudioSwitch                      = string.Empty,
                    AudioEvent                       = string.Empty,
                    AudioLimitOncePerFrame           = false,
                    AudioLimitOncePerAttack          = false,
                    MuzzleLimitOncePerFrame          = false,
                    MuzzleInheritsTransformDirection = false,
                    SpawnShells                      = false,
                    ShellForce                       = 1.75f,
                    ShellForceVariance               = 0.75f,
                    DontRotateShell                  = false,
                    ShellGroundOffset                = 0,
                    ShellsLimitOncePerFrame          = false,
                    rampBullets                      = false,
                    rampStartHeight                  = 0,
                    rampTime                         = 0,
                    conditionalMinDegFromNorth       = 0,
                    forceCanHitEnemies               = true,
                    suppressHitEffectsIfOffscreen    = false,
                    preloadCount                     = 0,
                    ProjectileData                   = new ProjectileData()
                    {
                        damage  = 0,
                        speed   = 0,
                        range   = 0,
                        damping = 0,
                        UsesCustomAccelerationCurve     = false,
                        AccelerationCurve               = new AnimationCurve(),
                        CustomAccelerationCurveDuration = 0,
                        onDestroyBulletScript           = new BulletScriptSelector()
                        {
                            scriptTypeName = string.Empty
                        }
                    },
                    MuzzleFlashEffects = new VFXPool()
                    {
                        type = VFXPoolType.None, effects = new VFXComplex[0]
                    }
                }
            };

            GoopDefinition m_HammerGoopDefinition = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().GoopToDo);

            ExpandForgeHammerComponent EXFriendlyHammerController = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <ExpandForgeHammerComponent>();

            EXFriendlyHammerController.HitEffectAnimator = m_HitEffectObject.GetComponent <tk2dSpriteAnimator>();
            EXFriendlyHammerController.TargetAnimator    = m_TargetAnimatorObject.GetComponent <tk2dSpriteAnimator>();
            EXFriendlyHammerController.ShadowAnimator    = m_ShadowObject.GetComponent <tk2dSpriteAnimator>();
            EXFriendlyHammerController.ShootPoint        = m_ShootPointObject.transform;
            EXFriendlyHammerController.GoopToDo          = m_HammerGoopDefinition;

            FakePrefab.MarkAsFakePrefab(ExpandPrefabs.EXFriendlyForgeHammer);
            DontDestroyOnLoad(ExpandPrefabs.EXFriendlyForgeHammer);
        }
示例#14
0
        public static void ListBullets()
        {
            RoomHandler    currentRoom           = GameManager.Instance.PrimaryPlayer.CurrentRoom;
            List <AIActor> activeenemies_typeall = currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All);

            // int flag = 0;

            Debug.Log("Listing Bullets");

            for (int e = 0; e < activeenemies_typeall.Count; e++)
            {
                AIActor    enemy = activeenemies_typeall[e];
                GameObject objectToInstantiate = enemy.gameObject;

                //AIShooter aishooter = objectToInstantiate.GetComponent<AIShooter>();

                //if (aishooter)
                //{
                //    Debug.Log("Has aishooter");
                //}

                //else
                //{
                //    Debug.Log("No ai shooter");

                //}
                AIBulletBank bulletbank = objectToInstantiate.GetComponent <AIBulletBank>();


                List <AIBulletBank.Entry> bullets = bulletbank.Bullets;

                foreach (AIBulletBank.Entry bullet in bullets)
                {
                    //Debug.Log(bullet.Name);
                    //Debug.Log(bullet.ToString());

                    if (bullet != null)
                    {
                        if (bullet.Name == "reflect")
                        {
                            Debug.Log("Reflecting!");
                            GameObject           gameObject    = bullet.BulletObject;
                            Projectile           component     = gameObject.GetComponent <Projectile>();
                            SpeculativeRigidbody specRigidBody = component.specRigidbody;

                            //specRigidBody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)System.Delegate.Combine(specRigidBody.OnPreRigidbodyCollision,
                            //    new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(GRandomAgunimProjectile.Instance.OnPreRigidbodyCollision));

                            Debug.Log("Reflected F**k you");
                        }
                    }

                    else
                    {
                        Debug.Log("not reflected!");
                    }
                }

                // AIBulletBank.Entry bullet = enemy.aiShooter.GetBulletEntry("reflect");
            }
            Debug.Log("End Listing Bullets");
        }
        // Token: 0x06000056 RID: 86 RVA: 0x00004194 File Offset: 0x00002394
        public void KnightPlacer(PlayerController owner)
        {
            try
            {
                AIActor     orLoadByGuid             = EnemyDatabase.GetOrLoadByGuid("ec8ea75b557d4e7b8ceeaacdf6f8238c");
                IntVector2  intVector                = Vector2Extensions.ToIntVector2(owner.unadjustedAimPoint, (VectorConversions)2);
                RoomHandler absoluteRoomFromPosition = GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector);
                bool        flag = absoluteRoomFromPosition != null && absoluteRoomFromPosition == owner.CurrentRoom && owner.IsInCombat;
                if (flag)
                {
                    AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, owner.CenterPosition, absoluteRoomFromPosition, true, (AIActor.AwakenAnimationType) 2, true);
                    PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false);
                    aiactor.CanTargetEnemies   = true;
                    aiactor.CanTargetPlayers   = false;
                    aiactor.IsHarmlessEnemy    = true;
                    aiactor.CanDropCurrency    = false;
                    aiactor.IgnoreForRoomClear = true;
                    aiactor.MovementSpeed      = 5.95f;
                    aiactor.CompanionOwner     = owner;
                    aiactor.IsBuffEnemy        = true;
                    aiactor.isPassable         = true;
                    aiactor.gameObject.AddComponent <KillOnRoomClear>();
                    aiactor.reinforceType = (AIActor.ReinforceType) 2;
                    aiactor.HandleReinforcementFallIntoRoom(0.1f);

                    aiactor.specRigidbody.AddCollisionLayerIgnoreOverride(
                        CollisionMask.LayerToMask(CollisionLayer.EnemyHitBox, CollisionLayer.EnemyCollider, CollisionLayer.PlayerHitBox,
                                                  CollisionLayer.Projectile, CollisionLayer.PlayerCollider, CollisionLayer.PlayerBlocker, CollisionLayer.BeamBlocker)
                        );
                    aiactor.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.BulletBlocker, CollisionLayer.BulletBreakable, CollisionLayer.Trap));

                    /*
                     * aiactor.gameObject.AddComponent<CompanionController>();
                     * CompanionController component = aiactor.gameObject.GetComponent<CompanionController>();
                     * component.Initialize(owner);
                     */


                    this.nut = aiactor;
                    MindControlEffect orAddComponent = GameObjectExtensions.GetOrAddComponent <MindControlEffect>(aiactor.gameObject);
                    orAddComponent.owner = (this.gun.CurrentOwner as PlayerController);
                    if (aiactor.healthHaver != null)
                    {
                        aiactor.healthHaver.PreventAllDamage = true;
                    }
                    if (aiactor.bulletBank != null)
                    {
                        AIBulletBank bulletBank = aiactor.bulletBank;
                        bulletBank.OnProjectileCreated = (Action <Projectile>)Delegate.Combine(bulletBank.OnProjectileCreated, new Action <Projectile>(this.OnPostProcessProjectile));
                    }
                    if (aiactor.aiShooter != null)
                    {
                        AIShooter aiShooter = aiactor.aiShooter;
                        aiShooter.PostProcessProjectile = (Action <Projectile>)Delegate.Combine(aiShooter.PostProcessProjectile, new Action <Projectile>(this.OnPostProcessProjectile));
                    }
                    aiactor.LocalTimeScale = 3;
                }
            }
            catch (Exception e)
            {
                Tools.Print("Copper KnightPlacer", "FFFFFF", true);
                Tools.PrintException(e);
            }
        }