Beispiel #1
0
        /// <summary>
        /// Loads the DropGold instruction for a given mover.
        /// </summary>
        /// <param name="mover">Mover</param>
        /// <param name="dropGoldInstruction">DropGold instruction</param>
        private void LoadDropGold(MoverData mover, Instruction dropGoldInstruction)
        {
            if (dropGoldInstruction == null)
            {
                return;
            }

            if (dropGoldInstruction.Parameters.Count < 2)
            {
                this._logger.LogWarning($"Cannot load 'DropGold' instruction for mover {mover.Name}. Reason: Missing parameters.");
                return;
            }

            if (!int.TryParse(dropGoldInstruction.Parameters.ElementAt(0).ToString(), out int minGold))
            {
                this._logger.LogWarning($"Cannot load min gold amount for mover {mover.Name}.");
            }

            if (!int.TryParse(dropGoldInstruction.Parameters.ElementAt(1).ToString(), out int maxGold))
            {
                this._logger.LogWarning($"Cannot load max gold amount for mover {mover.Name}.");
            }

            mover.DropGoldMin = minGold;
            mover.DropGoldMax = maxGold;
        }
Beispiel #2
0
 void Start()
 {
     travelData = new TravelData();
     moverData  = GetComponent <MoverData>();
     duelData   = GetComponent <DuelData>();
     healthData = GetComponent <Health>();
 }
Beispiel #3
0
 public void SetMovingData(MoverData data)
 {
     if (data)
     {
         if (!mover)
         {
             mover = GetComponent <Mover>();
             if (!mover)
             {
                 mover = gameObject.AddComponent <Mover>();
             }
         }
         mover.useRadius   = true;
         mover.speed       = data.speed;
         mover.startRadius = data.startRadius;
         mover.endRadius   = data.endRadius;
         mover.randomized  = data.randomRadian;
     }
     else
     {
         if (mover)
         {
             mover.moving = false;
         }
         else
         {
             mover = GetComponent <Mover>();
             if (mover)
             {
                 mover.moving = false;
             }
         }
     }
 }
Beispiel #4
0
    public void Start()
    {
        positionOffset = new Vector3(Random.Range(40f, 60f), Random.Range(-10f, 10f));
        duelData       = GetComponent <DuelData>();

        shooterGO = new GameObject();
        shooterGO.transform.SetParent(transform);
        shooterGO.transform.localPosition = Vector3.zero;
        shooter = shooterGO.AddComponent <Shooter>();

        shooter.Setup(GetComponent <DamageData>(), duelData);
        enemyOnRange = shooterGO.GetComponent <EnemyOnRangeNoCollider>();
        enemyOnRange.Setup(GetComponent <DamageData>());
        moverData  = GetComponent <MoverData>();
        healthData = GetComponent <Health>();

        if (towerTransform)
        {
            //enemyOnRange.transform.SetParent(towerTransform);
            enemyOnRange.transform.position = towerTransform.position;
        }
        if (anchorPoint != null)
        {
            GetComponent <MoveToPoint>().SetTarget(this.anchorPoint);
        }

        if (isHeroOrReinforcement == false)
        {
            InvokeRepeating("CheckIfThereIsOtherNonDuelingTarget", 1f, 1f);
        }
    }
Beispiel #5
0
        public object CaptureState()
        {
            MoverData data = new MoverData();

            data.position = new SerializableVector3(transform.position);
            data.rotation = new SerializableVector3(transform.eulerAngles);
            return(data);
        }
Beispiel #6
0
        protected Mover(MoverData data)
        {
            Rotate       = data.Rotate;
            Speed        = data.Speed;
            DefaultSpeed = data.Speed;

            this.tickableManager = Container.Instance.Resolve <TickableManager>();
        }
Beispiel #7
0
 void Start()
 {
     healthData = GetComponent <Health>();
     moverData  = GetComponent <MoverData>();
     animator   = GetComponentInChildren <Animator>();
     duelData   = GetComponent <DuelData>();
     isEnemy    = GetComponent <AllyDuel>() == null;
 }
Beispiel #8
0
        public void RestoreState(object state)
        {
            MoverData data = (MoverData)state;

            GetComponent <NavMeshAgent>().enabled = false;
            transform.position    = data.position.ToVector();
            transform.eulerAngles = data.rotation.ToVector();
            GetComponent <NavMeshAgent>().enabled = true;
        }
Beispiel #9
0
        public object CaptureState()
        {
            var objectTransform = transform;
            var data            = new MoverData
            {
                position = new SerializableVector3(objectTransform.position),
                rotation = new SerializableVector3(objectTransform.eulerAngles)
            };

            return(data);
        }
