Example #1
0
        private void SkillUp(UserToken token, int value)
        {
            int          userId = GetUserId(token);
            HeroInstance player = instances[userId] as HeroInstance;

            if (player.skillFree > 0)
            {
                //遍历角色技能列表 判断是否有此技能
                foreach (FightSkill item in player.skills)
                {
                    if (item.code == value)
                    {
                        //判断玩家等级 是否达到技能提升等级 -1说明无法升级
                        if (item.nextLevel != -1 && item.nextLevel <= player.level)
                        {
                            player.skillFree -= 1;
                            int            level = item.level + 1;
                            SkillLevelData data  = SkillData.SkillModels[value].levels[level];
                            item.nextLevel   = data.nextLevel;
                            item.range       = data.range;
                            item.preloadTime = data.preloadTime;
                            item.bootTime    = data.bootTime;
                            item.cdTime      = data.cdTime;
                            item.level       = level;
                            Send(token, FightProtocol.SKILL_UP_SRES, item);
                        }
                        return;
                    }
                }
            }
        }
 private void CharacterSkillLevelChangedHandler(
     IProtoSkill protoSkill,
     SkillLevelData levelData)
 {
     this.NotifyPropertyChanged(nameof(this.SkillLevelText));
     this.Refresh();
 }
Example #3
0
        private void skillUp(UserToken token, int value)
        {
            int userId = getUserId(token);
            FightPlayerModel player;

            player = (FightPlayerModel)team[userId];

            if (player.free > 0)
            {
                //遍历角色技能列表 判断是否有此技能
                foreach (FightSkill item in player.skills)
                {
                    if (item.code == value)
                    {
                        //判断玩家等级 是否达到技能提升等级
                        if (item.nextLevel != -1 && item.nextLevel <= player.level)
                        {
                            player.free -= 1;
                            int            level = item.level + 1;
                            SkillLevelData data  = SkillData.skillMap[value].levels[level];
                            item.nextLevel = data.level;
                            item.range     = data.range;
                            item.time      = data.time;
                            item.level     = level;
                            write(token, FightProtocol.SKILL_UP_SRES, item);
                        }
                        return;
                    }
                }
            }
        }
Example #4
0
        internal static Dictionary <int, SkillDataModel> ReadSkillModel(string dir, int sheetIndex)
        {
            FileInfo     file    = new FileInfo(dir);
            ExcelPackage package = new ExcelPackage(file);
            Dictionary <int, SkillDataModel> skillModelList = null;

            if (package.Workbook.Worksheets.Count > 0)
            {
                skillModelList = new Dictionary <int, SkillDataModel>();
                ExcelWorksheet excelWorksheet = package.Workbook.Worksheets[sheetIndex];
                for (int m = excelWorksheet.Dimension.Start.Row + 1, n = excelWorksheet.Dimension.End.Row; m <= n; m++)
                {
                    SkillDataModel skillModel = new SkillDataModel();
                    skillModel.code       = excelWorksheet.GetValue <int>(m, 1);
                    skillModel.name       = excelWorksheet.GetValue <string>(m, 2);
                    skillModel.info       = excelWorksheet.GetValue <string>(m, 17);
                    skillModel.type       = (SkillType)excelWorksheet.GetValue <int>(m, 3);
                    skillModel.targetType = (SkillTargetType)excelWorksheet.GetValue <int>(m, 4);
                    skillModel.costType   = (SkillCostType)excelWorksheet.GetValue <int>(m, 5);
                    string[] costs          = excelWorksheet.GetValue <string>(m, 6).Split('/');
                    int      levelCount     = costs.Length;
                    string[] preloadTimes   = excelWorksheet.GetValue <string>(m, 7).Split('/');
                    string[] bootTimes      = excelWorksheet.GetValue <string>(m, 8).Split('/');
                    string[] cdTimes        = excelWorksheet.GetValue <string>(m, 9).Split('/');
                    string[] ranges         = excelWorksheet.GetValue <string>(m, 10).Split('/');
                    string[] damages        = excelWorksheet.GetValue <string>(m, 11).Split('/');
                    string[] heals          = excelWorksheet.GetValue <string>(m, 12).Split('/');
                    string[] atkSpeedUps    = excelWorksheet.GetValue <string>(m, 13).Split('/');
                    string[] moveSpeedUps   = excelWorksheet.GetValue <string>(m, 14).Split('/');
                    string[] lastingTimes   = excelWorksheet.GetValue <string>(m, 15).Split('/');
                    string[] requiredLevels = excelWorksheet.GetValue <string>(m, 16).Split('/');

                    List <SkillLevelData> levelData = new List <SkillLevelData>(5);
                    for (int i = 0; i < levelCount; i++)
                    {
                        SkillLevelData skillLevelData = new SkillLevelData();

                        skillLevelData.nextLevel   = int.Parse(GetData(requiredLevels, i));
                        skillLevelData.cost        = int.Parse(GetData(costs, i));
                        skillLevelData.preloadTime = int.Parse(GetData(preloadTimes, i));
                        skillLevelData.bootTime    = int.Parse(GetData(bootTimes, i));
                        skillLevelData.cdTime      = int.Parse(GetData(cdTimes, i));
                        skillLevelData.lastingTime = float.Parse(GetData(lastingTimes, i));
                        skillLevelData.damage      = int.Parse(GetData(damages, i));
                        skillLevelData.heal        = int.Parse(GetData(heals, i));
                        skillLevelData.range       = float.Parse(GetData(ranges, i));

                        levelData.Add(skillLevelData);
                    }

                    if (!skillModelList.ContainsKey(skillModel.code))
                    {
                        skillModelList.Add(skillModel.code, skillModel);
                    }
                }
            }

            package.Dispose();
            return(skillModelList);
        }
