Example #1
0
        static void Main(string[] args)
        {
            //RoomType room = new RoomType
            //{
            //    BaseRate = 300,
            //    Type = ROOM_TYPE.QueenRoom,
            //    Inventory = 50,
            //    Ameneties = "am",
            //    Description = "desc",
            //    ImageUrl = "img"
            //};
            //RoomRepository roomRepo = new RoomRepository(new HotelModelContext());
            //roomRepo.InsertRoom(room);
            //roomRepo.Save();

            ReservationHandler reservationHandler = new ReservationHandler();
            RoomHandler        roomHandler        = new RoomHandler();
            Guid confirmation = reservationHandler.MakeReservation(
                "root",
                ROOM_TYPE.QueenRoom,
                DateTime.Today,
                DateTime.Today.AddDays(5),
                new List <Guest> {
                new Guest
                {
                    FirstName = "oot",
                    LastName  = "R",
                }
            },
                roomHandler.GetRoomPriceList(ROOM_TYPE.QueenRoom, DateTime.Today, DateTime.Today.AddDays(5))
                );

            Console.WriteLine(confirmation);
            Console.ReadKey();
        }
Example #2
0
        private void GrowATurtle(PlayerController arg1, HealthHaver arg2)
        {
            AIActor     orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("cc9c41aa8c194e17b44ac45f993dd212");
            RoomHandler absoluteRoom = arg1.gameActor.CenterPosition.GetAbsoluteRoom();

            CreateNewCompanion(arg1, arg2.gameActor.CenterPosition, absoluteRoom);
        }
        private void DoRealConfigure(bool activateNow)
        {
            if (ForceLeft)
            {
                transform.position += new Vector3(-1f, -1f, 0f);
            }
            else if (ForceRight)
            {
                transform.position += new Vector3(-3.5625f, -1f, 0f);
            }
            m_LastKnownPosition = transform.position;
            tk2dSpriteAnimator spriteAnimator = base.spriteAnimator;

            spriteAnimator.AnimationEventTriggered = (Action <tk2dSpriteAnimator, tk2dSpriteAnimationClip, int>)Delegate.Combine(spriteAnimator.AnimationEventTriggered, new Action <tk2dSpriteAnimator, tk2dSpriteAnimationClip, int>(HandleAnimationEvent));
            m_room.Entered += delegate(PlayerController a) { Activate(); };

            if (activateNow)
            {
                Activate();
            }
            if (DeactivateOnEnemiesCleared)
            {
                RoomHandler room = m_room;
                room.OnEnemiesCleared = (Action)Delegate.Combine(room.OnEnemiesCleared, new Action(Deactivate));
            }
        }
Example #4
0
        private void RandomToadieAirDrop(GameObject lootCratePrefab, RoomHandler currentRoom, IntVector2?Clearence = null)
        {
            if (!Clearence.HasValue)
            {
                Clearence = new IntVector2(2, 2);
            }

            IntVector2?DropLocation = FindRandomDropLocation(currentRoom, Clearence.Value);

            if (DropLocation.HasValue)
            {
                EmergencyCrateController lootCrate = Instantiate(lootCratePrefab, DropLocation.Value.ToVector2().ToVector3ZUp(1f), Quaternion.identity).GetComponent <EmergencyCrateController>();
                if (lootCrate == null)
                {
                    return;
                }

                lootCrate.ChanceToExplode    = 0;
                lootCrate.ChanceToSpawnEnemy = 1;
                lootCrate.EnemyPlaceable     = m_CustomEnemyPlacable(BraveUtility.RandomElement(ToadieGUIDs));

                lootCrate.Trigger(new Vector3(-5f, -5f, -5f), DropLocation.Value.ToVector3() + new Vector3(15f, 15f, 15f), currentRoom, true);
                currentRoom.ExtantEmergencyCrate = lootCrate.gameObject;
            }
            return;
        }
    private void CreateRoomAckEvent(string reqData, Hashtable roomList)
    {
        //Send(s, validUid+":"+roomName+":CreateRoomReq", 1000);
        String[] roomData = reqData.Split(':');
        try
        {
            /* example of roomList
            * key: "fc1202" value:"title"
            * in this case, fc1202 is the user creating a room called "title"
            */
            roomList.Add(roomData[0], roomData[1]);

            Console.WriteLine("We have " + roomList.Count.ToString() + " Rooms"
                + "\n" + roomData[0] + " creates room no." + roomData[1]);

            //make a room class
            room = new RoomHandler();
            room.StartRoom(tcpClient);
            room.hostName = roomData[0];

            /* example of roomClassList
            * key: "title" value: room that has been created by clicking a create room button
            */
            roomClassList.Add(roomData[1], room);

            Send(roomData[1] + ":CreateRoomAck");
        }
        //Handle Exception
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return;
        }
    }
