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(); }
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; } } } }
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); }
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; } } }
private void SkillsDictionaryPairSetHandler( NetworkSyncDictionary <IProtoSkill, SkillLevelData> source, IProtoSkill key, SkillLevelData value) { // new skill added this.RegisterSkill(key, value, isInitial: false); this.OnSkillsChanged(); }
private void RegisterSkill(IProtoSkill skill, SkillLevelData data, bool isInitial) { data.ClientSubscribe( _ => _.Level, _ => this.OnSkillLevelChanged(skill, data), this); if (!isInitial) { this.OnSkillLevelChanged(skill, data); } }
/// <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); }
/// <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); } }
private void ServerCharacterSkillLevelChangedHandler( ICharacter character, IProtoSkill skill, SkillLevelData skillLevelData) { if (skill != this.Skill) { return; } var context = this.GetActiveContext(character, out _); context?.Refresh(); }
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); }
private void CharacterSkillLevelChangedHandler( ICharacter character, IProtoSkill skill, SkillLevelData skillLevelData) { if (!this.List.Contains(skill)) { return; } var context = this.GetActiveContext(character, out _); context?.Refresh(); }
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); } }
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(); }
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); } }
public void AddSkillLevelData(SkillLevelData _data) { skillLevelData.Add(_data); }
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; } } }
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 }); }