Example #5
0
        void skillUp(NetFrame.UserToken token, int value)
        {
            int userId = getUserID(token);
            FightPlayerModel player;

            if (teamOne.ContainsKey(userId))
            {
                player = (FightPlayerModel)teamOne[userId];
            }
            else
            {
                player = (FightPlayerModel)teamTwo[userId];
            }
            if (player.free > 0)
            {
                foreach (FightSkill item in player.skills)
                {
                    if (item.code == value)
                    {
                        if (item.nextLevel != -1 && item.nextLevel <= player.level)
                        {
                            player.free -= 1;
                            int            level = item.level + 1;
                            SkillLevelData data  = SkillData.skillMap[value].levels[level];
                            item.nextLevel = data.level;
                            item.range     = data.range;
                            item.time      = data.time;
                            item.level     = level;
                            write(token, FightProtocol.SKILL_UP_SRES, item);
                        }
                    }
                    return;
                }
            }
        }
Example #6
0
 private void SkillsDictionaryPairSetHandler(
     NetworkSyncDictionary <IProtoSkill, SkillLevelData> source,
     IProtoSkill key,
     SkillLevelData value)
 {
     // new skill added
     this.RegisterSkill(key, value, isInitial: false);
     this.OnSkillsChanged();
 }
Example #7
0
        private void RegisterSkill(IProtoSkill skill, SkillLevelData data, bool isInitial)
        {
            data.ClientSubscribe(
                _ => _.Level,
                _ => this.OnSkillLevelChanged(skill, data),
                this);

            if (!isInitial)
            {
                this.OnSkillLevelChanged(skill, data);
            }
        }
Example #8
0
 /// <summary>
 /// 初始化英雄的技能
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 FightSkill[] initSkill(int[] value)
 {
     FightSkill[] skills = new FightSkill[value.Length];
     for (int i = 0; i < value.Length; i++)
     {
         int            skillCode = value[i];
         SkillDataModel data      = SkillData.skillMap[skillCode];
         SkillLevelData levelData = data.levels[0];
         FightSkill     skill     = new FightSkill(skillCode, 0, levelData.level, levelData.time, data.name, levelData.range, data.info, data.target, data.type);
         skills[i] = skill;
     }
     return(skills);
 }
