Esempio n. 1
0
 // Token: 0x060012E8 RID: 4840 RVA: 0x0020F6F4 File Offset: 0x0020D8F4
 public void Recv_MSG_RESP_FOOTBALL_ASOLO_RANK(MessagePacket MP)
 {
     if (MP.ReadByte(-1) == 0)
     {
         byte b  = MP.ReadByte(-1);
         byte b2 = MP.ReadByte(-1);
         if ((b & 1) > 0)
         {
             this.ClearBoard(18);
             this.MyRank[18] = 0;
         }
         for (int i = 0; i < (int)b2; i++)
         {
             BoardUnit boardUnit = new BoardUnit();
             MP.ReadStringPlus(13, boardUnit.Name, -1);
             boardUnit.Value = MP.ReadULong(-1);
             boardUnit.AlliaceTag.Append(DataManager.Instance.RoleAlliance.Tag);
             this.Boards[18].Add(boardUnit);
         }
         if (b >= 2)
         {
             LeaderBoardManager.Instance.BoardUpdateTime[18] = ActivityManager.Instance.ServerEventTime + 43200L;
             this.Boards[18].Sort(new Comparison <BoardUnit>(LeaderBoardManager.BoardUnitSortByValue));
             for (int j = 0; j < this.Boards[18].Count; j++)
             {
                 if (DataManager.CompareStr(this.Boards[18][j].Name, DataManager.Instance.RoleAttr.Name) == 0)
                 {
                     this.MyRank[18] = (ushort)(j + 1);
                 }
             }
             GUIManager.Instance.UpdateUI(EGUIWindow.UI_FootBallBoard, 3, 18);
         }
     }
 }
Esempio n. 2
0
        private BoardUnit GetBoardUnit()
        {
            ILog        log        = MockIlog();
            DtService36 db         = new DtService36(@"Data Source=shg-l80005754\SQLEXPRESS;Initial Catalog=BMS36;Persist Security Info=True;User ID=sa;Password=cml@shg629;Pooling=False");
            FetchPlans  fetchplans = FetchPlans.Inst("");

            fetchplans.FetchPlansList(db);
            Dictionary <string, string> ports = new Dictionary <string, string>();

            ports["OvenPort"] = "COM1";
            ports["Floor1"]   = "COM1";
            ports["Floor2"]   = "COM2";
            ports["Floor3"]   = "COM3";
            ports["Floor4"]   = "COM4";
            ports["Floor5"]   = "COM5";
            ports["Floor6"]   = "COM6";
            ports["Floor7"]   = "COM7";
            ports["Floor8"]   = "COM8";
            ports["Floor9"]   = "COM9";
            ports["Floor10"]  = "COM10";
            BoardFactory factroy = new BoardFactory(log, fetchplans, ports);
            SystemParams param   = new SystemParams();
            BoardUnit    unit    = new BoardUnit(log, db, param);

            return(unit);
        }
        public void Test_SubScribeBoard()
        {
            string       boardName = "L10-1";
            BoardManager manager   = GetBoardManager();

            manager.SubscribeBoard(boardName, "TEST_TYPE");
            BoardUnit uinit = manager.GetBoardUnit(boardName);

            Assert.AreEqual(uinit.GetBoardInfo().BoardName, boardName);
        }
        public void Test_UnsubScribeBoard()
        {
            string       boardName = "L10-2";
            BoardManager manager   = GetBoardManager();

            manager.SubscribeBoard(boardName, "TEST_TYPE");
            manager.UnsubscribeBoard(boardName);
            BoardUnit uinit = manager.GetBoardUnit(boardName);

            Assert.AreEqual(uinit, null);
        }
Esempio n. 5
0
 /// <summary>
 /// Removes the unit occupying this hexagon
 /// </summary>
 public void RemoveUnit(BoardUnit u)
 {
     if (OccupiedUnit == u)
     {
         OccupiedUnit = null;
     }
     else
     {
         Debug.LogError("Trying to remove a unit from " + name + " that doesn't exist");
     }
 }
