예제 #1
0
        private static void AddSummonableVisitorsToList(BattleInitializationData battleData, StaticDataController idc, List <IAssetVO> assets, SkinController sc)
        {
            List <string> list  = new List <string>();
            List <string> list2 = new List <string>();
            List <string> list3 = new List <string>();

            if (battleData.AttackerEquipment != null)
            {
                list3.AddRange(battleData.AttackerEquipment);
            }
            if (battleData.DefenderEquipment != null)
            {
                list3.AddRange(battleData.DefenderEquipment);
            }
            int count = list3.Count;

            for (int i = 0; i < count; i++)
            {
                EquipmentVO equipmentVO = idc.Get <EquipmentVO>(list3[i]);
                int         num         = equipmentVO.EffectUids.Length;
                for (int j = 0; j < num; j++)
                {
                    EquipmentEffectVO equipmentEffectVO = idc.Get <EquipmentEffectVO>(equipmentVO.EffectUids[j]);
                    int num2 = equipmentEffectVO.BuffUids.Length;
                    for (int k = 0; k < num2; k++)
                    {
                        BuffTypeVO buffTypeVO = idc.Get <BuffTypeVO>(equipmentEffectVO.BuffUids[k]);
                        if (buffTypeVO.Modify == BuffModify.Summon)
                        {
                            SummonDetailsVO summonDetailsVO = idc.Get <SummonDetailsVO>(buffTypeVO.Details);
                            int             num3            = summonDetailsVO.VisitorUids.Length;
                            for (int l = 0; l < num3; l++)
                            {
                                string        item  = summonDetailsVO.VisitorUids[l];
                                List <string> list4 = (summonDetailsVO.VisitorType != VisitorType.Troop) ? list2 : list;
                                if (!list4.Contains(item))
                                {
                                    list4.Add(item);
                                }
                            }
                        }
                    }
                }
            }
            int m      = 0;
            int count2 = list.Count;

            while (m < count2)
            {
                MapDataLoaderUtils.AddDeployableToList <TroopTypeVO>(list[m], 1, assets, list3, idc, sc);
                m++;
            }
            int n      = 0;
            int count3 = list2.Count;

            while (n < count3)
            {
                MapDataLoaderUtils.AddDeployableToList <SpecialAttackTypeVO>(list2[n], 1, assets, list3, idc, sc);
                n++;
            }
        }
예제 #2
0
        private void HandleSummon(BuffEventData data)
        {
            SummonDetailsVO summonDetailsVO = (SummonDetailsVO)data.BuffObj.Details;

            if (data.BuffObj.ProcCount > summonDetailsVO.MaxProc)
            {
                return;
            }
            if (this.numSummons >= GameConstants.MAX_SUMMONS_PER_BATTLE)
            {
                return;
            }
            List <SmartEntity> list;
            bool flag = this.visitorExecution.TryGetValue(data.Target, out list);

            if (list == null)
            {
                list = new List <SmartEntity>();
            }
            if (summonDetailsVO.VisitorUids == null || summonDetailsVO.VisitorUids.Length == 0)
            {
                Service.Logger.WarnFormat("No visitor uid for buff {0}", new object[]
                {
                    summonDetailsVO.Uid
                });
                return;
            }
            int                num  = (data.BuffObj.ProcCount - 1) % summonDetailsVO.VisitorUids.Length;
            string             text = summonDetailsVO.VisitorUids[num];
            TransformComponent transformComponent = data.Target.Get <TransformComponent>();
            TeamType           teamType           = data.Target.TeamComp.TeamType;

            if (!summonDetailsVO.SameTeam)
            {
                teamType = ((data.Target.TeamComp.TeamType != TeamType.Attacker) ? TeamType.Attacker : TeamType.Defender);
            }
            SmartEntity smartEntity = null;

            if (summonDetailsVO.VisitorType == VisitorType.Troop)
            {
                int         num2        = (data.BuffObj.ProcCount - 1) % summonDetailsVO.SpawnPoints.Length;
                Vector3     offset      = summonDetailsVO.SpawnPoints[num2];
                TroopTypeVO troopTypeVO = Service.StaticDataController.Get <TroopTypeVO>(text);
                IntPosition boardPosition;
                bool        flag2             = this.VerifyBoardPosition(transformComponent, offset, transformComponent.Rotation, troopTypeVO.SizeX, teamType, out boardPosition);
                bool        forceAllow        = !flag2;
                int         randomSpawnRadius = summonDetailsVO.RandomSpawnRadius;
                if (troopTypeVO.Type == TroopType.Phantom && randomSpawnRadius > 0)
                {
                    forceAllow = true;
                    BattleController battleController = Service.BattleController;
                    RandSimSeed      simSeed          = Service.Rand.SimSeed;
                    int num3 = (int)((battleController.Now + simSeed.SimSeedA) % (uint)randomSpawnRadius);
                    int num4 = (int)((battleController.Now + simSeed.SimSeedB) % (uint)randomSpawnRadius);
                    if (num3 % 2 == 0)
                    {
                        num3 *= -1;
                    }
                    if (num4 % 2 == 1)
                    {
                        num4 *= -1;
                    }
                    boardPosition.x = Mathf.Clamp(boardPosition.x + num3, -23, 23);
                    boardPosition.z = Mathf.Clamp(boardPosition.z + num4, -23, 23);
                }
                smartEntity = Service.TroopController.SpawnTroop(troopTypeVO, teamType, boardPosition, TroopSpawnMode.Unleashed, true, forceAllow, summonDetailsVO.VisitorType);
                if (smartEntity == null)
                {
                    Service.Logger.WarnFormat("could not spawn troop visitor {0} for buff {1}", new object[]
                    {
                        text,
                        summonDetailsVO.Uid
                    });
                }
                else
                {
                    this.numSummons++;
                }
            }
            else if (summonDetailsVO.VisitorType == VisitorType.SpecialAttack)
            {
                Vector3 zero = Vector3.zero;
                zero.x = Units.BoardToWorldX(transformComponent.X);
                zero.z = Units.BoardToWorldX(transformComponent.Z);
                SpecialAttackTypeVO specialAttackType = Service.StaticDataController.Get <SpecialAttackTypeVO>(text);
                if (Service.SpecialAttackController.DeploySpecialAttack(specialAttackType, teamType, zero) == null)
                {
                    Service.Logger.WarnFormat("could not spawn special attack {0} for buff {1}", new object[]
                    {
                        text,
                        summonDetailsVO.Uid
                    });
                }
                else
                {
                    this.AddVisitorToValidate(data.BuffObj.BuffType, text, 1);
                }
            }
            else
            {
                Service.Logger.WarnFormat("Unhandled visitor type {0} for {1}", new object[]
                {
                    summonDetailsVO.VisitorType,
                    summonDetailsVO.Uid
                });
            }
            if (smartEntity != null)
            {
                if (summonDetailsVO.DieWithSummoner)
                {
                    list.Add(smartEntity);
                    if (!flag)
                    {
                        this.visitorExecution[data.Target] = list;
                    }
                }
                if (summonDetailsVO.TargetSummoner && smartEntity.ShooterComp != null)
                {
                    smartEntity.ShooterComp.Target = data.Target;
                }
                this.AddVisitorToValidate(data.BuffObj.BuffType, text, 1);
            }
        }