Example #9
0
        /// <summary>
        /// Load flyff skills and levels.
        /// </summary>
        private void LoadSkills()
        {
            try
            {
                Log.Loading("Loading skills...");
                string propSkillPath  = Path.Combine(Global.DataPath, "res", "data", "propSkill.txt");
                var    propSkillTable = new ResourceTable(propSkillPath);

                propSkillTable.AddTexts(texts);
                propSkillTable.AddDefines(defines);
                propSkillTable.SetTableHeaders("ver", "dwID", "szName", "dwNum", "dwPackMax", "dwItemKind1", "dwItemKind2", "dwItemKind3", "dwItemJob", "bPermanence", "dwUseable", "dwItemSex", "dwCost", "dwEndurance", "nAbrasion", "nHardness", "dwHanded", "dwHeelH", "dwParts", "dwPartsub", "bPartFile", "dwExclusive", "dwBasePartsIgnore", "dwItemLV", "dwItemRare", "dwShopAble", "bLog", "bCharged", "dwLinkKindBullet", "dwLinkKind", "dwAbilityMin", "dwAbilityMax", "eItemType", "wItemEAtk", "dwparry", "dwblockRating", "dwAddSkillMin", "dwAddSkillMax", "dwAtkStyle", "dwWeaponType", "dwItemAtkOrder1", "dwItemAtkOrder2", "dwItemAtkOrder3", "dwItemAtkOrder4", "tmContinuousPain", "dwShellQuantity", "dwRecoil", "dwLoadingTime", "nAdjHitRate", "dwAttackSpeed", "dwDmgShift", "dwAttackRange", "dwProbability", "dwDestParam1", "dwDestParam2", "dwDestParam3", "nAdjParamVal1", "nAdjParamVal2", "nAdjParamVal3", "dwChgParamVal1", "dwChgParamVal2", "dwChgParamVal3", "dwdestData1", "dwdestData2", "dwdestData3", "dwactiveskill", "dwactiveskillLv", "dwactiveskillper", "dwReqMp", "dwRepFp", "dwReqDisLV", "dwReSkill1", "dwReSkillLevel1", "dwReSkill2", "dwReSkillLevel2", "dwSkillReadyType", "dwSkillReady", "dwSkillRange", "dwSfxElemental", "dwSfxObj", "dwSfxObj2", "dwSfxObj3", "dwSfxObj4", "dwSfxObj5", "dwUseMotion", "dwCircleTime", "dwSkillTime", "dwExeTarget", "dwUseChance", "dwSpellRegion", "dwSpellType", "dwReferStat1", "dwReferStat2", "dwReferTarget1", "dwReferTarget2", "dwReferValue1", "dwReferValue2", "dwSkillType", "fItemResistElecricity", "fItemResistFire", "fItemResistWind", "fItemResistWater", "fItemResistEarth", "nEvildoing", "dwExpertLV", "ExpertMax", "dwSubDefine", "dwExp", "dwComboStyle", "fFlightSpeed", "fFlightLRAngle", "fFlightTBAngle", "dwFlightLimit", "dwFFuelReMax", "dwAFuelReMax", "dwFuelRe", "dwLimitLevel1", "dwReflect", "dwSndAttack1", "dwSndAttack2", "szIcon", "dwQuestID", "szTextFile", "szComment");
                propSkillTable.Parse();

                while (propSkillTable.Read())
                {
                    var skill = new SkillData(propSkillTable);

                    if (skillData.ContainsKey(skill.ID))
                    {
                        skillData[skill.ID] = skill;
                    }
                    else
                    {
                        skillData.Add(skill.ID, skill);
                    }
                }

                string propSkillLevelPath  = Path.Combine(Global.DataPath, "res", "data", "propSkillAdd.csv");
                var    propSkillLevelTable = new ResourceTable(propSkillLevelPath);
                propSkillLevelTable.AddTexts(texts);
                propSkillLevelTable.AddDefines(defines);
                propSkillLevelTable.SetTableHeaders("dwLevelID", "dwSkillID", "dwSkillLevel", "dwAbilityMin", "dwAbilityMax", "dwAbilityMinPVP", "dwAbilityMaxPVP", "dwAttackSpeed", "dwDmgShift", "nProbability", "nProbabilityPVP", "dwTaunt", "dwDestParam1", "dwDestParam2", "nAdjParamVal1", "nAdjParamVal2", "dwChgParamVal1", "dwChgParamVal2", "dwDestData1", "dwDestData2", "dwDestData3", "dwActiveSkill", "dwActiveSkillRate", "dwActiveSkillRatePVP", "dwReqMp", "dwReqFp", "dwCooldown", "dwCastingTime", "dwSkillRange", "dwCircleTime", "dwPainTime", "dwSkillTime", "dwSkillCount", "dwSkillExp", "dwExp", "dwComboSkillTime");
                propSkillLevelTable.Parse();

                while (propSkillLevelTable.Read())
                {
                    var skillLevel = new SkillLevelData(propSkillLevelTable);

                    if (skillData.ContainsKey(skillLevel.SkillID))
                    {
                        skillData[skillLevel.SkillID].Levels.Add(skillLevel);
                    }
                }

                Log.Done("{0} skills loaded!\t\t\t", skillData.Count);
            }
            catch (Exception e)
            {
                Log.Error("Cannot load skills: {0}", e.Message);
            }
        }