Esempio n. 6
0
 /// <summary>
 /// Starts highlighting and using a template for an ability
 /// </summary>
 public void StartHighlighting(BoardUnit u, AbilityDescription a)
 {
     CurrentTargets.Clear();
     template           = templates [(int)a.Template].GetComponentInChildren <Template> ();
     TemplateInUse      = true;
     TemplateTargetType = a.TemplateType;
     CurrentUnit        = u;
     template.Enable();
     template.SetScale(a.TemplateSize, a.castRange);
     CurrentTargets = template.CurrentHighlight;
 }
Esempio n. 7
0
 // Token: 0x060012ED RID: 4845 RVA: 0x0020FB38 File Offset: 0x0020DD38
 private static int BoardUnitSortByValue(BoardUnit x, BoardUnit y)
 {
     if (x.Value > y.Value)
     {
         return(-1);
     }
     if (x.Value < y.Value)
     {
         return(1);
     }
     return(0);
 }
        public void Test_AddSeatToBoard()
        {
            string       boardName = "L9-1";
            BoardManager manager   = GetBoardManager();

            manager.SubscribeBoard(boardName, "TEST_TYPE");
            manager.AddSeatToBoard(boardName, 1, "001");
            manager.AddSeatToBoard(boardName, 2, "002");
            BoardUnit uinit = manager.GetBoardUnit(boardName);

            Assert.AreEqual(uinit.GetBoardInfo().units.Count, 2);
            manager.UnsubscribeBoard(boardName);
        }
        void Start()
        {
            spawnMode = true;
            StartCoroutine(SelectMode());
#if UNITY_EDITOR
            Hex enemyHex = LayoutManager.hexPoints[4, 4].GetComponent <Hex>();
            Instantiate(dummyBot, enemyHex.attachPoint.position, enemyHex.attachPoint.rotation);
            enemyHex.attachedObject = dummyBot;

            BoardUnit dummyScript = dummyBot.GetComponent <BoardUnit>();
            dummyScript.attachedHex = enemyHex;
            dummyScript.dummy       = true;
#endif
        }
        IEnumerator SpawnMode(int unitIndex)
        {
            //when in spawnmode
            spawnMode = true;

            while (spawnMode)
            {
                RaycastHit hit;
                Ray        ray = cam.ScreenPointToRay(Input.mousePosition);

                if (Physics.Raycast(ray, out hit))
                {
                    //Get the Hex script of the object hit raycast
                    GameObject currentObj = hit.transform.gameObject;
                    currentHex = currentObj.GetComponent <Hex>();

                    //Only highlight spawnable blue hexes to spawn
                    if (currentHex.blue && currentHex.spawnable && currentHex.attachedObject == null)
                    {
                        currentHex.highlighted = true;

                        //Spawn unit when mouse is clicked
                        if (Input.GetMouseButtonDown(0))
                        {
                            GameObject newUnit = Instantiate(units[unitIndex], currentHex.attachPoint.position, currentHex.attachPoint.rotation);

                            currentHex.attachedObject = newUnit;
                            BoardUnit unitFunctions = newUnit.GetComponent <BoardUnit>();
                            unitFunctions.attachedHex = currentHex;

                            spawnMode = false;
                            StartCoroutine(SelectMode());
                            selectMode = true;
                            yield return(null);
                        }
                    }
                }
                //Cancel Spawnmode
                if (Input.GetKeyDown(KeyCode.Escape))
                {
                    spawnMode = false;
                    StartCoroutine(SelectMode());
                    selectMode = true;
                    yield return(null);
                }

                yield return(null);
            }
        }
        public void Test_GetBoardUnit()
        {
            string       boardName1 = "L10-3";
            BoardManager manager    = GetBoardManager();

            manager.SubscribeBoard(boardName1, "TEST_TYPE");
            string boardName2 = "L10-4";

            manager.SubscribeBoard(boardName2, "TEST_TYPE");
            BoardUnit uinit = manager.GetBoardUnit(boardName1);

            Assert.AreEqual(uinit.GetBoardInfo().BoardName, boardName1);
            uinit = manager.GetBoardUnit(boardName2);
            Assert.AreEqual(uinit.GetBoardInfo().BoardName, boardName2);
            manager.UnsubscribeBoard(boardName1);
            manager.UnsubscribeBoard(boardName2);
        }