Example #6
0
        public void Update(AttackBehaviorGroup attackGroup)
        {
            RoomHandler absoluteRoom      = base.transform.position.GetAbsoluteRoom();
            AIActor     randomActiveEnemy = null;

            if (randomActiveEnemy == null)
            {
                randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
            }
            if (randomActiveEnemy == this.aiActor)
            {
                randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
            }
            if (randomActiveEnemy.aiActor != this.aiActor)
            {
                randomActiveEnemy.sprite.renderer.material.SetFloat("_EmissivePower", 23.45f);
                randomActiveEnemy.bulletBank.OnProjectileCreated += (Projectile rpoj) =>
                {
                    Color c = rpoj.sprite.color;
                    c.a = 0.5f;
                    rpoj.sprite.color = c;
                };
            }
            if (randomActiveEnemy.healthHaver.IsDead)
            {
                randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
            }
        }
        public static IEnumerator SpawnHammer(PlayerController user, float spawnDelay = 0)
        {
            if (spawnDelay > 0)
            {
                yield return(new WaitForSeconds(spawnDelay));
            }

            // Tools.Print("Spawning A Friendly Hammer!", "FFFFFF", false);
            RoomHandler room          = user.CurrentRoom;
            IntVector2? spawnPosition = room.GetRandomVisibleClearSpot(2, 2);

            yield return(new WaitForSeconds(1f));

            if (!spawnPosition.HasValue)
            {
                spawnPosition = (user.CenterPosition.ToIntVector2() - user.CurrentRoom.area.basePosition);
            }
            if (spawnPosition.HasValue)
            {
                RoomHandler currentRoom = user.CurrentRoom;
                GameObject  ForgeHammer = DungeonPlaceableUtility.InstantiateDungeonPlaceable(ExpandPrefabs.EXFriendlyForgeHammer, currentRoom, spawnPosition.Value, true);
                yield return(null);

                if (ForgeHammer)
                {
                    ForgeHammer.AddComponent <ExpandForgeHammerComponent>();
                    ExpandForgeHammerComponent expandForgeHammer = ForgeHammer.GetComponent <ExpandForgeHammerComponent>();
                    expandForgeHammer.m_Owner = user;
                    expandForgeHammer.ConfigureOnPlacement(currentRoom);
                }

                yield return(null);
            }
            yield break;
        }
Example #8
0
        public override void Update()
        {   // deathcontroller
            if (host != null && host.healthHaver.GetCurrentHealth() == 0)
            {
                this.LastOwner.CurrentStoneGunTimer = 1f;

                this.LastOwner.MovementModifiers -= this.NoMotionModifier;
                this.LastOwner.IsStationary       = false;
                modifierController        = 0;
                this.LastOwner.IsEthereal = false;


                this.LastOwner.SetIsStealthed(false, "cause they just are");
                PassiveItem.DecrementFlag(this.LastOwner, typeof(LiveAmmoItem));
                this.LastOwner.stats.RecalculateStats(LastOwner, true);
                CamToggle = 0;
                GameManager.Instance.MainCameraController.StartTrackingPlayer();
                GameManager.Instance.MainCameraController.SetManualControl(false, true);
            }

            if (host != null && CamToggle == 1)
            {
                // in head state
                CameraController m_camera = GameManager.Instance.MainCameraController;
                m_camera.StopTrackingPlayer();
                m_camera.SetManualControl(true, false);
                m_camera.OverridePosition = host.CenterPosition;
                TargetNumber1(host, this.LastOwner);
                RoomHandler room = this.LastOwner.CurrentRoom;
                proximity(this.LastOwner);
                foreach (var enemy in room.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                {
                    System.Random rng          = new System.Random();
                    int           chanceToFire = rng.Next(1, 80);

                    if (chanceToFire == 1 && enemy != host)
                    {
                        enemy.aiShooter.ShootAtTarget();
                    }
                }
                //poison
                List <AIActor> activeEnemies  = base.LastOwner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All);
                Vector2        centerPosition = host.specRigidbody.UnitCenter;
                foreach (AIActor aiactor in activeEnemies)
                {
                    bool flag3 = Vector2.Distance(aiactor.CenterPosition, centerPosition) < 1.5f && aiactor.healthHaver.GetMaxHealth() > 0f && aiactor != null && aiactor.specRigidbody != null && base.LastOwner != null;

                    if (flag3 && aiactor != host)
                    {
                        aiactor.ApplyEffect(Game.Items["irradiated_lead"].GetComponent <BulletStatusEffectItem>().HealthModifierEffect, 4f, null);
                        aiactor.ApplyEffect(Game.Items["hot_lead"].GetComponent <BulletStatusEffectItem>().HealthModifierEffect, 4f, null);
                        aiactor.ApplyEffect(Game.Items["battery_bullets"].GetComponent <BulletStatusEffectItem>().HealthModifierEffect, 4f, null);
                    }
                }
            }



            base.Update();
        }
Example #9
0
        private IEnumerator HandleCombatRoomExpansion(PaydayDrillItem drillItem, RoomHandler sourceRoom, RoomHandler targetRoom, Chest sourceChest)
        {
            yield return(new WaitForSeconds(drillItem.DelayPreExpansion));

            float duration          = 5.5f;
            float elapsed           = 0f;
            int   numExpansionsDone = 0;

            while (elapsed < duration)
            {
                elapsed += BraveTime.DeltaTime * 9f;
                while (elapsed > numExpansionsDone)
                {
                    numExpansionsDone++;
                    ExpandRoom(drillItem, targetRoom);
                    AkSoundEngine.PostEvent("Play_OBJ_rock_break_01", GameManager.Instance.gameObject);
                }
                yield return(null);
            }
            Dungeon d = GameManager.Instance.Dungeon;

            Pathfinder.Instance.InitializeRegion(d.data, targetRoom.area.basePosition + new IntVector2(-5, -5), targetRoom.area.dimensions + new IntVector2(10, 10));
            yield return(new WaitForSeconds(drillItem.DelayPostExpansionPreEnemies));

            yield return(ExpandHandleCombatWaves(drillItem, d, targetRoom, sourceChest));

            yield break;
        }
Example #10
0
 protected override void Update()
 {
     if (Owner && Owner.CurrentRoom != null)
     {
         if (Owner.CurrentRoom != lastCheckedRoom)
         {
             RoomHandler curRoom = Owner.CurrentRoom;
             bool        isInOrAdjacentToBossRoom = false;
             if (curRoom.area.PrototypeRoomCategory == PrototypeDungeonRoom.RoomCategory.BOSS)
             {
                 isInOrAdjacentToBossRoom = true;
             }
             else
             {
                 for (int i = 0; i < curRoom.connectedRooms.Count; i++)
                 {
                     if (curRoom.connectedRooms[i].area.PrototypeRoomCategory == PrototypeDungeonRoom.RoomCategory.BOSS)
                     {
                         isInOrAdjacentToBossRoom = true;
                     }
                 }
             }
             if (isInOrAdjacentToBossRoom && this.CanBeDropped)
             {
                 this.CanBeDropped = false;
             }
             else if (!this.CanBeDropped)
             {
                 this.CanBeDropped = true;
             }
             lastCheckedRoom = Owner.CurrentRoom;
         }
     }
     base.Update();
 }
