private void HandleActiveTossedBallGrounded(DebrisObject obj) { obj.OnGrounded -= this.HandleActiveTossedBallGrounded; MonsterBall component = obj.GetComponent <MonsterBall>(); //component.spriteAnimator.Play("monster_ball_open"); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(component.m_storedEnemyGuid); if (orLoadByGuid == null) { if (m_Debug) { ETGModConsole.Log("[Monster_Ball] Tried to spawn an unknown AIActor! (Enemy GUID not found)"); } component.m_containsEnemy = false; component.m_wasBlackPhantom = false; component.m_storedEnemyGuid = string.Empty; component.IsCurrentlyActive = false; component.ApplyCooldown(this.LastOwner); return; } IntVector2 bestRewardLocation = obj.transform.position.GetAbsoluteRoom().GetBestRewardLocation(orLoadByGuid.Clearance, obj.sprite.WorldCenter, true); AIActor m_CachedEnemy = AIActor.Spawn(orLoadByGuid, bestRewardLocation, obj.transform.position.GetAbsoluteRoom(), true, AIActor.AwakenAnimationType.Default, true); // m_CachedEnemy.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); this.MakeCompanion(this.LastOwner, m_CachedEnemy, component.m_wasBlackPhantom); LootEngine.DoDefaultItemPoof(m_CachedEnemy.CenterPosition, false, false); component.m_containsEnemy = false; component.m_storedEnemyGuid = string.Empty; component.IsCurrentlyActive = false; component.ApplyCooldown(this.LastOwner); }
public override void OnPostFired(PlayerController player, Gun gun) { //This determines what sound you want to play when you fire a gun. //Sounds names are based on the Gungeon sound dump, which can be found at EnterTheGungeon/Etg_Data/StreamingAssets/Audio/GeneratedSoundBanks/Windows/sfx.txt gun.PreventNormalFireAudio = true; string guid; guid = "86dfc13486ee4f559189de53cfb84107"; PlayerController owner = player; if (player.PlayerHasActiveSynergy("Ye Olden Ages")) { guid = "05891b158cd542b1a5f3df30fb67a7ff"; } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2?intVector = new IntVector2?(player.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.IsHarmlessEnemy = true; aiactor.IgnoreForRoomClear = true; aiactor.HandleReinforcementFallIntoRoom(0f); }
private void OnKill(Projectile arg1, SpeculativeRigidbody arg2) { bool flag = !arg2.aiActor.healthHaver.IsDead; if (flag) { int num3 = UnityEngine.Random.Range(0, 4); bool flag3 = num3 == 0; if (flag3) { AkSoundEngine.PostEvent("Play_OBJ_chestwarp_use_01", gameObject); PlayerController player = (GameManager.Instance.PrimaryPlayer); string guid; guid = "ChaosBeing"; PlayerController owner = player; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2? intVector = new IntVector2?(player.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = false; aiactor.CanTargetPlayers = true; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.IsHarmlessEnemy = false; aiactor.IgnoreForRoomClear = true; aiactor.HandleReinforcementFallIntoRoom(-1f); SpawnManager.SpawnVFX((PickupObjectDatabase.GetById(573) as ChestTeleporterItem).TeleportVFX, aiactor.sprite.WorldCenter.ToVector3ZisY(0f), Quaternion.identity).GetComponent <tk2dBaseSprite>().PlaceAtPositionByAnchor(aiactor.sprite.WorldCenter.ToVector3ZisY(0f), tk2dBaseSprite.Anchor.MiddleCenter); } } }
private void SpawnExtraWaves(PlayerController user) { if (user.PlayerHasActiveSynergy(SynNames[0])) { IntVector2?spawnPos = user.CurrentRoom.GetRandomVisibleClearSpot(1, 1); int amount = 2; for (int i = 0; i < amount; i++) { AIActor HeavyKin = EnemyDatabase.GetOrLoadByGuid("df7fb62405dc4697b7721862c7b6b3cd"); AIActor TargetActor = AIActor.Spawn(HeavyKin, spawnPos.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(spawnPos.Value), true, AIActor.AwakenAnimationType.Default, true); (TargetActor.behaviorSpeculator.AttackBehaviors[0] as ShootGunBehavior).Range = (EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator.AttackBehaviors[0] as ShootGunBehavior).Range; TargetActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); TargetActor.gameObject.AddComponent <GoAwayAfterRoomClear>(); TargetActor.IsHarmlessEnemy = true; TargetActor.IgnoreForRoomClear = true; TargetActor.StartCoroutine(HandleTimer(TargetActor, duration)); float hpMax = TargetActor.healthHaver.GetMaxHealth(); TargetActor.healthHaver.SetHealthMaximum(hpMax * 3f); TargetActor.healthHaver.FullHeal(); TargetActor.CanTargetPlayers = false; CompanionisedEnemyBulletModifiers mod = TargetActor.gameObject.AddComponent <CompanionisedEnemyBulletModifiers>(); if (user.PlayerHasActiveSynergy("Great Leadership")) { mod.doPostProcess = true; } mod.TintBullets = true; mod.TintColor = new Color(252, 116, 216, 1); TargetActor.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.PlayerCollider)); GameObject gameObject = (GameObject)ResourceCache.Acquire("Global VFX/VFX_Teleport_Beam"); SpawnManager.SpawnVFX(gameObject, TargetActor.specRigidbody.UnitCenter, Quaternion.Euler(0, 0, 0)); } } }
public override void Pickup(PlayerController player) { base.Pickup(player); AIActor gameObject = player.aiActor; IntVector2?intVector = new IntVector2?(player.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(gameObject, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); }
public void knightPlacer(PlayerController owner) { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("ec8ea75b557d4e7b8ceeaacdf6f8238c"); 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 aiActor = AIActor.Spawn(orLoadByGuid.aiActor, owner.CenterPosition, room, true, AIActor.AwakenAnimationType.Default, 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.3f; aiActor.gameObject.AddComponent <KillOnRoomClear>(); aiActor.reinforceType = AIActor.ReinforceType.Instant; aiActor.HandleReinforcementFallIntoRoom(.1f); nut = aiActor; MindControlEffect orAddComponent = aiActor.gameObject.GetOrAddComponent <MindControlEffect>(); orAddComponent.owner = (this.gun.CurrentOwner as PlayerController); } }
protected override void DoEffect(PlayerController user) { if (base.LastOwner && base.LastOwner.CurrentRoom != null) { try { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("f38686671d524feda75261e469f30e0b"); IntVector2?intVector = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(1, 1)); bool flag = intVector != null; if (flag) { AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); aiactor.IgnoreForRoomClear = true; aiactor.bulletBank.OnProjectileCreated += this.NotDamagePlayer; aiactor.gameObject.AddComponent <KillOnRoomClear>(); } } catch (Exception ex) { ETGModConsole.Log(ex.Message, false); } } this.StartEffect(user); if (this.numberOfUses > 1) { base.StartCoroutine(this.Buff()); } else { base.StartCoroutine(ItemBuilder.HandleDuration(this, this.duration, user, new Action <PlayerController>(this.EndEffect))); } }
private void SpawnKevin() { string kevinGuid; if (Owner.HasPickupID(118)) { kevinGuid = "70216cae6c1346309d86d4a0b4603045"; } else { kevinGuid = "01972dee89fc4404a5c408d50007dad5"; } PlayerController player = this.Owner; var Kevin = EnemyDatabase.GetOrLoadByGuid(kevinGuid); IntVector2?bestRewardLocation = Owner.CurrentRoom.GetRandomVisibleClearSpot(2, 2); AIActor TargetActor = AIActor.Spawn(Kevin.aiActor, bestRewardLocation.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(bestRewardLocation.Value), true, AIActor.AwakenAnimationType.Default, true); //TargetActor.gameActor.ApplyEffect(this.charmEffect, 100f, null); TargetActor.CanTargetEnemies = true; TargetActor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); TargetActor.gameObject.AddComponent <KillOnRoomClear>(); TargetActor.IsHarmlessEnemy = true; //TargetActor.healthHaver.bossHealthBar = HealthHaver.BossBarType.MainBar; TargetActor.IgnoreForRoomClear = true; TargetActor.HandleReinforcementFallIntoRoom(0f); TargetActor.gameObject.AddComponent <AIActorIsKevin>(); //PRAISE BE OUR LORD AND SAVIOUR KEVIN. YOU WILL BOW TO HIM, OR YOU WILL DIE. }
public void SpawnParamedic(PlayerController player) { string guid; if (player) { guid = "22fc2c2c45fb47cf9fb5f7b043a70122"; } else { guid = "22fc2c2c45fb47cf9fb5f7b043a70122"; } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2?intVector = new IntVector2?(player.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, player.AimCenter, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Spawn, true); aiactor.CanTargetEnemies = false; aiactor.CanTargetPlayers = true; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.IsHarmlessEnemy = false; aiactor.IgnoreForRoomClear = true; aiactor.reinforceType = AIActor.ReinforceType.Instant; aiactor.HandleReinforcementFallIntoRoom(0f); }
public void OnEnteredCombat() { this.isBossRoom = false; foreach (AIActor enemy in base.Owner.CurrentRoom.GetActiveEnemies(Dungeonator.RoomHandler.ActiveEnemyType.RoomClear)) { if (enemy.healthHaver.IsBoss) { this.isBossRoom = true; } } if (UnityEngine.Random.value <= 0.1f && base.Owner && !this.isBossRoom) { try { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("fa6a7ac20a0e4083a4c2ee0d86f8bbf7"); IntVector2?intVector = new IntVector2?(base.Owner.CurrentRoom.GetRandomVisibleClearSpot(1, 1)); bool flag = intVector != null; if (flag) { AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.healthHaver.OnPreDeath += this.onPreDeath; } } catch (Exception ex) { ETGModConsole.Log(ex.Message, false); } this.timesSpawned += 1; } }
public void tophat(PlayerController player, HealthHaver enemy) { int bighead = UnityEngine.Random.Range(1, 6); if (bighead == 1) { if (!enemy.healthHaver.IsBoss) { string guid; guid = enemy.aiActor.EnemyGuid; if (guid != "4db03291a12144d69fe940d5a01de376") { PlayerController owner = base.Owner; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2? intVector = new IntVector2?(base.Owner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.IsHarmlessEnemy = true; aiactor.IgnoreForRoomClear = true; aiactor.HandleReinforcementFallIntoRoom(0f); } } } }
private void DoSpawn() { DisplacedEnemy enemy = BraveUtility.RandomElement(listOfDisplacedEnemies.DisplacedEnemies); var Enemy = EnemyDatabase.GetOrLoadByGuid(enemy.GUID); IntVector2?bestRewardLocation = m_player.CurrentRoom.GetRandomVisibleClearSpot(2, 2); AIActor TargetActor = AIActor.Spawn(Enemy.aiActor, bestRewardLocation.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(bestRewardLocation.Value), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); if (TargetActor.IsBlackPhantom && !enemy.ISJAMMED) { TargetActor.UnbecomeBlackPhantom(); } else if (!TargetActor.IsBlackPhantom && enemy.ISJAMMED) { TargetActor.BecomeBlackPhantom(); } TargetActor.healthHaver.ForceSetCurrentHealth(enemy.HEALTH); listOfDisplacedEnemies.DisplacedEnemies.Remove(enemy); AkSoundEngine.PostEvent("Play_OBJ_chestwarp_use_01", gameObject); var tpvfx = (PickupObjectDatabase.GetById(573) as ChestTeleporterItem).TeleportVFX; SpawnManager.SpawnVFX(tpvfx, TargetActor.sprite.WorldCenter, Quaternion.identity, true); }
private void OnHitEnemy(Projectile bullet, SpeculativeRigidbody enemy, bool fuckingsomethingidk) { bool flag = bullet != null && bullet.specRigidbody != null; if (flag) { if (enemy.healthHaver.IsBoss == false) { IntVector2?intVector = new IntVector2?(enemy.aiActor.ParentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(enemy.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Spawn, true); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.CanDropCurrency = false; aiactor.HitByEnemyBullets = false; aiactor.CollisionDamage = 0f; aiactor.IsHarmlessEnemy = true; aiactor.IgnoreForRoomClear = true; Instantiate <GameObject>(EasyVFXDatabase.SmallMagicPuffVFX, aiactor.CenterPosition, Quaternion.identity); } } //All that's left now is sprite stuff. //Your sprites should be organized, like how you see in the mod folder. //Every gun requires that you have a .json to match the sprites or else the gun won't spawn at all //.Json determines the hand sprites for your character. You can make a gun two handed by having both "SecondaryHand" and "PrimaryHand" in the .json file, which can be edited through Notepad or Visual Studios //By default this gun is a one-handed weapon //If you need a basic two handed .json. Just use the jpxfrd2.json. //And finally, don't forget to add your Gun to your ETGModule class! }
protected override void DoEffect(PlayerController user) { for (int i = 0; i < 4; i++) { try { var BulletKin = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5"); //float radius = 5; //var random = UnityEngine.Random.insideUnitCircle * radius; //IntVector2 temp = random.ToIntVector2() + LastOwner.CurrentRoom.GetNearestCellToPosition(LastOwner.specRigidbody.UnitCenter).position; // or something like this to get the player's pos relative to the room //IntVector2? spawnPos = LastOwner.CurrentRoom.GetRandomAvailableCell(temp); IntVector2?spawnPos = LastOwner.CurrentRoom.GetRandomVisibleClearSpot(1, 1); if (spawnPos != null) { AIActor TargetActor = AIActor.Spawn(BulletKin.aiActor, spawnPos.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(spawnPos.Value), true, AIActor.AwakenAnimationType.Default, true); TargetActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); TargetActor.gameObject.AddComponent <KillOnRoomClear>(); TargetActor.IsHarmlessEnemy = true; TargetActor.IgnoreForRoomClear = true; TargetActor.HandleReinforcementFallIntoRoom(0f); } } catch (Exception e) { ETGModConsole.Log(e.Message); } } }
public override void EffectTick(GameActor actor, RuntimeGameActorEffectData effectData) { if (this.AffectsEnemies && actor is AIActor && !actor.healthHaver.IsBoss) { if (actor.healthHaver.IsDead) { if (ShouldISpawn == true) { if (actor.aiActor.EnemyGuid != "5861e5a077244905a8c25c2b7b4d6ebb") { string guid; guid = "4db03291a12144d69fe940d5a01de376"; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2?intVector = new IntVector2?(actor.PlacedPosition); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, actor.CenterPosition, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.CanDropCurrency = false; aiactor.HitByEnemyBullets = false; aiactor.CollisionDamage = 0f; aiactor.IsHarmlessEnemy = true; aiactor.IgnoreForRoomClear = true; ShouldISpawn = false; } } } } }
//applies damage on last use protected override void DoEffect(PlayerController user) { AkSoundEngine.PostEvent("Play_ENM_smiley_whistle_02", base.gameObject); string guid; if (user) { guid = "86237c6482754cd29819c239403a2de7"; } else { guid = "86237c6482754cd29819c239403a2de7"; } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2?intVector = new IntVector2?(user.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.IsHarmlessEnemy = false; aiactor.IgnoreForRoomClear = true; aiactor.reinforceType = AIActor.ReinforceType.Instant; aiactor.HandleReinforcementFallIntoRoom(0f); }
private void SpawnGrim() { string guid; if (this.Owner) { guid = "0d3f7c641557426fbac8596b61c9fb45"; } else { guid = "0d3f7c641557426fbac8596b61c9fb45"; } PlayerController owner = base.Owner; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2? intVector = new IntVector2?(base.Owner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = false; aiactor.CanTargetPlayers = true; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.IsHarmlessEnemy = false; aiactor.IgnoreForRoomClear = true; aiactor.MovementSpeed = .5f; aiactor.reinforceType = AIActor.ReinforceType.Instant; aiactor.HandleReinforcementFallIntoRoom(0f); }
public void tophat(Vector3 position) { string guid; guid = "5861e5a077244905a8c25c2b7b4d6ebb"; if (Owner.PlayerHasActiveSynergy("Hat's Off to You")) { guid = "ddf12a4881eb43cfba04f36dd6377abb"; } if (Owner.HasPickupID(Game.Items["cak:hat_shells"].PickupObjectId)) { } PlayerController owner = base.Owner; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2? intVector = new IntVector2?(base.Owner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.IsHarmlessEnemy = true; aiactor.IgnoreForRoomClear = true; aiactor.HandleReinforcementFallIntoRoom(0f); }
// This function doesn't null check orLoadByGuid. If non fake prefab custom enemies are spawned (like the special rats on Hollow), then this would cause exception. // Added fall back GUIDs and use one of those for AIActor instead if this happens. public void AddSpecificEnemyToRoomProcedurallyFixed(RoomHandler room, string enemyGuid, bool reinforcementSpawn = false, Vector2?goalPosition = null) { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(enemyGuid); if (!orLoadByGuid) { List <string> FallbackGUIDs = new List <string>() { ExpandCustomEnemyDatabase.BootlegBullatGUID, ExpandCustomEnemyDatabase.BootlegBulletManGUID, ExpandCustomEnemyDatabase.BootlegBulletManBandanaGUID, ExpandCustomEnemyDatabase.BootlegShotgunManBlueGUID, ExpandCustomEnemyDatabase.BootlegShotgunManRedGUID }; FallbackGUIDs = FallbackGUIDs.Shuffle(); orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(BraveUtility.RandomElement(FallbackGUIDs)); } IntVector2 clearance = orLoadByGuid.specRigidbody.UnitDimensions.ToIntVector2(VectorConversions.Ceil); CellValidator cellValidator = delegate(IntVector2 c) { for (int i = 0; i < clearance.x; i++) { int x = c.x + i; for (int j = 0; j < clearance.y; j++) { int y = c.y + j; if (GameManager.Instance.Dungeon.data.isTopWall(x, y)) { return(false); } } } return(true); }; IntVector2?intVector; if (goalPosition != null) { intVector = room.GetNearestAvailableCell(goalPosition.Value, new IntVector2?(clearance), new CellTypes?(CellTypes.FLOOR), false, cellValidator); } else { intVector = room.GetRandomAvailableCell(new IntVector2?(clearance), new CellTypes?(CellTypes.FLOOR), false, cellValidator); } if (intVector != null) { AIActor aiactor = AIActor.Spawn(orLoadByGuid, intVector.Value, room, true, AIActor.AwakenAnimationType.Spawn, false); if (aiactor && reinforcementSpawn) { if (aiactor.specRigidbody) { aiactor.specRigidbody.CollideWithOthers = false; } aiactor.HandleReinforcementFallIntoRoom(0f); } } else { Debug.LogError("failed placement"); } }
private void SpawnWave() { CurrentWave++; if (CurrentWave < waves.Count) { foreach (string guid in waves[CurrentWave]) { AIActor prefab = EnemyDatabase.GetOrLoadByGuid(guid); IntVector2?vector = this.GetAbsoluteParentRoom().GetRandomAvailableCell(prefab.Clearance, new CellTypes?(CellTypes.FLOOR | CellTypes.PIT), false, null); AIActor aiactor = AIActor.Spawn(prefab, vector != null ? vector.Value : this.GetAbsoluteParentRoom().GetBestRewardLocation(prefab.Clearance, RoomHandler.RewardLocationStyle.Original, false), this.GetAbsoluteParentRoom(), false, AIActor.AwakenAnimationType.Default, true); aiactor.SetIsFlying(true, "because why not", false, true); aiactor.encounterTrackable.journalData.PrimaryDisplayName = "#ENEMY_PRIMALASPIDS_REVENGE"; this.GetAbsoluteParentRoom().SealRoom(); } } else { SpawnManager.SpawnVFX(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData.effect, this.statue.GetComponent <tk2dBaseSprite>().WorldBottomCenter, Quaternion.identity); AkSoundEngine.PostEvent("Play_WPN_grenade_blast_01", base.gameObject); this.statue.GetComponent <tk2dBaseSprite>().renderer.enabled = false; Chest chest = GameManager.Instance.RewardManager.Rainbow_Chest; IntVector2?vector = this.GetAbsoluteParentRoom().GetRandomAvailableCell(new IntVector2?(IntVector2.One * 4), new CellTypes?(CellTypes.FLOOR | CellTypes.PIT), false, null); Chest.Spawn(chest, vector != null ? vector.Value : this.GetAbsoluteParentRoom().GetBestRewardLocation(IntVector2.One * 4, RoomHandler.RewardLocationStyle.Original, false), this.GetAbsoluteParentRoom(), true); this.IsActive = false; this.DeclineKey = "#SHRINE_ASPID_DECLINE_SPENT"; } }
// 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); } }
protected void DupeBosses(AIActor target) { if (target.healthHaver.IsBoss) { AIActor target2 = target; AIActor.Spawn(target2, target.transform.position, player.CurrentRoom, true, AIActor.AwakenAnimationType.Default, true); } }
private IEnumerator DelayedSpawnSpent(Vector2 vector) { yield return(new WaitForSeconds(.01f)); IntVector2 intV = vector.ToIntVector2(VectorConversions.Floor); AIActor aiactor2 = AIActor.Spawn(EnemyDatabase.GetOrLoadByGuid("e21ac9492110493baef6df02a2682a0d"), intV, GameManager.Instance.GetRandomActivePlayer().CurrentRoom, true, AIActor.AwakenAnimationType.Default, true); yield break; }
protected override IEnumerator Top() { AkSoundEngine.PostEvent("Play_ENV_oilfire_ignite_01", base.BulletBank.aiActor.gameObject); IntVector2 meceea = new IntVector2(this.BulletBank.aiActor.GetAbsoluteParentRoom().GetRandomAvailableCellDumb().x, this.BulletBank.aiActor.GetAbsoluteParentRoom().GetRandomAvailableCellDumb().y); var Enemy = EnemyDatabase.GetOrLoadByGuid("flameclone"); Instantiate <GameObject>(EasyVFXDatabase.FlameVFX, meceea.ToVector3(), Quaternion.identity); AIActor.Spawn(Enemy.aiActor, meceea, GameManager.Instance.PrimaryPlayer.CurrentRoom, true, AIActor.AwakenAnimationType.Default, true); yield break; }
public void FriendsWithGrim() { if (this.m_player != null) { AIActor grim = EnemyDatabase.GetOrLoadByGuid("88f037c3f93b4362a040a87b30770407"); IntVector2?vector = this.m_player.CurrentRoom.GetRandomAvailableCell(grim.Clearance, grim.PathableTiles, false, null); AIActor.Spawn(grim, vector != null ? vector.Value : this.m_player.CurrentRoom.GetBestRewardLocation(grim.Clearance, RoomHandler.RewardLocationStyle.Original, false), this.m_player.CurrentRoom, true, AIActor.AwakenAnimationType.Default, true).ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1, null); } }
private static void AffectEnemy(AIActor target) { bool flag = !target.IsNormalEnemy && target.healthHaver.IsBoss && !target.IsHarmlessEnemy; if (flag) { AIActor target2 = target; AIActor.Spawn(target2, target.transform.position, playerS.CurrentRoom, true, AIActor.AwakenAnimationType.Default, true); target.healthHaver.ApplyDamage((target.healthHaver.GetMaxHealth() * .4f), Vector2.zero, "Ishar", CoreDamageTypes.None, DamageCategory.Normal, false, null, true); target2.healthHaver.ApplyDamage((target2.healthHaver.GetMaxHealth() * .4f), Vector2.zero, "Ishar", CoreDamageTypes.None, DamageCategory.Normal, false, null, true); } }
protected override void DoEffect(PlayerController owner) { for (int i = 0; i <= 3; i++) { try { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("21dd14e5ca2a4a388adab5b11b69a1e1"); IntVector2?intVector = new IntVector2?(owner.CurrentRoom.GetRandomVisibleClearSpot(1, 1)); bool flag = intVector != null; if (flag) { if (i == 1) { AIActor one = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); one.IgnoreForRoomClear = true; one.CanTargetEnemies = true; one.CanTargetPlayers = false; one.IsHarmlessEnemy = true; one.gameObject.AddComponent <KillOnRoomClear>(); buddy1 = one; } if (i == 2) { AIActor two = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); two.IgnoreForRoomClear = true; two.CanTargetEnemies = true; two.CanTargetPlayers = false; two.IsHarmlessEnemy = true; two.gameObject.AddComponent <KillOnRoomClear>(); buddy2 = two; } if (i == 3) { AIActor three = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); three.IgnoreForRoomClear = true; three.CanTargetPlayers = false; three.CanTargetEnemies = true; three.IsHarmlessEnemy = true; three.gameObject.AddComponent <KillOnRoomClear>(); buddy3 = three; } } } catch (Exception ex) { ETGModConsole.Log(ex.Message, false); } } }
private void OnEnteredCombat() { if (Owner && UnityEngine.Random.value <= 0.015f) { var KeyBulletKin = EnemyDatabase.GetOrLoadByGuid("699cd24270af4cd183d671090d8323a1"); IntVector2?spawnPos = Owner.CurrentRoom.GetRandomVisibleClearSpot(1, 1); if (spawnPos != null) { AIActor TargetActor = AIActor.Spawn(KeyBulletKin.aiActor, spawnPos.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(spawnPos.Value), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); TargetActor.HandleReinforcementFallIntoRoom(0f); } } }
protected override void DoEffect(PlayerController user) { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("5861e5a077244905a8c25c2b7b4d6ebb"); IntVector2?intVector = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, intVector.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor memehatt = EnemyDatabase.GetOrLoadByGuid("ddf12a4881eb43cfba04f36dd6377abb"); IntVector2?meme = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor TOPPER = AIActor.Spawn(memehatt.aiActor, meme.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(meme.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor ase = EnemyDatabase.GetOrLoadByGuid("86dfc13486ee4f559189de53cfb84107"); IntVector2?mem = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor poof = AIActor.Spawn(ase.aiActor, mem.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(mem.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor ae = EnemyDatabase.GetOrLoadByGuid("6f818f482a5c47fd8f38cce101f6566c"); IntVector2?memee = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dag = AIActor.Spawn(ae.aiActor, memee.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(memee.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor aerr = EnemyDatabase.GetOrLoadByGuid("8bb5578fba374e8aae8e10b754e61d62"); IntVector2?me = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dager = AIActor.Spawn(aerr.aiActor, me.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(me.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor aerddr = EnemyDatabase.GetOrLoadByGuid("df4e9fedb8764b5a876517431ca67b86"); IntVector2?mec = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dageree = AIActor.Spawn(aerddr.aiActor, mec.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(mec.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor aerddccr = EnemyDatabase.GetOrLoadByGuid("39e6f47a16ab4c86bec4b12984aece4c"); IntVector2?mecee = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dagereecc = AIActor.Spawn(aerddccr.aiActor, mecee.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(mecee.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor aerddccrf = EnemyDatabase.GetOrLoadByGuid("3cadf10c489b461f9fb8814abc1a09c1"); IntVector2?meceerr = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dagerqreccceecc = AIActor.Spawn(aerddccrf.aiActor, meceerr.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(meceerr.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor aerddccre = EnemyDatabase.GetOrLoadByGuid("95ec774b5a75467a9ab05fa230c0c143"); IntVector2?meceea = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dagerqrqeecc = AIActor.Spawn(aerddccre.aiActor, meceea.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(meceea.Value), true, AIActor.AwakenAnimationType.Default, true); AIActor aerfdddccr = EnemyDatabase.GetOrLoadByGuid("47bdfec22e8e4568a619130a267eab5b"); IntVector2?meceeffffffff = new IntVector2?(base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2)); AIActor dagercceecc = AIActor.Spawn(aerfdddccr.aiActor, meceeffffffff.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(meceeffffffff.Value), true, AIActor.AwakenAnimationType.Default, true); RoomHandler room = base.LastOwner.CurrentRoom; IntVector2 randomVisibleClearSpot5 = base.LastOwner.CurrentRoom.GetRandomVisibleClearSpot(1, 1); Chest rainbow_Chest = GameManager.Instance.RewardManager.D_Chest; rainbow_Chest.IsLocked = false; Chest.Spawn(rainbow_Chest, randomVisibleClearSpot5); }
private void ImprovedMindControl(PlayerController player) { var Enemy = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5"); if (player.PlayerHasActiveSynergy("Skilled & Killed")) { Enemy = EnemyDatabase.GetOrLoadByGuid("70216cae6c1346309d86d4a0b4603045"); } if (player.PlayerHasActiveSynergy("Darkened Soul")) { Enemy = EnemyDatabase.GetOrLoadByGuid("39e6f47a16ab4c86bec4b12984aece4c"); } if (player.PlayerHasActiveSynergy("Ridin' Shotgun")) { Enemy = EnemyDatabase.GetOrLoadByGuid("128db2f0781141bcb505d8f00f9e4d47"); } AIActor aiactor = AIActor.Spawn(Enemy.aiActor, player.CenterPosition, GameManager.Instance.PrimaryPlayer.CurrentRoom, true, AIActor.AwakenAnimationType.Spawn, true); MindControlNotGamer THEBRAINWAVES = aiactor.gameObject.GetOrAddComponent <MindControlNotGamer>(); THEBRAINWAVES.owner = player; GameManager.Instance.MainCameraController.StopTrackingPlayer(); GameManager.Instance.MainCameraController.SetManualControl(true, false); aiactor.IgnoreForRoomClear = true; aiactor.CanTargetEnemies = true; aiactor.HitByEnemyBullets = true; aiactor.MovementSpeed = player.stats.MovementSpeed; aiactor.gameObject.AddComponent <KillOnRoomClear>(); player.healthHaver.IsVulnerable = false; player.ToggleRenderer(false, "arbitrary teleporter."); player.ToggleGunRenderers(false, "arbitrary teleporter."); player.ToggleHandRenderers(false, "arbitrary teleporter."); aiactor.healthHaver.OnDeath += this.SummonPlayer; if (player.PlayerHasActiveSynergy(SynergyNameToCheck)) { BraveTime.ClearMultiplier(base.gameObject); Gamer = true; player.RemovePassiveItem(279); aiactor.healthHaver.OnDamaged += this.SwapPositions; BraveTime.ClearMultiplier(base.gameObject); } daguy = aiactor; player.IsVisible = false; player.specRigidbody.CollideWithOthers = false; player.MovementModifiers += this.NoMotionModifier; player.IsStationary = true; player.CurrentStoneGunTimer = 9999999999999999999999f; StartCoroutine("jaja"); }