Esempio n. 12
0
 public void KillUnit(BoardUnit unit)
 {
     if (unit is PlayerControlledBoardUnit)
     {
         CurrentParty.Remove(unit as PlayerControlledBoardUnit);
         if (CurrentParty.Count == 0)
         {
             GameManager.instance.FinishCombat(false);
         }
     }
     else if (unit is NonPlayerControlledBoardUnit)
     {
         CurrentEnemies.Remove(unit as NonPlayerControlledBoardUnit);
         if (CurrentEnemies.Count == 0)               //End of combat
         {
             GameManager.instance.FinishCombat(true);
         }
     }
 }
Esempio n. 13
0
 /// <summary>
 /// Finishes using the template for the ability, returns what units the ability found
 /// </summary>
 public List <Hexagon> FinishAbility()
 {
     if (TemplateInUse || HexTargetting)
     {
         List <Hexagon> units = new List <Hexagon> ();
         foreach (Hexagon h in CurrentTargets)
         {
             units.Add(h);
         }
         TemplateInUse      = false;
         HexTargetting      = false;
         TemplateTargetType = Target.NULL;
         CurrentUnit        = null;
         template.Disable();
         template = null;
         return(units);
     }
     return(new List <Hexagon> ());
 }
Esempio n. 14
0
    // Token: 0x060012E5 RID: 4837 RVA: 0x0020F124 File Offset: 0x0020D324
    public void Recv_MSG_RESP_AlliHunt_RANKDATA(MessagePacket MP)
    {
        byte b = MP.ReadByte(-1);

        if (b != 0)
        {
            return;
        }
        byte b2 = MP.ReadByte(-1);
        byte b3 = MP.ReadByte(-1);

        if (this.AlliHuntBoard == null)
        {
            this.AlliHuntBoard = new List <BoardUnit>();
        }
        if ((b2 & 1) > 0)
        {
            this.AlliHuntBoard.Clear();
            this.AlliHuntBoardUpdateTime = DataManager.Instance.ServerTime + 180L;
            this.MobiGroupAllianceID     = DataManager.Instance.RoleAlliance.Id;
        }
        for (int i = 0; i < (int)b3; i++)
        {
            BoardUnit boardUnit = new BoardUnit();
            MP.ReadStringPlus(13, boardUnit.Name, -1);
            boardUnit.Value = MP.ReadULong(-1);
            this.AlliHuntBoard.Add(boardUnit);
        }
        if (b2 >= 2)
        {
            this.AlliHuntBoard.Sort(new Comparison <BoardUnit>(LeaderBoardManager.BoardUnitSortByValue));
            for (int j = 0; j < this.AlliHuntBoard.Count; j++)
            {
                if (DataManager.CompareStr(this.AlliHuntBoard[j].Name, DataManager.Instance.RoleAttr.Name) == 0)
                {
                    this.AlliHuntRank = j + 1;
                }
            }
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_AlliHuntBoard, 11, 0);
        }
    }