Example #11
0
 private void HandleStealthEffect(TableTechChaosEffectIdentifier identifier, FlippableCover obj)
 {
     if (identifier == TableTechChaosEffectIdentifier.STEALTH)
     {
         PlayerController owner = base.Owner;
         this.BreakStealth(owner);
         owner.OnItemStolen += this.BreakStealthOnSteal;
         owner.ChangeSpecialShaderFlag(1, 1f);
         owner.healthHaver.OnDamaged += this.OnDamaged;
         owner.SetIsStealthed(true, "table tech chaos");
         owner.SetCapableOfStealing(true, "table tech chaos", null);
         GameManager.Instance.StartCoroutine(this.Unstealthy());
         if (base.Owner.PlayerHasActiveSynergy("#HIDDEN_TECH_SUPER_CHAOS"))
         {
             float       num;
             RoomHandler room = obj.transform.position.GetAbsoluteRoom();
             if (room != null)
             {
                 AIActor aiactor = room.GetNearestEnemy(obj.specRigidbody.UnitCenter, out num, true, true);
                 if (aiactor != null)
                 {
                     aiactor.PlayEffectOnActor(RedpoofVFX, Vector3.zero, false, true, false);
                     aiactor.healthHaver.ApplyDamage(UnityEngine.Random.Range(15, 30), obj.specRigidbody.UnitCenter - aiactor.sprite.WorldCenter, "Hidden Tech Assassin", CoreDamageTypes.None, DamageCategory.Unstoppable, true, null, false);
                 }
             }
         }
     }
 }
Example #12
0
 private void ConnectClusteredRooms(RoomHandler first, RoomHandler second, PrototypeDungeonRoom firstPrototype, PrototypeDungeonRoom secondPrototype, int firstRoomExitIndex, int secondRoomExitIndex, int room1ExitLengthPadding = 3, int room2ExitLengthPadding = 3)
 {
     if (first.area.instanceUsedExits == null | second.area.exitToLocalDataMap == null |
         second.area.instanceUsedExits == null | first.area.exitToLocalDataMap == null)
     {
         return;
     }
     try {
         first.area.instanceUsedExits.Add(firstPrototype.exitData.exits[firstRoomExitIndex]);
         RuntimeRoomExitData runtimeRoomExitData = new RuntimeRoomExitData(firstPrototype.exitData.exits[firstRoomExitIndex]);
         first.area.exitToLocalDataMap.Add(firstPrototype.exitData.exits[firstRoomExitIndex], runtimeRoomExitData);
         second.area.instanceUsedExits.Add(secondPrototype.exitData.exits[secondRoomExitIndex]);
         RuntimeRoomExitData runtimeRoomExitData2 = new RuntimeRoomExitData(secondPrototype.exitData.exits[secondRoomExitIndex]);
         second.area.exitToLocalDataMap.Add(secondPrototype.exitData.exits[secondRoomExitIndex], runtimeRoomExitData2);
         first.connectedRooms.Add(second);
         first.connectedRoomsByExit.Add(firstPrototype.exitData.exits[firstRoomExitIndex], second);
         first.childRooms.Add(second);
         second.connectedRooms.Add(first);
         second.connectedRoomsByExit.Add(secondPrototype.exitData.exits[secondRoomExitIndex], first);
         second.parentRoom = first;
         runtimeRoomExitData.linkedExit            = runtimeRoomExitData2;
         runtimeRoomExitData2.linkedExit           = runtimeRoomExitData;
         runtimeRoomExitData.additionalExitLength  = room1ExitLengthPadding;
         runtimeRoomExitData2.additionalExitLength = room2ExitLengthPadding;
     } catch (Exception) {
         ETGModConsole.Log("WARNING: Exception caused during CoonectClusteredRunTimeRooms method!");
         return;
     }
 }
        public void BlankModHook(Action <SilencerInstance, BlankModificationItem, Vector2, PlayerController> orig, SilencerInstance silencer, BlankModificationItem bmi, Vector2 centerPoint, PlayerController user)
        {
            orig(silencer, bmi, centerPoint, user);

            if (user.HasPickupID(KinAmmoletID))
            {
                RoomHandler currentRoom = user.CurrentRoom;
                if (currentRoom.IsSealed)
                {
                    string enemyToSpawnGUID = "01972dee89fc4404a5c408d50007dad5";
                    bool   shouldJam        = false;
                    if (user.PlayerHasActiveSynergy("Shotgun Club") && UnityEngine.Random.value <= 0.5f)
                    {
                        enemyToSpawnGUID = "128db2f0781141bcb505d8f00f9e4d47";
                    }
                    if (user.PlayerHasActiveSynergy("Friends On The Other Side"))
                    {
                        shouldJam = true;
                    }

                    CompanionisedEnemyUtility.SpawnCompanionisedEnemy(user, enemyToSpawnGUID, centerPoint.ToIntVector2(), false, ExtendedColours.brown, 15, 2, shouldJam, true);
                    if ((user.PlayerHasActiveSynergy("Aim Twice, Shoot Once")))
                    {
                        CompanionisedEnemyUtility.SpawnCompanionisedEnemy(user, enemyToSpawnGUID, centerPoint.ToIntVector2(), false, ExtendedColours.brown, 15, 2, shouldJam, true);
                    }
                }
            }
        }