Example #10
0
        private void ServerCharacterSkillLevelChangedHandler(
            ICharacter character,
            IProtoSkill skill,
            SkillLevelData skillLevelData)
        {
            if (skill != this.Skill)
            {
                return;
            }

            var context = this.GetActiveContext(character, out _);

            context?.Refresh();
        }
Example #11
0
        private FightSkill[] initSkill(int[] skills)
        {
            FightSkill[] skill = new FightSkill[skills.Length];

            for (int i = 0; i < skills.Length; i++)
            {
                int            skillCode = skills[i];
                SkillDataModel data      = SkillData.skillMap[skillCode];
                SkillLevelData lData     = data.levels[0];
                FightSkill     temp      = new FightSkill(skillCode, 0, lData.level, lData.time, lData.mp, lData.range, data.name, data.info, data.target, data.type);
                skill[i] = temp;
            }
            return(skill);
        }
Example #12
0
        private void CharacterSkillLevelChangedHandler(
            ICharacter character,
            IProtoSkill skill,
            SkillLevelData skillLevelData)
        {
            if (!this.List.Contains(skill))
            {
                return;
            }

            var context = this.GetActiveContext(character, out _);

            context?.Refresh();
        }
Example #13
0
        public ViewModelSkill(IProtoSkill skill, SkillLevelData data)
        {
            this.skill       = skill;
            this.Title       = this.skill.Name;
            this.Description = this.skill.Description;
            this.LevelMax    = this.skill.MaxLevel;
            this.data        = data;

            data.ClientSubscribe(
                _ => _.Level,
                _ => this.Refresh(),
                this);

            this.Refresh();
        }
        public void OnSkillLevelChanged(IProtoSkill skill, SkillLevelData data)
        {
            this.OnSkillsChanged();

            Api.SafeInvoke(() => SkillLevelChanged?.Invoke(skill, data));

            var level = data.Level;

            if (level == 0)
            {
                return;
            }

            ClientTimersSystem.AddAction(
                delaySeconds: 1,
                () =>
            {
                // show notification
                if (level == 1)
                {
                    Client.Audio.PlayOneShot(SoundResourceSkillDiscovered, volume: 0.5f);
                    NotificationSystem.ClientShowNotification(
                        string.Format(NotificationSkillDiscovered, skill.Name),
                        message: null,
                        color: NotificationColor.Good,
                        icon: skill.Icon,
                        onClick: OnNotificationClick,
                        playSound: false);
                }
                else
                {
                    Client.Audio.PlayOneShot(SoundResourceSkillLevelUp, volume: 0.5f);
                    NotificationSystem.ClientShowNotification(
                        string.Format(NotificationSkillReachedLevel, skill.Name, level),
                        color: NotificationColor.Good,
                        icon: skill.Icon,
                        onClick: OnNotificationClick,
                        playSound: false);
                }
            });

            void OnNotificationClick()
            {
                WindowSkills.OpenAndSelectSkill(skill);
            }
        }