Esempio n. 15
0
 // Token: 0x060012D8 RID: 4824 RVA: 0x0020E064 File Offset: 0x0020C264
 public void Recv_MSG_RESP_ACTIVITY_AEVENT_PERSONAL_RANK(MessagePacket MP)
 {
     if (MP.ReadByte(-1) == 0)
     {
         byte b  = MP.ReadByte(-1);
         byte b2 = MP.ReadByte(-1);
         if ((b & 1) > 0)
         {
             this.ClearBoard(7);
             this.MyRank[7] = 0;
         }
         for (int i = 0; i < (int)b2; i++)
         {
             BoardUnit boardUnit = new BoardUnit();
             MP.ReadStringPlus(13, boardUnit.Name, -1);
             boardUnit.Value = MP.ReadULong(-1);
             boardUnit.AlliaceTag.Append(DataManager.Instance.RoleAlliance.Tag);
             this.Boards[7].Add(boardUnit);
         }
         if (b >= 2)
         {
             LeaderBoardManager.Instance.BoardUpdateTime[7] = DataManager.Instance.ServerTime + 43200L;
             this.Boards[7].Sort(new Comparison <BoardUnit>(LeaderBoardManager.BoardUnitSortByValue));
             for (int j = 0; j < this.Boards[7].Count; j++)
             {
                 if (DataManager.CompareStr(this.Boards[7][j].Name, DataManager.Instance.RoleAttr.Name) == 0)
                 {
                     this.MyRank[7] = (ushort)(j + 1);
                 }
             }
             GUIManager.Instance.UpdateUI(EGUIWindow.UI_LeaderBoard, 3, 7);
             GUIManager.Instance.UpdateUI(EGUIWindow.UI_KingdomVSLBoard, 3, 7);
             GUIManager.Instance.UpdateUI(EGUIWindow.UI_KVKLBoard, 3, 7);
         }
     }
 }
Esempio n. 16
0
    public IEnumerator CastSingleTargetAbility()
    {
        waiting = true;
        targets = null;
        List <AbilityModifier> mods = new List <AbilityModifier>();

        if (GetComponent <BoardUnit>().isEnfeebled)
        {
            mods.Add(new AbilityModifier(AbilityModifier.Modifier.Damage, .5f));
        }
        switch (AbilityInProgress.DisplayName)
        {
        case "SonicStrike": {
            targetHexagon.OccupiedUnit.ReceiveAbilityHit(AbilityInProgress, mods);
            mods.Add(new AbilityModifier(AbilityModifier.Modifier.Damage, .5f));
            TemplateManager.instance.TemplateHit(this, TemplateManager.TargetTemplate.Cone, 3, GetComponent <BoardUnit>().CurrentlyOccupiedHexagon, targetHexagon);
            while (waiting)
            {
                yield return(null);
            }
            for (int i = 0; i < targets.Count; i++)
            {
                Hexagon h = targets [i];
                if (HexagonHittable(h))
                {
                    h.OccupiedUnit.ReceiveAbilityHit(AbilityInProgress, mods);
                }
            }
            break;
        }

        case "StaticRush": {
            BoardUnit      u         = targetHexagon.OccupiedUnit;
            bool           collision = false;
            List <Hexagon> path      = BoardManager.instance.CanPushCharacter(GetComponent <BoardUnit>().CurrentlyOccupiedHexagon, targetHexagon, out collision);

            int     i    = 1;
            Hexagon curr = null;
            while (i < path.Count - 1)                     //Count-1 because the path leads ontop of another unit, so stop 1 short
            {
                curr = path[i];
                if (!collision && i == path.Count - 2)                         //If there was no collision, push them forwards
                {
                    path[path.Count - 2].OccupiedUnit.IssueMovement(path[path.Count - 1]);
                    mods.Add(new AbilityModifier(AbilityModifier.Modifier.RemoveStunEffect, 1));                              //If we are pushing them we dont stun
                }
                GetComponent <BoardUnit>().IssueMovement(curr);
                yield return(new WaitForSeconds(0.33f));

                i++;
            }
            u.ReceiveAbilityHit(AbilityInProgress, mods);

            break;
        }

        default: {
            targetHexagon.OccupiedUnit.ReceiveAbilityHit(AbilityInProgress, mods);
            break;
        }
        }
        castingAbility = false;
    }