Example #14
0
        private void StunEnemiesForTeleport(RoomHandler targetRoom, float StunDuration = 0.5f)
        {
            if (!targetRoom.HasActiveEnemies(RoomHandler.ActiveEnemyType.All))
            {
                return;
            }
            List <AIActor> activeEnemies = targetRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All);

            if (activeEnemies == null | activeEnemies.Count <= 0)
            {
                return;
            }
            for (int i = 0; i < activeEnemies.Count; i++)
            {
                if (activeEnemies[i].IsNormalEnemy && activeEnemies[i].healthHaver && !activeEnemies[i].healthHaver.IsBoss)
                {
                    Vector2 vector  = (!activeEnemies[i].specRigidbody) ? activeEnemies[i].sprite.WorldBottomLeft : activeEnemies[i].specRigidbody.UnitBottomLeft;
                    Vector2 vector2 = (!activeEnemies[i].specRigidbody) ? activeEnemies[i].sprite.WorldTopRight : activeEnemies[i].specRigidbody.UnitTopRight;
                    if (activeEnemies[i] && activeEnemies[i].behaviorSpeculator)
                    {
                        activeEnemies[i].behaviorSpeculator.Stun(StunDuration, false);
                    }
                }
            }
        }
Example #15
0
        public void TeleportToRoom(PlayerController targetPlayer, RoomHandler targetRoom, bool isSecondaryPlayer = false)
        {
            m_IsTeleporting = true;
            // if (targetPlayer.m_isStartingTeleport) { return; }
            // targetPlayer.m_isStartingTeleport = true;
            IntVector2?randomAvailableCell = targetRoom.GetRandomAvailableCell(new IntVector2?(new IntVector2(2, 2)), new CellTypes?(CellTypes.FLOOR), false, null);

            if (!randomAvailableCell.HasValue)
            {
                m_IsTeleporting = false;
                return;
            }
            if (GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER && !isSecondaryPlayer)
            {
                PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(targetPlayer);
                if (otherPlayer)
                {
                    TeleportToRoom(otherPlayer, targetRoom, true);
                }
            }
            // targetPlayer.m_isStartingTeleport = false;
            targetPlayer.DoVibration(Vibration.Time.Normal, Vibration.Strength.Medium);
            GameManager.Instance.StartCoroutine(HandleTeleportToRoom(targetPlayer, randomAvailableCell.Value.ToCenterVector2()));
            targetPlayer.specRigidbody.Velocity = Vector2.zero;
            targetPlayer.knockbackDoer.TriggerTemporaryKnockbackInvulnerability(1f);
            targetRoom.EnsureUpstreamLocksUnlocked();
            // GameManager.Instance.StartCoroutine(DelayedRoomReset(targetPlayer, targetPlayer.CurrentRoom));
        }
Example #16
0
    void OnClick()
    {
        Debug.Log("Click" + this.name);
        RoomHandler handler = FindObjectOfType <RoomHandler>();

        handler.OnRoomChoose(this.name);
    }
Example #17
0
 private void GrabbyGrabTime(PlayerController player, float oof)
 {
     cooldown += oof;
     if (cooldown >= 120)
     {
         AIActor     actor;
         RoomHandler absoluteRoom = base.transform.position.GetAbsoluteRoom();
         actor = Owner.CurrentRoom.GetRandomActiveEnemy(true);
         GameObject hand = UnityEngine.Object.Instantiate <GameObject>(CelsItems.hellDrag.HellDragVFX);
         AkSoundEngine.PostEvent("Play_BOSS_lichB_grab_01", gameObject);
         if (!actor.healthHaver.IsBoss)
         {
             actor.healthHaver.ApplyDamage(10000000, Vector2.zero, "GetFuckedNerd", CoreDamageTypes.Void, DamageCategory.Unstoppable, true, null, true);
             actor.sprite.renderer.enabled = false;
             actor.shadowDeathType         = AIActor.ShadowDeathType.None;
             tk2dBaseSprite corpsesprite = actor.CorpseObject.GetComponent <tk2dBaseSprite>();
             corpsesprite.sprite.renderer.enabled = false;
         }
         else
         {
             if (actor.healthHaver.IsBoss)
             {
                 actor.healthHaver.ApplyDamage(80, Vector2.zero, "GetFuckedNerdButSlightlyLessThanNormalNerds", CoreDamageTypes.Void, DamageCategory.Unstoppable, true, null, true);
             }
         }
         tk2dBaseSprite component1 = hand.GetComponent <tk2dBaseSprite>();
         component1.usesOverrideMaterial = true;
         component1.PlaceAtLocalPositionByAnchor(actor.specRigidbody.UnitCenter, tk2dBaseSprite.Anchor.LowerCenter);
         component1.renderer.material.shader = ShaderCache.Acquire("Brave/Effects/StencilMasked");
         cooldown -= 120;
     }
 }