Example #15
0
        public ViewModelSkill(IProtoSkill skill, SkillLevelData data)
        {
            this.skill       = skill;
            this.Title       = this.skill.Name;
            this.Description = this.skill.Description;
            this.LevelMax    = this.skill.MaxLevel;
            this.data        = data;

            data.ClientSubscribe(
                _ => _.Level,
                _ =>
            {
                this.RefreshLevelAndVisibility();
                this.RequestExperienceAndRefreshAll();
            },
                this);

            this.RefreshLevelAndVisibility();
            this.RequestExperienceAndRefreshAll();
        }
Example #16
0
        public void OnSkillLevelChanged(IProtoSkill skill, SkillLevelData data)
        {
            this.OnSkillsChanged();

            var level = data.Level;

            if (level == 0)
            {
                return;
            }

            // show notification
            if (level == 1)
            {
                Client.Audio.PlayOneShot(SoundResourceSkillDiscovered);
                NotificationSystem.ClientShowNotification(
                    string.Format(NotificationSkillDiscovered, skill.Name),
                    message: null,
                    color: NotificationColor.Good,
                    icon: skill.Icon,
                    onClick: OnNotificationClick,
                    playSound: false);
            }
            else
            {
                Client.Audio.PlayOneShot(SoundResourceSkillLevelUp);
                NotificationSystem.ClientShowNotification(
                    string.Format(NotificationSkillReachedLevel, skill.Name, level),
                    color: NotificationColor.Good,
                    icon: skill.Icon,
                    onClick: OnNotificationClick,
                    playSound: false);
            }

            void OnNotificationClick()
            {
                WindowSkills.OpenAndSelectSkill(skill);
            }
        }
Example #17
0
 public void AddSkillLevelData(SkillLevelData _data)
 {
     skillLevelData.Add(_data);
 }
