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); * }*/ }
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); } }
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); }
// 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)); } }
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); }
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(); } }
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); }
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); } }