Example #18
0
        private void HandleFear(PlayerController user, bool active)
        {
            RoomHandler currentRoom = user.CurrentRoom;
            bool        flag        = !currentRoom.HasActiveEnemies(RoomHandler.ActiveEnemyType.All);

            if (!flag)
            {
                if (active)
                {
                    foreach (AIActor aiactor in currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                    {
                        bool flag2 = aiactor.behaviorSpeculator != null;
                        if (flag2)
                        {
                            aiactor.behaviorSpeculator.FleePlayerData = this.fleeData;
                            FleePlayerData fleePlayerData = new FleePlayerData();
                        }
                    }
                }
                else
                {
                    foreach (AIActor aiactor2 in currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                    {
                        bool flag3 = aiactor2.behaviorSpeculator != null && aiactor2.behaviorSpeculator.FleePlayerData != null;
                        if (flag3)
                        {
                            aiactor2.behaviorSpeculator.FleePlayerData.Player = null;
                        }
                    }
                }
            }
        }
        public static void DestroyEverything()
        {
            RoomHandler    currentRoom           = GameManager.Instance.PrimaryPlayer.CurrentRoom;
            List <AIActor> activeenemies_typeall = currentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All);

            //ETGModConsole.Log("");
            for (int e = 0; e < activeenemies_typeall.Count; e++)
            {
                AIActor    enemy = activeenemies_typeall[e];
                GameObject objectToInstantiate = enemy.gameObject;
                UnityEngine.Object.Destroy(objectToInstantiate);
                //ETGModConsole.Log(string.Format("{3}: {4}: IsDead:{0},  LIDD1:{1},  LIDD2:{2}", isdead, lastIncurredDamageDirection.ToString(), lastIncurredDamageDirection2.ToString(), e, enemy.EnemyGuid));
            }

            ReadOnlyCollection <Projectile> allProjectiles = StaticReferenceManager.AllProjectiles;

            //ETGModConsole.Log("Active Projectiles: " + allProjectiles.Count);
            for (int i = allProjectiles.Count - 1; i >= 0; i--)
            {
                Projectile projectile = allProjectiles[i];
                if (projectile)
                {
                    GameObject projectileObject = projectile.gameObject;
                    UnityEngine.Object.Destroy(projectileObject);
                }
            }
        }
Example #20
0
        private void Start()
        {
            if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER | GameManager.Instance.IsLoadingLevel | Dungeon.IsGenerating)
            {
                return;
            }

            m_CurrentRoom = GameManager.Instance.BestActivePlayer.CurrentRoom;
            m_SpawnTimer  = Random.Range(MinTimeBetweenSpawns, MaxTimeBetweenSpawns);

            if (m_CurrentRoom == null)
            {
                return;
            }
            if (m_CurrentRoom.area.PrototypeRoomCategory != PrototypeDungeonRoom.RoomCategory.BOSS)
            {
                return;
            }
            if (ToadieGUIDs == null | ToadieGUIDs.Count <= 0)
            {
                return;
            }

            AssetBundle assetBundle = ResourceManager.LoadAssetBundle("brave_resources_001");

            m_LootCratePrefab = assetBundle.LoadAsset <GameObject>("EmergencyCrate");
            assetBundle       = null;

            for (int i = 0; i < MaxToadiesPerWave; i++)
            {
                RandomToadieAirDrop(m_LootCratePrefab, m_CurrentRoom);
            }
        }
Example #21
0
        // 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");
            }
        }
Example #22
0
        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);
            }
        }
Example #23
0
 private void Start()
 {
     m_StartRoom = aiActor.GetAbsoluteParentRoom();
     //This line determines what happens when an enemy dies. For now it's something simple like playing a death sound.
     //A full list of all the sounds can be found in the SFX.txt document that comes with this github.
     base.aiActor.healthHaver.OnPreDeath += (obj) => { AkSoundEngine.PostEvent("Play_VO_kali_death_01", base.aiActor.gameObject); };
 }
Example #24
0
        private void Bounty()
        {
            int bighead = UnityEngine.Random.Range(1, 5);

            if (bighead == 1)
            {
                RoomHandler absoluteRoom      = base.transform.position.GetAbsoluteRoom();
                AIActor     randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
                randomActiveEnemy.aiActor.ApplyEffect(HelpfulLibrary.Money, 9999f, null);
            }
            if (bighead == 2)
            {
                RoomHandler absoluteRoom      = base.transform.position.GetAbsoluteRoom();
                AIActor     randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
                randomActiveEnemy.aiActor.ApplyEffect(HelpfulLibrary.Money2, 9999f, null);
            }
            if (bighead == 3)
            {
                RoomHandler absoluteRoom      = base.transform.position.GetAbsoluteRoom();
                AIActor     randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
                randomActiveEnemy.aiActor.ApplyEffect(HelpfulLibrary.hegymoney, 9999f, null);
            }
            if (bighead == 4)
            {
                RoomHandler absoluteRoom      = base.transform.position.GetAbsoluteRoom();
                AIActor     randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false);
                randomActiveEnemy.aiActor.ApplyEffect(HelpfulLibrary.moneydebuff3, 9999f, null);
            }
        }