Esempio n. 17
0
 private void UnitSelectingEventHandler(BoardUnit unit)
 {
     OnCardSelected(unit);
 }
Esempio n. 18
0
 /// <summary>
 /// Adds a unit to this hexagon
 /// </summary>
 public void AddUnit(BoardUnit u)
 {
     OccupiedUnit = u;
 }
Esempio n. 19
0
 public virtual void OnCardSelected(BoardUnit creature)
 {
 }
Esempio n. 20
0
    // Token: 0x060012D6 RID: 4822 RVA: 0x0020D9C4 File Offset: 0x0020BBC4
    public void Recv_MSG_RESP_BOARDCONTENT(MessagePacket MP)
    {
        byte   b    = MP.ReadByte(-1);
        byte   b2   = MP.ReadByte(-1);
        ushort num  = MP.ReadUShort(-1);
        long   num2 = MP.ReadLong(-1);
        byte   b3   = MP.ReadByte(-1);
        bool   flag = false;

        if (b >= 19)
        {
            return;
        }
        if (b2 == 0)
        {
            flag = this.ClearBoard((int)b);
            this.BoardUpdateTime[(int)b] = num2;
            this.MyRank[(int)b]          = num;
            if (GameConstants.IsBetween((int)b, 5, 7))
            {
                this.BoardUpdateTime[(int)b] = DataManager.Instance.ServerTime + 43200L;
            }
            if (GameConstants.IsBetween((int)b, 12, 18))
            {
                this.BoardUpdateTime[(int)b] = DataManager.Instance.ServerTime + 43200L;
            }
        }
        if (b2 > 0 && b2 != this.BoardRecived[(int)b] + 1)
        {
            return;
        }
        this.BoardRecived[(int)b] = b2;
        switch (b)
        {
        case 0:
        case 1:
        case 4:
            for (int i = 0; i < 20; i++)
            {
                BoardUnit boardUnit = new BoardUnit();
                MP.ReadStringPlus(3, boardUnit.AlliaceTag, -1);
                MP.ReadStringPlus(13, boardUnit.Name, -1);
                boardUnit.Value = MP.ReadULong(-1);
                this.Boards[(int)b].Add(boardUnit);
            }
            break;

        case 2:
        case 3:
            for (int j = 0; j < 20; j++)
            {
                BoardUnitAlliance boardUnitAlliance = new BoardUnitAlliance();
                MP.ReadStringPlus(3, boardUnitAlliance.AlliaceTag, -1);
                MP.ReadStringPlus(20, boardUnitAlliance.Name, -1);
                boardUnitAlliance.Value      = MP.ReadULong(-1);
                boardUnitAlliance.AllianceID = MP.ReadUInt(-1);
                this.Boards[(int)b].Add(boardUnitAlliance);
            }
            break;

        case 5:
        case 12:
            for (int k = 0; k < 20; k++)
            {
                BoardUnitKingdom boardUnitKingdom = new BoardUnitKingdom();
                boardUnitKingdom.KingdomID = MP.ReadUShort(-1);
                MP.ReadStringPlus(3, boardUnitKingdom.AlliaceTag, -1);
                MP.ReadStringPlus(13, boardUnitKingdom.Name, -1);
                boardUnitKingdom.KingKingdomID = MP.ReadUShort(-1);
                this.Boards[(int)b].Add(boardUnitKingdom);
            }
            break;

        case 6:
        case 13:
            for (int l = 0; l < 20; l++)
            {
                BoardUnitKingdomWarAlliance boardUnitKingdomWarAlliance = new BoardUnitKingdomWarAlliance();
                boardUnitKingdomWarAlliance.KingdomID  = MP.ReadUShort(-1);
                boardUnitKingdomWarAlliance.AllianceID = MP.ReadUInt(-1);
                MP.ReadStringPlus(3, boardUnitKingdomWarAlliance.AlliaceTag, -1);
                MP.ReadStringPlus(20, boardUnitKingdomWarAlliance.Name, -1);
                boardUnitKingdomWarAlliance.Value = MP.ReadULong(-1);
                this.Boards[(int)b].Add(boardUnitKingdomWarAlliance);
            }
            break;

        case 8:
        case 9:
        case 14:
        case 15:
        case 17:
            for (int m = 0; m < 20; m++)
            {
                WorldRankingBoardUnit worldRankingBoardUnit = new WorldRankingBoardUnit();
                MP.ReadStringPlus(3, worldRankingBoardUnit.AlliaceTag, -1);
                MP.ReadStringPlus(13, worldRankingBoardUnit.Name, -1);
                worldRankingBoardUnit.Value     = MP.ReadULong(-1);
                worldRankingBoardUnit.KingdomID = MP.ReadUShort(-1);
                this.Boards[(int)b].Add(worldRankingBoardUnit);
            }
            break;

        case 10:
        case 11:
        case 16:
            for (int n = 0; n < 20; n++)
            {
                WorldRankingBoardUnitAlliance worldRankingBoardUnitAlliance = new WorldRankingBoardUnitAlliance();
                MP.ReadStringPlus(3, worldRankingBoardUnitAlliance.AlliaceTag, -1);
                MP.ReadStringPlus(20, worldRankingBoardUnitAlliance.Name, -1);
                worldRankingBoardUnitAlliance.Value      = MP.ReadULong(-1);
                worldRankingBoardUnitAlliance.AllianceID = MP.ReadUInt(-1);
                worldRankingBoardUnitAlliance.KingdomID  = MP.ReadUShort(-1);
                this.Boards[(int)b].Add(worldRankingBoardUnitAlliance);
            }
            break;
        }
        if (flag)
        {
            GUIManager.Instance.AddHUDMessage(DataManager.Instance.mStringTable.GetStringByID(8457u), 255, true);
        }
        if (b2 == 0)
        {
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_LeaderBoard, 4, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_KingdomVSLBoard, 4, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_KVKLBoard, 4, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_FootBallBoard, 4, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_FootBallKVKBoard, 4, (int)b);
        }
        else
        {
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_LeaderBoard, 3, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_KingdomVSLBoard, 3, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_KVKLBoard, 3, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_FootBallBoard, 3, (int)b);
            GUIManager.Instance.UpdateUI(EGUIWindow.UI_FootBallKVKBoard, 3, (int)b);
        }
    }
        IEnumerator SelectMode()
        {
            selectMode = true;
            //When select mode is active
            while (selectMode)
            {
                //Shoot Ray
                RaycastHit hit;
                Ray        ray = cam.ScreenPointToRay(Input.mousePosition);

                //Get the hexes you can move to
                if (Physics.Raycast(ray, out hit))
                {
                    GameObject currentObj = hit.transform.gameObject;
                    currentHex = currentObj.GetComponent <Hex>();

                    currentHex.highlighted = true;

                    // If the clicked hex has a unit attached to it, select the unit
                    if (Input.GetMouseButtonDown(0) && currentHex.attachedObject != null)
                    {
                        selectedUnit = currentHex.gameObject;
                        Debug.Log(selectedUnit);
                        SelectUnit();
                    }

                    if (Input.GetMouseButtonDown(0) && selectedUnit != null)
                    {
                        // Selecting movable hexes
                        if (currentHex.movable)
                        {
                            Hex       newCurrentHex = selectedUnit.GetComponent <Hex>();
                            BoardUnit unit          = newCurrentHex.attachedObject.GetComponent <BoardUnit>();
                            currentHex.attachedObject = unit.gameObject;
                            unit.ChangeToMove(currentHex);

                            DeselectUnit();
                        }
                        // Selecting hexes with an enemy on it
                        if (currentHex.attachedRed)
                        {
                            Hex       newCurrentHex = selectedUnit.GetComponent <Hex>();
                            BoardUnit yourUnit      = newCurrentHex.attachedObject.GetComponent <BoardUnit>();
                            BoardUnit enemyUnit     = currentHex.attachedObject.GetComponent <BoardUnit>();

                            enemyUnit.currentHealth -= yourUnit.unitDamage;
                            Debug.Log(enemyUnit.currentHealth);
                            yourUnit.ChangeToAttack();

                            DeselectUnit();
                        }
                    }

                    /* if (Input.GetMouseButtonDown(0) && selectedUnit != null)
                     * {
                     *   Hex newCurrentHex = selectedUnit.GetComponent<Hex>();
                     *   BoardUnit unit = newCurrentHex.attachedObject.GetComponent<BoardUnit>();
                     *   currentHex.attachedObject = unit.gameObject;
                     *   unit.ChangeToMove(currentHex);
                     *   DeselectUnit();
                     * }
                     */
                }
                //Deselection
                if (Input.GetKeyDown(KeyCode.Escape))
                {
                    DeselectUnit();
                    yield return(null);
                }

                yield return(null);
            }
        }
