/// <summary> /// 属性配置優先順を取得 /// </summary> /// <param name="member_order"></param> /// <returns></returns> public CostInfo[] getElementOrder(PanelInfo panel_info, GlobalDefine.PartyCharaIndex[] member_order) { List <CostInfo> cost_info_order = new List <CostInfo>(); // 復活があるときは回復を最優先で置く if (m_IsTryResurrect) { int sp = BattleParam.m_PlayerParty.GetSP(); if (sp > 0) { CharaOnce[] dead_charas = BattleParam.m_PlayerParty.getPartyMembers(CharaParty.CharaCondition.DEAD); if (dead_charas.Length > 0) { for (int field_idx = 0; field_idx < panel_info.m_IsBoosts.Length; field_idx++) { if (panel_info.m_IsBoosts[field_idx]) { cost_info_order.Add(new CostInfo(MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL)); break; } } } } } // メインユニットのLEADER,MOB_1,MOB2,MOB3,FRIEND,リンクユニットのLEADER,MOB_1,MOB2,MOB3,FRIENDの順に並べる for (int skill_idx = 0; skill_idx < m_SkillCosts.GetLength(2); skill_idx++) { for (int link_idx = 0; link_idx < m_SkillCosts.GetLength(0); link_idx++) { for (int member_idx = 0; member_idx < member_order.Length; member_idx++) { GlobalDefine.PartyCharaIndex member_type = member_order[member_idx]; SkillCost skill_cost = m_SkillCosts[link_idx, (int)member_type, skill_idx]; if (skill_cost != null && skill_cost.m_CostInfo != null ) { bool is_enable_skill = true; { CharaOnce chara_once = BattleParam.m_PlayerParty.getPartyMember(member_type, CharaParty.CharaCondition.ALIVE); if (chara_once == null) { is_enable_skill = false; } } if (is_enable_skill) { cost_info_order.Add(skill_cost.m_CostInfo); } } } } } CostInfo[] ret_val = cost_info_order.ToArray(); return(ret_val); }
public void ChaangeType(SkillCost cost) { if (changeType) { ((SkillCostStat)cost).type = typeToChagneToo; } }
public string CostString() { string Cost = ""; cCharacterSkillCost[] cDefaultArray = SkillCost.Where(x => x.isDefaultPool).ToArray(); foreach (cCharacterSkillCost cDefault in cDefaultArray) { Cost = cDefault.CPCostPaid.ToString(); if (SkillCost.Count > 1) { Cost = cDefault.PoolDescription + ":" + Cost; } } cCharacterSkillCost[] cOtherArray = SkillCost.Where(x => !x.isDefaultPool).ToArray(); foreach (cCharacterSkillCost cOther in cOtherArray) { if (Cost.Length > 0) { Cost += "; "; } Cost += cOther.PoolDescription + ":" + cOther.CPCostPaid; } return(Cost); }
public async Task <ActionResult> Create(SkillsFormViewModel viewModel) { if (!ModelState.IsValid) { return(View(viewModel)); } var elements = GetElements(); var skillCosts = GetSkillCosts(); SkillCost skillCost = _context.SkillCosts.FirstOrDefault(x => x.Id.ToString() == viewModel.SelectedCost); var costAmount = skillCost.Resource == "hp" ? skillCost.Amount + " %" + skillCost.Resource : (skillCost.Resource == "sp" ? skillCost.Amount + skillCost.Resource : skillCost.Amount); var skills = new Skills { SkillName = viewModel.SkillName, Effect = viewModel.Effect, Cost = _context.SkillCosts.FirstOrDefault(c => c.Id.ToString() == viewModel.SelectedCost), CostAmount = skillCost.Amount + skillCost.Resource, Power = viewModel.Power, Element = _context.PersonaElements.FirstOrDefault(e => e.Name.ToString() == viewModel.SelectedElement), ElementName = viewModel.SelectedElement }; _context.PersonaSkills.Add(skills); await _context.SaveChangesAsync(); return(RedirectToAction("Index")); }
private Skill(uint skillID, string skillName, SkillType type, SkillProperty property, SkillCost cost, string desc) { SkillID = skillID; SkillName = skillName; SkillType = type; Property = property; Cost = cost; Description = desc; }
public override void Modify(SkillCost cost, StatTypes typeToChange) { if (cost is SkillCostStat) { SkillCostStat stat = cost as SkillCostStat; if (stat.type == typeToChange) { stat.cost = Mathf.RoundToInt(stat.cost * multipler); } } }
public override void Modify(SkillCost cost, StatTypes typeToChange) { if (cost is SkillCostStat) { SkillCostStat stat = cost as SkillCostStat; if (stat.type == typeToChange) { stat.cost = setTo; } } }
public void SetUp(Character character) { this.No = character.No; this.Name = character.Name; this.Type = character.Type; this.Att = character.Att; image.color = manaIcon.ColorImage(ToAttribute(Att)); this.Hp = character.Hp; this.Atk = character.Atk; this.Rec = character.Rec; this.Skill = character.Skill; this.SkillCost = character.SkillCost; mananum.text = SkillCost.ToString(); this.refR = character.refR; this.refW = character.refW; this.refL = character.refL; this.refS = character.refS; this.refD = character.refD; }
public static void StartUp(TestContext ctx) { Definer.Instance().Engine = Engine; DamageTypeTemplate trueDamage = new DamageTypeTemplate(Engine, null, null, null, null); trueDamage.Name = "true"; trueDamage.Key = "T"; Engine.AddDamageType(trueDamage); ResourceTemplate res = new ResourceTemplate() { Key = "MP" }; SkillCost nullCost = new SkillCost(res, TreeConverter.Build("0", Engine)); _testSkill = new SkillTemplate(); _testSkill.Type = SkillType.Cast; _testSkill.Key = "TEST_CAST"; SkillLevelTemplate testLevelTemplate = new SkillLevelTemplate(); testLevelTemplate.Cooldown = TreeConverter.Build("3", Engine); testLevelTemplate.Duration = TreeConverter.Build($"{LConstants.SourceKeyword}{LConstants.PROP_OP}INT", Engine); testLevelTemplate.Interruptible = TreeConverter.Build("true", Engine); testLevelTemplate.Formulas.Add(TreeConverter.Build($"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10)", Engine)); testLevelTemplate.PushBack = TreeConverter.Build("true", Engine); testLevelTemplate.Cost = nullCost; _testSkill.ByLevel.Add(testLevelTemplate); Engine.GetSkillManager().AddSkill(_testSkill); BaseObject bDmg = new BaseObject() { Description = "", Key = "BASE_DMG", Name = "Base damage" }; Engine.GetPropertyManager().BaseValues.Add("BASE_DMG", bDmg); BaseObject intellect = new BaseObject() { Description = "", Key = "INT", Name = "Intellect" }; Engine.GetPropertyManager().Attributes.Add("INT", intellect); }
public abstract void Modify(SkillCost cost, StatTypes typeToChange);
private void Start() { skillCost = GetComponent <SkillCost>(); SetAllSkillText(); lang = FindObjectOfType <MainMenu>().language; }
protected void tvSkills_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { if (e.Node.Checked) { TreeView OrigTreeView = new TreeView(); CopyTreeNodes(tvSkills, OrigTreeView); MarkParentNodes(e.Node); List <cSkillPool> oSkillList = Session["CharacterSkillPools"] as List <cSkillPool>; DataTable dtPointsSpent = new DataTable(); dtPointsSpent.Columns.Add(new DataColumn("PoolID", typeof(int))); dtPointsSpent.Columns.Add(new DataColumn("CPSpent", typeof(double))); dtPointsSpent.Columns.Add(new DataColumn("TotalCP", typeof(double))); foreach (cSkillPool cSkill in oSkillList) { DataRow dNewRow = dtPointsSpent.NewRow(); dNewRow["PoolID"] = cSkill.PoolID; dNewRow["TotalCP"] = cSkill.TotalPoints; dNewRow["CPSpent"] = 0.0; dtPointsSpent.Rows.Add(dNewRow); } DataTable dtAllSkills = Session["SkillNodes"] as DataTable; double TotalSpent = 0.0; DataTable dtSkillCosts = new DataTable(); dtSkillCosts.Columns.Add(new DataColumn("Skill", typeof(string))); dtSkillCosts.Columns.Add(new DataColumn("Cost", typeof(double))); dtSkillCosts.Columns.Add(new DataColumn("SortOrder", typeof(int))); dtSkillCosts.Columns.Add(new DataColumn("SkillID", typeof(int))); double TotalCP = 0.0; double.TryParse(Session["TotalCP"].ToString(), out TotalCP); string sSkills = ""; foreach (TreeNode SkillNode in tvSkills.CheckedNodes) { int iSkillID; if (int.TryParse(SkillNode.Value, out iSkillID)) { DataRow[] dSkillRow = dtAllSkills.Select("CampaignSkillNodeID = " + iSkillID.ToString()); if (dSkillRow.Length > 0) { double SkillCost; int PoolID; if ((double.TryParse(dSkillRow[0]["SkillCPCost"].ToString(), out SkillCost)) && (int.TryParse(dSkillRow[0]["CampaignSkillPoolID"].ToString(), out PoolID))) { if (dtSkillCosts.Select("SkillID = " + iSkillID.ToString()).Length == 0) { DataRow[] dSkillCountRow = dtPointsSpent.Select("PoolID = " + PoolID.ToString()); if (dSkillCountRow.Length > 0) { dSkillCountRow[0]["CPSpent"] = (double)(dSkillCountRow[0]["CPSpent"]) + SkillCost; } } TotalSpent += SkillCost; if (SkillCost > 0) { sSkills += dSkillRow[0]["SkillName"].ToString() + ":" + SkillCost.ToString() + ", "; } DataRow dNewRow = dtSkillCosts.NewRow(); dNewRow["Skill"] = dSkillRow[0]["SkillName"].ToString(); dNewRow["Cost"] = SkillCost; dNewRow["SkillID"] = iSkillID; dNewRow["SortOrder"] = 10; dtSkillCosts.Rows.Add(dNewRow); } } } } bool bSpentTooMuch = false; foreach (DataRow dCostRow in dtPointsSpent.Rows) { double CPSpent; double TotalCPForPool; if ((double.TryParse(dCostRow["TotalCP"].ToString(), out TotalCPForPool)) && (double.TryParse(dCostRow["CPSpent"].ToString(), out CPSpent))) { if (CPSpent > TotalCPForPool) { bSpentTooMuch = true; } } } if (bSpentTooMuch) { tvSkills.Nodes.Clear(); TreeView OrigTree = Session["CurrentSkillTree"] as TreeView; CopyTreeNodes(OrigTree, tvSkills); AlertMessage = "You do not have enough CP to buy that."; } else { bMeetAllRequirements = true; CheckForRequirements(e.Node.Value); if (!bMeetAllRequirements) { tvSkills.Nodes.Clear(); TreeView OrigTree = Session["CurrentSkillTree"] as TreeView; CopyTreeNodes(OrigTree, tvSkills); e.Node.Checked = false; AlertMessage = "You do not have all the requirements to purchase that item."; } else { CheckAllNodesWithValue(e.Node.Value, true); } } List <TreeNode> FoundNodes = FindNodesByValue(e.Node.Value); foreach (TreeNode t in FoundNodes) { t.ShowCheckBox = false; EnableChildren(t); } } else { // Check to see if we should not allow them to sell it back. if (ViewState["SkillList"] != null) { int iSkillID; if (int.TryParse(e.Node.Value, out iSkillID)) { List <int> SkillList = ViewState["SkillList"] as List <int>; if (SkillList.Contains(iSkillID)) { if (hidAllowCharacterRebuild.Value == "0") { e.Node.Checked = true; AlertMessage = "This campaign is not allowing skills to be rebuilt at this time. Once a skill is selected and saved, it cannot be changed."; //ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), // "MyApplication", // jsString, // true); return; } } } } DeselectChildNodes(e.Node); CheckAllNodesWithValue(e.Node.Value, false); List <TreeNode> FoundNodes = FindNodesByValue(e.Node.Value); foreach (TreeNode t in FoundNodes) { t.Text = t.Text.Replace("grey", "black"); t.ImageUrl = ""; t.ShowCheckBox = true; EnableChildren(t); } } CheckExclusions(); ListSkills(); Session["CurrentSkillTree"] = tvSkills; lblMessage.Text = "Skills Changed"; lblMessage.ForeColor = Color.Red; }
private void Start() { upMenu = FindObjectOfType <Upgrademenu>(); skillCost = FindObjectOfType <SkillCost>(); }
/// <summary> /// スキル効果を適用 /// </summary> /// <param name="skill_type"></param> /// <param name="passive_skill_master"></param> /// <param name="member_index"></param> /// <param name="is_link_member"></param> /// <param name="dest_param_ai"></param> public void applySkill(MasterDataDefineLabel.AutoPlaySkillType skill_type, GlobalDefine.PartyCharaIndex member_index, bool is_link_member) { CostInfo cost_info = null; int work_panel_plus = 0; bool work_is_resurrect = false; int skip_on_hands = 0; switch (skill_type) { case MasterDataDefineLabel.AutoPlaySkillType.SKILL1_SELF: cost_info = _getActiveSkillCost(member_index, 0); break; case MasterDataDefineLabel.AutoPlaySkillType.SKILL1_LEADER: cost_info = _getActiveSkillCost(GlobalDefine.PartyCharaIndex.LEADER, 0); break; case MasterDataDefineLabel.AutoPlaySkillType.SKILL2_SELF: cost_info = _getActiveSkillCost(member_index, 1); break; case MasterDataDefineLabel.AutoPlaySkillType.SKILL2_LEADER: cost_info = _getActiveSkillCost(GlobalDefine.PartyCharaIndex.LEADER, 1); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_NAUGHT: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.NAUGHT, MasterDataDefineLabel.ElementType.NAUGHT, MasterDataDefineLabel.ElementType.NAUGHT, MasterDataDefineLabel.ElementType.NAUGHT, MasterDataDefineLabel.ElementType.NAUGHT); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_FIRE: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.FIRE, MasterDataDefineLabel.ElementType.FIRE, MasterDataDefineLabel.ElementType.FIRE, MasterDataDefineLabel.ElementType.FIRE, MasterDataDefineLabel.ElementType.FIRE); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_WATER: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.WATER, MasterDataDefineLabel.ElementType.WATER, MasterDataDefineLabel.ElementType.WATER, MasterDataDefineLabel.ElementType.WATER, MasterDataDefineLabel.ElementType.WATER); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_LIGHT: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.LIGHT, MasterDataDefineLabel.ElementType.LIGHT, MasterDataDefineLabel.ElementType.LIGHT, MasterDataDefineLabel.ElementType.LIGHT, MasterDataDefineLabel.ElementType.LIGHT); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_DARK: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.DARK, MasterDataDefineLabel.ElementType.DARK, MasterDataDefineLabel.ElementType.DARK, MasterDataDefineLabel.ElementType.DARK, MasterDataDefineLabel.ElementType.DARK); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_WIND: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.WIND, MasterDataDefineLabel.ElementType.WIND, MasterDataDefineLabel.ElementType.WIND, MasterDataDefineLabel.ElementType.WIND, MasterDataDefineLabel.ElementType.WIND); break; case MasterDataDefineLabel.AutoPlaySkillType.TOGETHER_HEAL: cost_info = new CostInfo(MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL, MasterDataDefineLabel.ElementType.HEAL); break; case MasterDataDefineLabel.AutoPlaySkillType.TRY_RESURRECT: work_is_resurrect = true; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_SKILL1_SELF: m_SkipOnSkillFormeds[0, (int)member_index] = true; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_SKILL1_LEADER: m_SkipOnSkillFormeds[0, (int)GlobalDefine.PartyCharaIndex.LEADER] = true; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_SKILL2_SELF: m_SkipOnSkillFormeds[1, (int)member_index] = true; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_SKILL2_LEADER: m_SkipOnSkillFormeds[1, (int)GlobalDefine.PartyCharaIndex.LEADER] = true; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_HANDS_1: skip_on_hands = 1; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_HANDS_2: skip_on_hands = 2; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_HANDS_3: skip_on_hands = 3; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_HANDS_4: skip_on_hands = 4; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_HANDS_5: skip_on_hands = 5; break; case MasterDataDefineLabel.AutoPlaySkillType.SKIP_ON_HANDS_6: skip_on_hands = 6; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_1: work_panel_plus = 1; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_2: work_panel_plus = 2; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_3: work_panel_plus = 3; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_4: work_panel_plus = 4; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_5: work_panel_plus = 5; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_6: work_panel_plus = 6; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_7: work_panel_plus = 7; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_8: work_panel_plus = 8; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_9: work_panel_plus = 9; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_PLUS_10: work_panel_plus = 10; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_1: work_panel_plus = -1; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_2: work_panel_plus = -2; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_3: work_panel_plus = -3; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_4: work_panel_plus = -4; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_5: work_panel_plus = -5; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_6: work_panel_plus = -6; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_7: work_panel_plus = -7; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_8: work_panel_plus = -8; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_9: work_panel_plus = -9; break; case MasterDataDefineLabel.AutoPlaySkillType.PANEL_DOWN_10: work_panel_plus = -10; break; } if (cost_info != null) { int link_idx = (is_link_member ? 1 : 0); for (int skill_idx = 0; skill_idx < m_SkillCosts.GetLength(2); skill_idx++) { if (m_SkillCosts[link_idx, (int)member_index, skill_idx] == null) { SkillCost skill_cost = new SkillCost(); skill_cost.m_CostInfo = cost_info; m_SkillCosts[link_idx, (int)member_index, skill_idx] = skill_cost; break; } } } m_PanelPutCount += work_panel_plus; m_IsTryResurrect |= work_is_resurrect; if (m_SkipOnHands == 0) { m_SkipOnHands = skip_on_hands; } }
public static void StartUp(TestContext context) { DamageTypeTemplate trueDamage = new DamageTypeTemplate(Engine, null, null, null, null); trueDamage.Key = "T"; trueDamage.Name = "true"; Engine.AddDamageType(trueDamage); ResourceTemplate res = new ResourceTemplate() { Key = "MP" }; SkillCost nullCost = new SkillCost(res, TreeConverter.Build("0", Engine)); SkillCost notFree = new SkillCost(res, TreeConverter.Build("50", Engine)); _testSkill = new SkillTemplate(); _testSkill.Type = SkillType.Cast; _testSkill.Key = "TEST_CAST"; SkillLevelTemplate testLevelTemplate = new SkillLevelTemplate(); testLevelTemplate.Cooldown = TreeConverter.Build("3", Engine); testLevelTemplate.Duration = TreeConverter.Build($"{LConstants.SourceKeyword}{LConstants.PROP_OP}INT", Engine); testLevelTemplate.Interruptible = TreeConverter.Build("true", Engine); testLevelTemplate.Formulas.Add(TreeConverter.Build($"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10)", Engine)); testLevelTemplate.PushBack = TreeConverter.Build("true", Engine); testLevelTemplate.Cost = nullCost; _testSkill.ByLevel.Add(testLevelTemplate); _testChannelSkill = new SkillTemplate(); _testChannelSkill.Type = SkillType.Channel; _testChannelSkill.Key = "TEST_CHANNEL"; SkillLevelTemplate testLevelTemplate2 = new SkillLevelTemplate(); testLevelTemplate2.Cooldown = TreeConverter.Build("120", Engine); testLevelTemplate2.Duration = TreeConverter.Build("60", Engine); testLevelTemplate2.Interval = TreeConverter.Build("10", Engine); testLevelTemplate2.PushBack = TreeConverter.Build("true", Engine); testLevelTemplate2.Interruptible = TreeConverter.Build("true", Engine); testLevelTemplate2.Cost = nullCost; MeNode channelFormula = TreeConverter.Build( $"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10)", Engine); Engine.GetSanitizer().SetHarmsToPeriodic(channelFormula); testLevelTemplate2.Formulas.Add(channelFormula); _testChannelSkill.ByLevel.Add(testLevelTemplate2); _instantHarm = new SkillTemplate(); _instantHarm.Type = SkillType.Cast; _instantHarm.Key = "HURT"; SkillLevelTemplate hurtLevelTemplate = new SkillLevelTemplate(); hurtLevelTemplate.Cooldown = TreeConverter.Build("0", Engine); hurtLevelTemplate.Duration = TreeConverter.Build("0", Engine); hurtLevelTemplate.PushBack = TreeConverter.Build("false", Engine); hurtLevelTemplate.Interruptible = TreeConverter.Build("true", Engine); hurtLevelTemplate.Formulas.Add(TreeConverter.Build($"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10)", Engine)); hurtLevelTemplate.Cost = nullCost; _instantHarm.ByLevel.Add(hurtLevelTemplate); _unpushable = new SkillTemplate(); _unpushable.Type = SkillType.Cast; _unpushable.Key = "NOPUSH"; SkillLevelTemplate unpushTemplate = new SkillLevelTemplate(); unpushTemplate.Cooldown = TreeConverter.Build("0", Engine); unpushTemplate.Duration = TreeConverter.Build("5", Engine); unpushTemplate.Interruptible = TreeConverter.Build("false", Engine); unpushTemplate.PushBack = TreeConverter.Build("false", Engine); unpushTemplate.Formulas.Add(TreeConverter.Build($"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10)", Engine)); unpushTemplate.Cost = nullCost; _unpushable.ByLevel.Add(unpushTemplate); _costly = new SkillTemplate(); _costly.Type = SkillType.Cast; _costly.Key = "COSTLY"; SkillLevelTemplate costlyTemplate = new SkillLevelTemplate(); costlyTemplate.Cooldown = TreeConverter.Build("0", Engine); costlyTemplate.Duration = TreeConverter.Build("0", Engine); costlyTemplate.Interruptible = TreeConverter.Build("true", Engine); costlyTemplate.Formulas.Add(TreeConverter.Build($"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10)", Engine)); costlyTemplate.PushBack = TreeConverter.Build("true", Engine); costlyTemplate.Cost = notFree; _costly.ByLevel.Add(costlyTemplate); _skillUsingStat = new SkillTemplate(); _skillUsingStat.Type = SkillType.Cast; _skillUsingStat.Key = "WITH_STAT"; SkillLevelTemplate withStaTemplate = new SkillLevelTemplate(); withStaTemplate.Cooldown = TreeConverter.Build("0", Engine); withStaTemplate.Duration = TreeConverter.Build("0", Engine); withStaTemplate.Interruptible = TreeConverter.Build("true", Engine); withStaTemplate.Formulas.Add(TreeConverter.Build($"{LConstants.HARM_F}({LConstants.TargetKeyword},{LConstants.SourceKeyword},{trueDamage.Key},10*{LConstants.SourceKeyword}{LConstants.PROP_OP}STR+{LConstants.GET_PROP_F}({LConstants.SourceKeyword},{BASE_VALUE}))", Engine)); withStaTemplate.PushBack = TreeConverter.Build("true", Engine); withStaTemplate.Cost = nullCost; _skillUsingStat.ByLevel.Add(withStaTemplate); }
public AddSkillCostBuffEffect(SkillCost costToadd) { this.costToadd = costToadd; }