Beispiel #10
0
        /// <summary>
        /// Loads a collection of DropItem instruction for a given mover.
        /// </summary>
        /// <param name="mover">Mover</param>
        /// <param name="dropItemInstructions">Collection of DropItem instructions</param>
        private void LoadDropItems(MoverData mover, IEnumerable <Instruction> dropItemInstructions)
        {
            if (dropItemInstructions == null)
            {
                return;
            }

            foreach (var dropItemInstruction in dropItemInstructions)
            {
                var dropItem = new DropItemData();

                string dropItemName = dropItemInstruction.Parameters.ElementAt(0).ToString();
                if (this._definesLoader.Defines.TryGetValue(dropItemName, out int itemId))
                {
                    dropItem.ItemId = itemId;
                }
                else
                {
                    this._logger.LogWarning($"Cannot find drop item id: {dropItemName} for mover {mover.Name}.");
                    continue;
                }

                if (long.TryParse(dropItemInstruction.Parameters.ElementAt(1).ToString(), out long probability))
                {
                    dropItem.Probability = probability;
                }
                else
                {
                    this._logger.LogWarning($"Cannot read drop item probability for item {dropItemName} and mover {mover.Name}.");
                }

                if (int.TryParse(dropItemInstruction.Parameters.ElementAt(2).ToString(), out int itemMaxRefine))
                {
                    dropItem.ItemMaxRefine = itemMaxRefine;
                }
                else
                {
                    this._logger.LogWarning($"Cannot read drop item refine max for item {dropItemName} and mover {mover.Name}.");
                }

                if (int.TryParse(dropItemInstruction.Parameters.ElementAt(3).ToString(), out int itemCount))
                {
                    dropItem.Count = itemCount;
                }
                else
                {
                    this._logger.LogWarning($"Cannot read drop item count for item {dropItemName} and mover {mover.Name}.");
                }

                mover.DropItems.Add(dropItem);
            }
        }
Beispiel #11
0
        /// <summary>
        /// Create a new monster.
        /// </summary>
        /// <param name="moverData">Monster's data</param>
        /// <param name="respawnRegion">Respawn region</param>
        /// <returns></returns>
        private MonsterEntity CreateMonster(MoverData moverData, IMapRespawnRegion respawnRegion)
        {
            var monster   = new MonsterEntity(this);
            var behaviors = DependencyContainer.Instance.Resolve <BehaviorLoader>();

            monster.Object = new ObjectComponent
            {
                MapId    = this.Parent.Id,
                LayerId  = this.Id,
                ModelId  = moverData.Id,
                Type     = WorldObjectType.Mover,
                Position = respawnRegion.GetRandomPosition(),
                Angle    = RandomHelper.FloatRandom(0, 360f),
                Name     = moverData.Name,
                Size     = ObjectComponent.DefaultObjectSize,
                Spawned  = true,
                Level    = moverData.Level
            };
            monster.Timers = new TimerComponent
            {
                NextMoveTime = RandomHelper.LongRandom(8, 20)
            };
            monster.MovableComponent = new MovableComponent
            {
                Speed = moverData.Speed,
                DestinationPosition = monster.Object.Position.Clone()
            };
            monster.Health = new HealthComponent
            {
                Hp = moverData.AddHp,
                Mp = moverData.AddMp,
                Fp = 0
            };
            monster.Statistics = new StatisticsComponent
            {
                Strength     = (ushort)moverData.Strength,
                Stamina      = (ushort)moverData.Stamina,
                Dexterity    = (ushort)moverData.Dexterity,
                Intelligence = (ushort)moverData.Intelligence
            };
            monster.Behavior = behaviors.MonsterBehaviors.GetBehavior(monster.Object.ModelId);
            monster.Region   = respawnRegion;
            monster.Data     = moverData;
            if (moverData.Class == MoverClassType.RANK_BOSS)
            {
                monster.Object.Size *= 2;
            }

            return(monster);
        }
Beispiel #12
0
 void Start()
 {
     healthData = GetComponent <Health>();
     enemyData  = GetComponent <EnemyData>();
     moverData  = GetComponent <MoverData>();
     Vector3[] randomPath = GetRandomPath();
     if (randomPath == null)
     {
         return;
     }
     transform.position = randomPath[0];
     iTween.MoveTo(gameObject, iTween.Hash("path", randomPath, "speed", moverData.speed,
                                           "easetype", iTween.EaseType.linear, "oncomplete", "OnComplete"));
     enemyData.tweenInfo.tween     = GetComponent <iTween>();
     enemyData.tweenInfo.startTime = Time.time;
 }
Beispiel #13
0
        public static Mover Factory(MoverData data)
        {
            switch (data.Type)
            {
            case MoverType.Linear:
                return(new LinearMover(data));

            case MoverType.Directional:
                return(new DirectionalMover(data));

            case MoverType.Curve:
                return(new CurveMover(data));

            case MoverType.Parabolic:
                return(new ParabolicMover(data));

            default:
                throw new ArgumentOutOfRangeException(nameof(data.Type), data.Type, "");
            }
        }