Example #18
0
        private void ProcessSkillData(WzProperty baseNode, SkillTemplate entry)
        {
            // level data
            entry.ItemConsumeAmount = baseNode.GetInt32("itemConNo");
            entry.BulletCount       = baseNode.GetInt32("bulletCount");
            entry.BulletConsume     = baseNode.GetInt32("bulletCon");
            entry.ItemConsume       = baseNode.GetInt32("itemCon");
            entry.OptionalItemCost  = baseNode.GetInt32("itemConsume");
            entry.Morph             = baseNode.GetInt32("morph");

            // verified
            if (baseNode.Get("lt") is WzVector2D lt)
            {
                entry.LT = new Point(lt.X, lt.Y);
            }

            // verified
            if (baseNode["rb"] is WzVector2D rb)
            {
                entry.RB = new Point(rb.X, rb.Y);
            }

            entry.InitSLD(entry.MaxLevel + entry.CombatOrders);

            var isLevelNode = baseNode.Name.Equals("level");

            var parentNode = baseNode;

            // verified
            for (var i = 0; i < entry.DataLength; i++)
            {
                var level = i + 1;

                entry[level] = new SkillLevelData();

                if (isLevelNode)
                {
                    baseNode = parentNode[level.ToString()] as WzProperty ?? parentNode;
                }

                entry[level].FixDamage   = GetEvalInt(baseNode.GetString("fixdamage"), level);
                entry[level].AttackCount = GetEvalInt(baseNode.GetString("attackCount"), level);
                entry[level].MobCount    = GetEvalInt(baseNode.GetString("mobCount"), level);
                entry[level].Time        = GetEvalInt(baseNode.GetString("time"), level);
                entry[level].SubTime     = GetEvalInt(baseNode.GetString("subTime"), level);
                entry[level].MpCon       = GetEvalInt(baseNode.GetString("mpCon"), level);
                entry[level].HpCon       = GetEvalInt(baseNode.GetString("hpCon"), level);
                entry[level].Damage      = GetEvalInt(baseNode.GetString("damage"), level);
                entry[level].Mastery     = GetEvalInt(baseNode.GetString("mastery"), level);
                entry[level].DamR        = GetEvalInt(baseNode.GetString("damR"), level);
                entry[level].Dot         = GetEvalInt(baseNode.GetString("dot"), level);
                entry[level].DotTime     = GetEvalInt(baseNode.GetString("dotTime"), level);
                entry[level].MESOr       = GetEvalInt(baseNode.GetString("mesoR"), level);
                entry[level].Speed       = GetEvalInt(baseNode.GetString("speed"), level);
                entry[level].Jump        = GetEvalInt(baseNode.GetString("jump"), level);
                entry[level].PAD         = GetEvalInt(baseNode.GetString("pad"), level);
                entry[level].MAD         = GetEvalInt(baseNode.GetString("mad"), level);
                entry[level].PDD         = GetEvalInt(baseNode.GetString("pdd"), level);
                entry[level].MDD         = GetEvalInt(baseNode.GetString("mdd"), level);
                entry[level].EVA         = GetEvalInt(baseNode.GetString("eva"), level);
                entry[level].ACC         = GetEvalInt(baseNode.GetString("acc"), level);
                entry[level].HP          = GetEvalInt(baseNode.GetString("hp"), level);
                entry[level].MHPr        = GetEvalInt(baseNode.GetString("mhpR"), level);
                entry[level].MP          = GetEvalInt(baseNode.GetString("mp"), level);
                entry[level].MMPr        = GetEvalInt(baseNode.GetString("mmpR"), level);
                entry[level].Prop        = GetEvalInt(baseNode.GetString("prop"), level);
                entry[level].SubProp     = GetEvalInt(baseNode.GetString("subProp"), level);
                entry[level].Cooltime    = GetEvalInt(baseNode.GetString("cooltime"), level);
                entry[level].ASRr        = GetEvalInt(baseNode.GetString("asrR"), level);
                entry[level].TERr        = GetEvalInt(baseNode.GetString("terR"), level);
                entry[level].EMDD        = GetEvalInt(baseNode.GetString("emdd"), level);
                entry[level].EMHP        = GetEvalInt(baseNode.GetString("emhp"), level);
                entry[level].EMMP        = GetEvalInt(baseNode.GetString("emmp"), level);
                entry[level].EPAD        = GetEvalInt(baseNode.GetString("epad"), level);
                entry[level].EPDD        = GetEvalInt(baseNode.GetString("epdd"), level);
                entry[level].Cr          = GetEvalInt(baseNode.GetString("cr"), level);
                entry[level].T           = GetEvalDouble(baseNode.GetString("t"), level);
                entry[level].U           = GetEvalDouble(baseNode.GetString("u"), level);
                entry[level].V           = GetEvalDouble(baseNode.GetString("v"), level);
                entry[level].W           = GetEvalDouble(baseNode.GetString("w"), level);
                entry[level].X           = GetEvalDouble(baseNode.GetString("x"), level);
                entry[level].Y           = GetEvalDouble(baseNode.GetString("y"), level);
                entry[level].Z           = GetEvalDouble(baseNode.GetString("z"), level);
                entry[level].PADr        = GetEvalInt(baseNode.GetString("padR"), level);
                entry[level].PADx        = GetEvalInt(baseNode.GetString("padX"), level);
                entry[level].MADr        = GetEvalInt(baseNode.GetString("madR"), level);
                entry[level].MADx        = GetEvalInt(baseNode.GetString("madX"), level);
                entry[level].PDDr        = GetEvalInt(baseNode.GetString("pddR"), level);
                entry[level].MDDr        = GetEvalInt(baseNode.GetString("mddR"), level);
                entry[level].EVAr        = GetEvalInt(baseNode.GetString("evaR"), level);
                entry[level].ACCr        = GetEvalInt(baseNode.GetString("accR"), level);
                entry[level].IMPr        = GetEvalInt(baseNode.GetString("ignoreMobpdpR"), level);
                entry[level].IMDr        = GetEvalInt(baseNode.GetString("ignoreMobDamR"), level);
                entry[level].CDMin       = GetEvalInt(baseNode.GetString("criticaldamageMin"), level);
                entry[level].CDMax       = GetEvalInt(baseNode.GetString("criticaldamageMax"), level);
                entry[level].EXPr        = GetEvalInt(baseNode.GetString("expR"), level);
                entry[level].Er          = GetEvalInt(baseNode.GetString("er"), level);
                entry[level].Ar          = GetEvalInt(baseNode.GetString("ar"), level);
                entry[level].OCr         = GetEvalInt(baseNode.GetString("overChargeR"), level);
                entry[level].DCr         = GetEvalInt(baseNode.GetString("disCountR"), level);
                entry[level].PDamr       = GetEvalInt(baseNode.GetString("pdR"), level);
                entry[level].MDamr       = GetEvalInt(baseNode.GetString("mdR"), level);
                entry[level].PsdJump     = GetEvalInt(baseNode.GetString("psdJump"), level);
                entry[level].PsdSpeed    = GetEvalInt(baseNode.GetString("psdSpeed"), level);

                // skill bufftime modification
                switch ((Skills)entry.TemplateId)
                {
                case Skills.MECHANIC_FLAMETHROWER:
                case Skills.MECHANIC_FLAMETHROWER_UP:
                    entry[level].Time = 1;
                    break;

                case Skills.MECHANIC_HN07:                         // mount
                case Skills.WILDHUNTER_JAGUAR_RIDING:              // mount
                case Skills.MECHANIC_SAFETY:                       // permanent
                case Skills.MECHANIC_PERFECT_ARMOR:                // permanent
                case Skills.MECHANIC_SIEGE2:                       // semi-permanent (uses hp per sec)
                    entry[level].Time = -1;
                    break;

                case Skills.MECHANIC_SG88:
                case Skills.MECHANIC_SATELITE:
                case Skills.MECHANIC_SATELITE2:
                case Skills.MECHANIC_SATELITE3:
                    entry[level].Time = 2100000;
                    break;

                case Skills.CROSSBOWMAN_FINAL_ATTACK_CROSSBOW:
                case Skills.FIGHTER_FINAL_ATTACK:
                case Skills.HUNTER_FINAL_ATTACK_BOW:
                case Skills.PAGE_FINAL_ATTACK:
                case Skills.SOULMASTER_FINAL_ATTACK_SWORD:
                case Skills.SPEARMAN_FINAL_ATTACK:
                case Skills.WILDHUNTER_FINAL_ATTACK:
                case Skills.WINDBREAKER_FINAL_ATTACK_BOW:
                    entry[level].MobCount = 3;
                    break;
                }

                // bullet/attack/mob count modification
                switch ((Skills)entry.TemplateId)
                {
                case Skills.MECHANIC_SIEGE1:
                case Skills.MECHANIC_SIEGE2:
                case Skills.MECHANIC_SIEGE2_SPECIAL:
                    entry[level].AttackCount = 6;
                    entry.BulletCount        = 6;
                    break;
                }
            }
        }
Example #19
0
        public void Damage(int level, ref AbsFightInstance atk, ref AbsFightInstance target, ref List <int[]> damages, SkillLevelData skillLevelData = null)
        {
            int value = atk.atk - target.def;

            value     = value > 0 ? value : 1;
            target.hp = target.hp - value <= 0 ? 0 : target.hp - value;
            //一组伤害数据: 目标id、伤害值、是否活着(0为死亡、1为活着)
            damages.Add(new int[] { target.instanceId, value, target.hp == 0 ? 0 : 1 });
        }