Esempio n. 22
0
    /// <summary>
    /// Starts the channeling.
    /// </summary>
    IEnumerator CastAbility(List <Hexagon> hits)
    {
        castingAbility = true;
        List <BoardUnit> unitsHit = new List <BoardUnit>();

        yield return(new WaitForSeconds(1f));

        List <AbilityModifier> mods = new List <AbilityModifier>();

        if (GetComponent <BoardUnit>().isEnfeebled)
        {
            mods.Add(new AbilityModifier(AbilityModifier.Modifier.Damage, .5f));
        }

        if (AbilityInProgress.AbilityTargetType == AbilityDescription.TargetType.CustomTemplate)
        {
            foreach (Hexagon h in hits)
            {
                if (AbilityInProgress.FriendlyFireEnabled)
                {
                    if (h.OccupiedUnit is BoardUnit)
                    {
                        if (h.OccupiedUnit.AbilityActivator == this && !AbilityInProgress.SelfFireEnabled)
                        {
                            goto Skip;
                        }

                        BoardUnit u = h.OccupiedUnit;

                        if (unitsHit.Contains(u))
                        {
                            break;
                        }
                        else
                        {
                            unitsHit.Add(u);
                        }

                        if (AbilityInProgress.DisplayName == "FluxBlast")
                        {
                            u.KnockBack(AbilityInProgress.SourceHexagon, 2);
                        }
                        else if (AbilityInProgress.DisplayName == "StaticBomb")
                        {
                            u.PullIn(AbilityInProgress.SourceHexagon, 2);
                        }
                        else if (AbilityInProgress.DisplayName == "PulseForce")
                        {
                            u.KnockBack(GetComponent <BoardUnit>().CurrentlyOccupiedHexagon, 3);
                        }
                        u.ReceiveAbilityHit(AbilityInProgress, mods);
                        Skip : {}
                    }
                }
                else
                {
                    if (h.OccupiedUnit is NonPlayerControlledBoardUnit)
                    {
                        h.OccupiedUnit.ReceiveAbilityHit(AbilityInProgress, mods);
                    }
                }
            }
            castingAbility = false;
        }
        else if (AbilityInProgress.AbilityTargetType == AbilityDescription.TargetType.TargetHexagon)
        {
            if (AbilityInProgress.DisplayName == "ElectromagneticField")
            {
                if (targetHexagon.OccupiedUnit != null)
                {
                    targetHexagon.OccupiedUnit.KnockBack(GetComponent <BoardUnit>().CurrentlyOccupiedHexagon, 1);
                }
            }
            targetHexagon.ReceiveAbilityHit(AbilityInProgress, mods);
            castingAbility = false;
        }
        else
        {
            StartCoroutine("CastSingleTargetAbility");
        }
    }