Beispiel #14
0
        /// <summary>
        /// Load all flyff movers.
        /// </summary>
        private void LoadMovers()
        {
            Log.Loading("Loading movers data...");

            try
            {
                string propMoverPath = Path.Combine(Global.DataPath, "res", "data", "propMover.txt");
                var    propMover     = new ResourceTable(propMoverPath);

                propMover.AddDefines(defines);
                propMover.AddTexts(texts);
                propMover.SetTableHeaders("dwID", "szName", "dwAI", "dwStr", "dwSta", "dwDex", "dwInt", "dwHR", "dwER", "dwRace", "dwBelligerence", "dwGender", "dwLevel", "dwFlightLevel", "dwSize", "dwClass", "bIfPart", "dwKarma", "dwUseable", "dwActionRadius", "dwAtkMin", "dwAtkMax", "dwAtk1", "dwAtk2", "dwAtk3", "dwHorizontalRate", "dwVerticalRate", "dwDiagonalRate", "dwThrustRate", "dwChestRate", "dwHeadRate", "dwArmRate", "dwLegRate", "dwAttackSpeed", "dwReAttackDelay", "dwAddHp", "dwAddMp", "dwNaturealArmor", "nAbrasion", "nHardness", "dwAdjAtkDelay", "eElementType", "wElementAtk", "dwHideLevel", "fSpeed", "dwShelter", "bFlying", "dwJumping", "dwAirJump", "bTaming", "dwResistMagic", "fResistElectricity", "fResistFire", "fResistWind", "fResistWater", "fResistEarth", "dwCash", "dwSourceMaterial", "dwMaterialAmount", "dwCohesion", "dwHoldingTime", "dwCorrectionValue", "dwExpValue", "nFxpValue", "nBodyState", "dwAddAbility", "bKillable", "dwVirtItem1", "dwVirtType1", "dwVirtItem2", "dwVirtType2", "dwVirtItem3", "dwVirtType3", "dwSndAtk1", "dwSndAtk2", "dwSndDie1", "dwSndDie2", "dwSndDmg1", "dwSndDmg2", "dwSndDmg3", "dwSndIdle1", "dwSndIdle2", "szComment");
                propMover.Parse();

                while (propMover.Read())
                {
                    var monsterData = new MoverData(propMover);

                    if (moversData.ContainsKey(monsterData.Id))
                    {
                        moversData[monsterData.Id] = monsterData;
                    }
                    else
                    {
                        moversData.Add(monsterData.Id, monsterData);
                    }

                    Log.Loading("Loading {0}/{1} movers...", propMover.ReadingIndex, propMover.Count);
                }

                Log.Done("{0} movers loaded!\t\t\t", moversData.Count);
            }
            catch (Exception e)
            {
                Log.Error("Cannot load movers: {0}", e.Message);
            }
        }
Beispiel #15
0
        /// <summary>
        /// Loads a collection of DropKind instructions for a given mover.
        /// </summary>
        /// <param name="mover"></param>
        /// <param name="instructions"></param>
        private void LoadDropItemsKind(MoverData mover, IEnumerable <Instruction> instructions)
        {
            if (instructions == null)
            {
                return;
            }

            foreach (var dropItemKindInstruction in instructions)
            {
                var dropItemKind = new DropItemKindData();

                if (dropItemKindInstruction.Parameters.Count < 0 || dropItemKindInstruction.Parameters.Count > 3)
                {
                    this._logger.LogWarning($"Cannot load 'DropKind' instruction for mover {mover.Name}. Reason: Missing parameters.");
                    continue;
                }

                string itemKind = dropItemKindInstruction.Parameters.ElementAt(0).ToString().Replace("IK3_", string.Empty);
                dropItemKind.ItemKind = (ItemKind3)Enum.Parse(typeof(ItemKind3), itemKind);

                // From official files: Project.cpp:2824
                dropItemKind.UniqueMin = mover.Level - 5;
                dropItemKind.UniqueMax = mover.Level - 2;

                if (dropItemKind.UniqueMin < 1)
                {
                    dropItemKind.UniqueMin = 1;
                }
                if (dropItemKind.UniqueMax < 1)
                {
                    dropItemKind.UniqueMax = 1;
                }

                mover.DropItemsKind.Add(dropItemKind);
            }
        }
Beispiel #16
0
 public DirectionalMover(MoverData data) : base(data)
 {
 }
Beispiel #17
0
 void Start()
 {
     healthData = GetComponent <Health>();
     moverData  = GetComponent <MoverData>();
     animator   = GetComponentInChildren <Animator>();
 }
Beispiel #18
0
 public ParabolicMover(MoverData data) : base(data)
 {
     this.height = data.Height;
 }
Beispiel #19
0
 public CurveMover(MoverData data) : base(data)
 {
     this.acceleration = data.Acceleration;
     this.height       = RNG.Range(-1.5f, 1.5f);
 }
Beispiel #20
0
 public LinearMover(MoverData data) : base(data)
 {
 }