Example #25
0
            private void HandleFear(PlayerController user, bool active)
            {
                RoomHandler room = user.CurrentRoom;

                if (!room.HasActiveEnemies(RoomHandler.ActiveEnemyType.All))
                {
                    return;
                }

                if (active)
                {
                    foreach (var enemy in room.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                    {
                        if (enemy.behaviorSpeculator != null)
                        {
                            enemy.behaviorSpeculator.FleePlayerData = this.fleeData;
                            FleePlayerData fleePlayerData = new FleePlayerData();
                        }
                    }
                }
                else
                {
                    foreach (var enemy in room.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                    {
                        if (enemy.behaviorSpeculator != null && enemy.behaviorSpeculator.FleePlayerData != null)
                        {
                            enemy.behaviorSpeculator.FleePlayerData.Player = null;
                        }
                    }
                }
            }
 private void EndEffect(PlayerController player)
 {
     if (UnityEngine.Random.value < this.m_exhaustionChance)
     {
         player.StartCoroutine(this.EndEffectCR(player));
     }
     if (UnityEngine.Random.value < this.m_exhaustionChance)
     {
         List <RoomHandler> rooms = new List <RoomHandler>();
         foreach (RoomHandler room in GameManager.Instance.Dungeon.data.rooms)
         {
             if (!room.hasEverBeenVisited)
             {
                 rooms.Add(room);
             }
         }
         if (rooms.Count > 0)
         {
             RoomHandler randomRoom          = BraveUtility.RandomElement(rooms);
             IntVector2? randomAvailableCell = randomRoom.GetRandomAvailableCell(new IntVector2?(GreenChamberEyeController.hallucinationEyePrefab.GetComponent <GreenChamberEyeController>().specRigidbody.UnitDimensions.ToIntVector2(VectorConversions.Ceil)),
                                                                                 new CellTypes?(CellTypes.FLOOR | CellTypes.PIT), false, null);
             if (randomAvailableCell.HasValue)
             {
                 Instantiate(GreenChamberEyeController.hallucinationEyePrefab, randomAvailableCell.Value.ToVector3(0), Quaternion.identity).GetComponent <GreenChamberEyeController>().BindWithRoom(randomRoom);
             }
         }
     }
     this.m_exhaustionChance = Mathf.Min(this.m_exhaustionChance += 0.01f, 0.05f);
     AkSoundEngine.PostEvent("Play_ENM_lighten_world_01", player.gameObject);
     this.spriteAnimator.Play("unmelt");
 }
Example #27
0
        public static void roomMagic(PlayerController user)
        {
            //tk2dTileMap tk2dTileMap = null;
            user.CurrentRoom.CompletelyPreventLeaving = true;
            List <RoomHandler> rooms = GameManager.Instance.Dungeon.data.rooms;

            foreach (RoomHandler roomHandler in rooms)
            {
                roomHandler.visibility = RoomHandler.VisibilityStatus.OBSCURED;
                //roomHandler = null;
            }
            //List<RoomHandler>.Enumerator enumerator = default(List<RoomHandler>.Enumerator);
            WarpTarget = user.CenterPosition;
            RoomHandler currentRoom = user.CurrentRoom;

            user.ForceStopDodgeRoll();
            //this.DoTentacleVFX(user);
            IntVector2?targetCenter  = new IntVector2?(user.CenterPosition.ToIntVector2(VectorConversions.Floor));
            Vector2    startingpoint = user.CenterPosition;
            //RoomHandler creepyRoom = GameManager.Instance.Dungeon.AddRuntimeRoom(new IntVector2(30, 30), (GameObject)BraveResources.Load(room));
            RoomHandler creepyRoom = tools.AddCustomRuntimeRoom(room, false, false, false, null, DungeonData.LightGenerationStyle.STANDARD);

            TeleportToRoom(user, creepyRoom);

            user.WarpToPoint((creepyRoom.area.basePosition + new IntVector2(12, 4)).ToVector2(), false, false);
            bool flag2 = GameManager.Instance.CurrentGameType == GameManager.GameType.COOP_2_PLAYER;

            if (flag2)
            {
                GameManager.Instance.GetOtherPlayer(user).ReuniteWithOtherPlayer(user, false);
            }
        }
Example #28
0
        private static void DealDamageToEnemiesInArc(PlayerController owner, Vector2 arcOrigin, float arcAngle, float arcRadius, float overrideDamage, float overrideForce, List <GameActorEffect> statusEffects, float jammedDMGMult, float bossDMGMult, float slashDimensions, List <SpeculativeRigidbody> alreadyHit = null)
        {
            RoomHandler roomHandler = owner.CurrentRoom;

            if (roomHandler == null)
            {
                return;
            }
            List <AIActor> activeEnemies = roomHandler.GetActiveEnemies(RoomHandler.ActiveEnemyType.All);

            if (activeEnemies == null)
            {
                return;
            }

            for (int i = 0; i < activeEnemies.Count; i++)
            {
                AIActor aiactor = activeEnemies[i];
                if (aiactor && aiactor.specRigidbody && aiactor.IsNormalEnemy && !aiactor.IsGone && aiactor.healthHaver)
                {
                    if (alreadyHit == null || !alreadyHit.Contains(aiactor.specRigidbody))
                    {
                        for (int j = 0; j < aiactor.healthHaver.NumBodyRigidbodies; j++)
                        {
                            SpeculativeRigidbody bodyRigidbody       = aiactor.healthHaver.GetBodyRigidbody(j);
                            PixelCollider        hitboxPixelCollider = bodyRigidbody.HitboxPixelCollider;
                            if (hitboxPixelCollider != null)
                            {
                                Vector2 vector = BraveMathCollege.ClosestPointOnRectangle(arcOrigin, hitboxPixelCollider.UnitBottomLeft, hitboxPixelCollider.UnitDimensions);
                                float   num    = Vector2.Distance(vector, arcOrigin);
                                if (ObjectWasHitBySlash(vector, arcOrigin, arcAngle, arcRadius, slashDimensions))
                                {
                                    bool          flag    = true;
                                    int           rayMask = CollisionMask.LayerToMask(CollisionLayer.HighObstacle, CollisionLayer.BulletBlocker, CollisionLayer.BulletBreakable);
                                    RaycastResult raycastResult;
                                    if (PhysicsEngine.Instance.Raycast(arcOrigin, vector - arcOrigin, num, out raycastResult, true, true, rayMask, null, false, null, null) && raycastResult.SpeculativeRigidbody != bodyRigidbody)
                                    {
                                        flag = false;
                                    }
                                    RaycastResult.Pool.Free(ref raycastResult);
                                    if (flag)
                                    {
                                        float damage = DealSwordDamageToEnemy(owner, aiactor, arcOrigin, vector, arcAngle, overrideDamage, overrideForce, statusEffects, bossDMGMult, jammedDMGMult);
                                        if (alreadyHit != null)
                                        {
                                            if (alreadyHit.Count == 0)
                                            {
                                                StickyFrictionManager.Instance.RegisterSwordDamageStickyFriction(damage);
                                            }
                                            alreadyHit.Add(aiactor.specRigidbody);
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #29
0
 //Add the item's functionality down here! I stole most of this from the Stuffed Star active item code!
 protected override void DoEffect(PlayerController user)
 {
     if (ChallengeManager.Instance == false)
     {
         ChallengeManager.ChallengeModeType = ChallengeModeType.GunslingKingTemporary;
         challengeLevel += 3;
         RoomHandler absoluteRoom = base.transform.position.GetAbsoluteRoom();
         absoluteRoom.IsGunslingKingChallengeRoom = true;
         int rewards = UnityEngine.Random.Range(1, 9);
         if (rewards == 1)
         {
             LootEngine.SpawnItem(Gungeon.Game.Items["junk"].gameObject, user.specRigidbody.UnitCenter, Vector2.down, 0.5f, false, true, false);
         }
         if (rewards == 2)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(68).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (rewards == 3)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(70).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (rewards == 4)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(297).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (rewards == 5)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(120).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (rewards == 6)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(73).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (rewards == 7)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(224).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (rewards == 8)
         {
             LootEngine.SpawnItem(PickupObjectDatabase.GetById(137).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
         }
         if (ChallengeManager.Instance == false)
         {
             this.Notify("Consolation Prize", "Good Luck.");
             int rewards2 = UnityEngine.Random.Range(1, 4);
             if (rewards2 == 1)
             {
                 LootEngine.SpawnItem(PickupObjectDatabase.GetById(70).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
             }
             if (rewards2 == 2)
             {
                 LootEngine.SpawnItem(PickupObjectDatabase.GetById(68).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
             }
             if (rewards2 == 3)
             {
                 LootEngine.SpawnItem(PickupObjectDatabase.GetById(70).gameObject, user.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
             }
         }
     }
 }
        private IEnumerator HandleDoorAutoClose()
        {
            if (DoorLightObject && DoorLightObject.GetComponent <tk2dSprite>())
            {
                DoorLightObject.GetComponent <tk2dSprite>().SetSprite("EXSecretDoor_Light_Red");
            }
            RoomHandler PlayerParentRoom = GameManager.Instance.PrimaryPlayer.GetAbsoluteParentRoom();

            if (PlayerParentRoom != null && PlayerParentRoom == m_parentRoom)
            {
                AkSoundEngine.PostEvent("Play_OBJ_cardoor_close_01", gameObject);
            }
            spriteAnimator.Play("door_close");
            while (spriteAnimator.IsPlaying("door_clsoe"))
            {
                yield return(null);
            }
            specRigidbody.PixelColliders[0].Enabled = true;
            if (sprite.HeightOffGround != -1.5f)
            {
                sprite.HeightOffGround = -1.5f;
                sprite.UpdateZDepth();
            }
            m_IsInMovment = false;
            yield break;
        }
 public override void Update()
 {
     base.Update();
     if (!Dungeon.IsGenerating && m_PickedUp)
     {
         if (m_HammersHidden && LastOwner && LastOwner.GetAbsoluteParentRoom() != null)
         {
             if (!LastOwner.IsInCombat)
             {
                 m_HammersHidden = false;
                 if (StaticReferenceManager.AllEnemies.Count > 0)
                 {
                     List <AIActor> m_BabyHammers = new List <AIActor>();
                     foreach (AIActor enemy in StaticReferenceManager.AllEnemies)
                     {
                         if (enemy.EnemyGuid == CompanionGuid && enemy.IsGone)
                         {
                             RoomHandler CurrentRoom = LastOwner.GetAbsoluteParentRoom();
                             // Vector3 ReturnPosition = (LastOwner.gameObject.transform.position + new Vector3(UnityEngine.Random.Range(0, 0.25f), 4.5f));
                             Vector3 ReturnPosition = (new Vector3(0, 5.5f) + LastOwner.CurrentRoom.GetBestRewardLocation(new IntVector2(2, 2), RoomHandler.RewardLocationStyle.PlayerCenter, false).ToVector3());
                             StartCoroutine(HandleHammerReturn(enemy, ReturnPosition));
                         }
                     }
                 }
             }
         }
     }
 }
    //only the host of a room can destroy a room
    private void DestroyRoomAckEvent(string reqData, Hashtable roomList, Hashtable roomClassList)
    {
        //reqData = roomNo+":"+validUid+":DestroyRoom"
        roomData = reqData.Split(':');

        /*roomClassList: key = room number, value = room class
         *roomList: key = host id, value = room number
         */
        try
        {
            room = (RoomHandler)roomClassList[roomData[0]];
            room.SendToClient("DestroyRoomAck");

            //remove everything related to the current room
            roomClassList.Remove(roomData[0]);
            roomList.Remove(roomData[1]);
        }
        //Handle Exception
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return;
        }
    }
    private void StartAckEvent(string reqData, Hashtable roomList, Hashtable roomClassList)
    {
        //"StartReq"+roomNo+validUid
        roomData = reqData.Split(':');

        try
        {
            /*roomClassList: key = room title, value = room class
             *roomList: key = host id, value = room title
             */
            room = (RoomHandler)roomClassList[roomData[1]];
            if (room.isFull == false) Send("GuestNotArriveNoti");
            else if (room.isReady == true)
            {
                room.isStart = true;

                //call start game function to allocate a game class instance
                room.startGame();
                room.SendToClient(roomData[1] + ":StartAck");
                //remove a room number from a list, so that it doesn't appear on the lobby
                roomList.Remove(roomData[2]);
            }
            else Send("GuestNotReadyNoti");
        }
        //Handle Exception
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return;
        }
    }
    // send the list of possible moves of the clicked
    private void PossiblePathAckEvent(string reqData, Hashtable roomClassList)
    {
        /* isHost+":"+roomNo+":"+"PossibleMoveReq"+":"+myPieceName+":"+myStartPos
         */
         List<int> PossibleMoveList = new List<int>();
         roomData = reqData.Split(':');
        try
        {   /* roomClassList: key = room number, value = room class
             * find a right room for received room number from a client
             * and send acknowledgement
             */
            room = (RoomHandler)roomClassList[roomData[1]];
            if (room.isStart == true)
            {
                /* only startPos and finalPos are needed to proceed the movement
                 * since the server knows a board status
                 */
                PossibleMoveList = room.getPossibleMove(int.Parse(roomData[4]));

                /* send to the client only if PossibleMoveList contains an integer value
                 * meaning the clicked piece can be moved
                 */
                if (PossibleMoveList != null)
                {
                    Send(string.Join(":", PossibleMoveList) + ":" + roomData[4] + ":PossiblePathAck");
                }
            }
            else Send("NotStartNoti");
        }
        //Handle Exception
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return;
        }
    }
 private void ReadyAckEvent(string reqData, Hashtable roomClassList)
 {
     //Send(s, "ReadyReq:"+roomNo, 1000);
     roomData = reqData.Split(':');
     try
     {
         /* roomClassList: key = room number, value = room class
          * find a right room for received room number from a client
          * and send acknowledgement
          */
         room = (RoomHandler)roomClassList[roomData[1]];
         room.isReady = !room.isReady;
         if (room.isReady == true)
             Send("ReadyAck");
         else
             Send("CancelReadyAck");
         return;
     }
     //Handle Exception
     catch (Exception ex)
     {
         Console.WriteLine(ex);
         return;
     }
 }
    //send the current status of captured piece
    private void StatusAckEvent(Hashtable roomClassList)
    {
        try
        {   /* roomClassList: key = room number, value = room class
             * find a right room for received room number from a client
             * and send acknowledgement
             */
            room = (RoomHandler)roomClassList[roomData[1]];
            Send(room.getCapturedPieceStatus()+":StatusAck");
        }

        //Handle Exception
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return;
        }
    }
	void Start() {
		roomHandler = this.GetComponent<RoomHandler>();
	}
 private void LeaveRoomAckEvent(string reqData, Hashtable roomClassList)
 {
     //reqData =roomNo+":"+validUid+":LeaveRoom"
     roomData = reqData.Split(':');
     try
     {
         room = (RoomHandler)roomClassList[roomData[0]];
         room.ResetIsFull();
         room.SendToClient(roomData[0] + ":LeaveRoomAck");
     }
     //Handle Exception
     catch (Exception ex)
     {
         Console.WriteLine(ex);
         return;
     }
 }
    private void JoinRoomAckEvent(string reqData, Hashtable roomList)
    {
        //Send(s, validUid + ":" + roomName + ":JoinRoomReq", 1000);
        roomData = reqData.Split(':');

        try
        {
            /*roomClassList: key = room number, value = room class
             *roomList: key = host id, value = room number
             */
            room = (RoomHandler)roomClassList[roomData[1]];

            //only if there is no guest in a room, a player can join
            if (!room.isFull)
            {
                room.guestStartRoom(tcpClient);
                room.guestName = roomData[0];
                Console.WriteLine(room.guestName);

                //indicates the room is already full
                room.isFull = true;

                //look for host id, and send it to a client
                foreach (DictionaryEntry entry in roomList)
                {
                    if (entry.Value.ToString() == roomData[1])
                    {
                        string result = entry.Key.ToString();
                        room.SendToClient(result + ":" + roomData[0] + ":JoinRoomAck");
                        room.isReady = false;
                    }
                }
            }
            else
            {
                //if a room is full, a player cannot join a room
                Send("FullRoomNoti");
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    //
    private void MoveAckEvent(string reqData, Hashtable roomClassList)
    {
        /* isHost+":"+roomNo+":"+"MoveReq"+":"+myPieceName+":"+myStartPos+":"+myFinalPos
         * isHost argument is needed for define who won the game and who lost the game
         */
        roomData = reqData.Split(':');
        try
        {   /* roomClassList: key = room number, value = room class
             * find a right room for the received room number
             * and send acknowledgement
             */
            room = (RoomHandler)roomClassList[roomData[1]];
            if (room.isStart == true)
            {
                /* only startPos and finalPos are needed to proceed the movement
                 * since the server knows a board status
                 */
                bool isValidMove = room.getMovePos(int.Parse(roomData[4]), int.Parse(roomData[5]));
                if (isValidMove)
                {
                    room.setTurn(roomData[0]);
                    room.SendToClient(roomData[0] + ":" + roomData[1] + ":MoveAck:" + roomData[3] + ":" + roomData[4] + ":" + room.RealFinalPos);

                    /* any special move? like enpassant and castling?
                     * These two must be notified separately to the clients
                     */
                    //EnPassant
                    if (room.Enpassant != null)
                    {
                        room.SendToClient(room.Enpassant.ToString() + ":EnPassant");
                        room.Enpassant = null;
                    }
                    //Castling
                    if (room.StartPosCastling != null)
                    {
                        room.SendToClient(room.StartPosCastling.ToString() + ":"+ room.FinalPosCastling.ToString() + ":Castling");
                        room.StartPosCastling = null;
                        room.FinalPosCastling = null;
                    }

                    /* then send the status of the game along with the roomData[0](isHost value).
                     * if either checkmate, draw then notifies the clients to end the game
                     * if check, notifies the client to show 'check' pop-up window
                     */
                    switch (room.getStatus())
                    {
                        case "Check":
                        case "Stalemate":
                        case "Normal":
                        case "DrawByFiftyMove":
                        case "DrawByLackOfMaterial":
                        case "DrawByThreefold":
                            room.SendToClient(roomData[0] +":"+ room.getStatus());
                            break;
                        case "Checkmate":
                            room.SendToClient(roomData[0] +":"+ room.getStatus());
                            //if the move was made by the host, then do the number of the win games += 1 to host
                            if (roomData[0] == "True")
                            {
                                UpdateRankIfWin(room.hostName);
                                UpdateRankIfLose(room.guestName);
                            }
                            //if the move was made by the guset, then do the number of the win games += 1 to guest
                            else if (roomData[0] == "False")
                            {
                                UpdateRankIfWin(room.guestName);
                                UpdateRankIfLose(room.hostName);
                            }
                            break;
                        default:
                            break;
                    }
                }
                else {
                    //Send("NotMoveNoti");
                }
            }
            //room.SendToClient(reqData);
            else Send("NotStartNoti");
        }
        //Handle Exception
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return;
        }
    }