protected override void ExcuteConsumablesSkillLogic(BattleAgentController self) { if (selfEffectAnimName != string.Empty) { self.SetEffectAnim(selfEffectAnimName, null); } // 如果没有状态名称,则默认不是触发状态,直接执行技能 if (statusName == "") { Excute(self); return; } List <TriggeredSkill> sameStatusSkills = self.propertyCalculator.GetTriggeredSkillsWithSameStatus(statusName); // 如果技能效果不可叠加,则被影响人身上原有的同种状态技能效果全部取消,并从战斗结算器中移除这些技能 if (!canOverlay) { for (int i = 0; i < sameStatusSkills.Count; i++) { TriggeredSkill ts = sameStatusSkills [i]; ts.CancelSkillEffect(ts != this); } } // 执行技能 Excute(self); }
protected override void ExcuteTriggeredSkillLogic(TriggerInfo triggerInfo, BattleAgentController self, BattleAgentController enemy) { // 判断被动是否生效 if (!isEffective(triggeredProbability)) { return; } SetEffectAnims(triggerInfo, self, enemy); // 如果没有状态名称,则默认不是触发状态,直接执行技能 if (statusName == "") { Excute(); return; } List <TriggeredSkill> sameStatusSkills = affectedAgent.propertyCalculator.GetTriggeredSkillsWithSameStatus(statusName); // 如果技能效果不可叠加,则被影响人身上原有的同种状态技能效果全部取消,并从战斗结算器中移除这些技能 if (!canOverlay) { for (int i = 0; i < sameStatusSkills.Count; i++) { TriggeredSkill ts = sameStatusSkills [i]; ts.CancelSkillEffect(ts == this); } } Excute(); }
protected override void ExcuteTriggeredSkillLogic(TriggerInfo triggerInfo, BattleAgentController self, BattleAgentController enemy) { if (isEffective(triggeredProbability)) { List <TriggeredSkill> fizzySkills = enemy.propertyCalculator.GetTriggeredSkillsWithSameStatus(statusName); affectedAgent = GetAffectedBattleAgent(triggerInfo, self, enemy); if (fizzySkills.Count > 0) { for (int i = 0; i < fizzySkills.Count; i++) { TriggeredSkill ts = fizzySkills [i]; ts.CancelSkillEffect(ts != this); } } else { affectedAgent.propertyCalculator.SkillTriggered <TriggeredSkill> (this); } affectedAgent.PlayRoleAnim("stun", 0, null); affectedAgent.isAttackActionFinish = false; fizzyCoroutine = StartCoroutine("FizzyForDuration", affectedAgent); SetEffectAnims(triggerInfo, self, enemy); } }
/// <summary> /// 角色卸下装备 /// </summary> /// <param name="equipment">Equipment.</param> /// <param name="equipmentIndexInPanel">Equipment index in panel.</param> public PropertyChange UnloadEquipment(Equipment equipment, int equipmentIndexInPanel, int indexInBag = -1) { SoundManager.Instance.PlayAudioClip("UI/sfx_UI_Equipment"); equipment.equiped = false; Debug.LogFormat("卸下装备{0}/{1}", equipmentIndexInPanel, allEquipedEquipments.Length); if (equipment.itemId < 0) { return(new PropertyChange()); } if (indexInBag == -1) { allItemsInBag.Add(equipment); } else { allItemsInBag.Insert(indexInBag, equipment); } for (int i = 0; i < equipment.attachedSkills.Count; i++) { TriggeredSkill attachedSkill = equipment.attachedSkills [i]; attachedTriggeredSkills.Remove(attachedSkill); if (!(battleAgentCtr as BattlePlayerController).isInFight) { equipment.attachedSkills.Remove(attachedSkill); Destroy(attachedSkill.gameObject); i--; } } Equipment emptyEquipment = new Equipment(); allEquipedEquipments [equipmentIndexInPanel] = emptyEquipment; PropertyChange pc = ResetBattleAgentProperties(false); Transform exploreManager = TransformManager.FindTransform("ExploreManager"); if (exploreManager != null) { ExploreManager manager = exploreManager.GetComponent <ExploreManager> (); manager.UpdatePlayerPropertyCalculator(); manager.UpdateTriggeredCallBacks(); manager.UpdatePlayerStatusPlane(); } return(pc); }
/// <summary> /// 角色穿上装备 /// </summary> /// <param name="equipment">Equipment.</param> /// <param name="equipmentIndexInPanel">Equipment index in panel.</param> public PropertyChange EquipEquipment(Equipment equipment, int equipmentIndexInPanel) { SoundManager.Instance.PlayAudioClip("UI/sfx_UI_Equipment"); equipment.equiped = true; Debug.LogFormat("穿上装备{0}", equipmentIndexInPanel); allEquipedEquipments [equipmentIndexInPanel] = equipment; // equipmentDragControl.item = equipment; if (equipment.attachedSkills.Count == 0) { for (int i = 0; i < equipment.attachedSkillInfos.Length; i++) { TriggeredSkill attachedSkill = SkillGenerator.Instance.GenerateTriggeredSkill(equipment, equipment.attachedSkillInfos [i], triggeredSkillsContainer); equipment.attachedSkills.Add(attachedSkill); attachedTriggeredSkills.Add(attachedSkill); attachedSkill.transform.SetParent(triggeredSkillsContainer); } } else { for (int i = 0; i < equipment.attachedSkills.Count; i++) { TriggeredSkill attachedSkill = equipment.attachedSkills [i]; attachedTriggeredSkills.Add(attachedSkill); } } allItemsInBag.Remove(equipment); PropertyChange pc = ResetBattleAgentProperties(false); Transform exploreManager = TransformManager.FindTransform("ExploreManager"); if (exploreManager != null) { ExploreManager manager = exploreManager.GetComponent <ExploreManager> (); manager.UpdatePlayerPropertyCalculator(); manager.UpdateTriggeredCallBacks(); manager.UpdatePlayerStatusPlane(); } return(pc); }
public void DestroyEquipmentInBagAttachedSkills() { for (int j = 0; j < allEquipmentsInBag.Count; j++) { Equipment equipment = allEquipmentsInBag [j]; if (!equipment.equiped && equipment.attachedSkills.Count > 0) { for (int i = 0; i < equipment.attachedSkills.Count; i++) { TriggeredSkill attachedSkill = equipment.attachedSkills [i]; equipment.attachedSkills.RemoveAt(i); Destroy(attachedSkill.gameObject); i--; } } } }
public void SkillTriggered<T>(T skill){ if (typeof(T) == typeof(TriggeredSkill)) { TriggeredSkill trigSkill = skill as TriggeredSkill; if (trigSkill.statusName == "") { return; } if(!triggeredSkills.Contains(trigSkill)){ triggeredSkills.Add (trigSkill); } if (!self.agent.allStatus.Contains (trigSkill.statusName)) { self.agent.allStatus.Add (trigSkill.statusName); } string statusTint = ""; if (MyTool.propertyChangeStrings.TryGetValue (trigSkill.statusName,out statusTint)) { self.AddFightTextToQueue (statusTint,SpecialAttackResult.Status); } self.UpdateStatusPlane (); } else if (typeof(T) == typeof(ConsumablesSkill)) { ConsumablesSkill consSkill = skill as ConsumablesSkill; if (consSkill.statusName == "") { return; } if (!consumablesSkills.Contains (consSkill)) { consumablesSkills.Add (consSkill); } if (!self.agent.allStatus.Contains (consSkill.statusName)) { self.agent.allStatus.Add (consSkill.statusName); } self.UpdateStatusPlane (); } }
public void RemoveAttachedSkill<T>(T skill){ if (typeof(T) == typeof(TriggeredSkill) && triggeredSkills.Contains(skill as TriggeredSkill)) { TriggeredSkill trigSkill = skill as TriggeredSkill; if (trigSkill.statusName == "") { return; } if (triggeredSkills.Contains (trigSkill)) { triggeredSkills.Remove (trigSkill); } if (self.agent.allStatus.Contains (trigSkill.statusName)) { self.agent.allStatus.Remove (trigSkill.statusName); } self.UpdateStatusPlane (); } else if (typeof(T) == typeof(ConsumablesSkill) && consumablesSkills.Contains(skill as ConsumablesSkill)) { ConsumablesSkill consSkill = skill as ConsumablesSkill; if (consSkill.statusName == "") { return; } if (consumablesSkills.Contains (consSkill)) { consumablesSkills.Remove (consSkill); } if (self.agent.allStatus.Contains (consSkill.statusName)) { self.agent.allStatus.Remove (consSkill.statusName); } self.UpdateStatusPlane (); } }
public void SetUpPlayerWithPlayerData(PlayerData playerData) { if (playerData == null) { return; } this.agentName = playerData.agentName; // this.agentIconName = playerData.agentIconName; this.agentLevel = playerData.agentLevel; // this.isActive = false; this.originalMaxHealth = playerData.originalMaxHealth; this.originalMana = playerData.originalMana; this.originalAttack = playerData.originalAttack; this.originalAttackSpeed = playerData.originalAttackSpeed; this.originalArmor = playerData.originalArmor; this.originalMagicResist = playerData.originalManaResist; this.originalCrit = playerData.originalCrit; this.originalDodge = playerData.originalDodge; this.originalHealth = playerData.originalHealth; this.originalMana = playerData.originalMana; this.originalPhysicalHurtScaler = 1.0f; this.originalMagicalHurtScaler = 1.0f; this.originalCritHurtScaler = 1.5f; this.charactersCount = playerData.charactersCount; this.allEquipmentsInBag = playerData.allEquipmentsInBag; this.allEquipedEquipments = playerData.allEquipedEquipments; this.allConsumablesInBag = playerData.allConsumablesInBag; this.allItemsInBag = playerData.allItemsInBag; this.allUnlockScrollsInBag = playerData.allUnlockScrollsInBag; this.allCraftingRecipesInBag = playerData.allCraftRecipesInBag; this.maxUnlockLevelIndex = playerData.maxUnlockLevelIndex; // this.currentLevelIndex = playerData.currentLevelIndex; this.totalCoins = playerData.totalCoins; this.experience = playerData.experience; this.attachedTriggeredSkills.Clear(); this.attachedConsumablesSkills.Clear(); this.allStatus.Clear(); ResetBattleAgentProperties(true); allItemsInBag = new List <Item> (); for (int i = 0; i < allEquipmentsInBag.Count; i++) { if (!allEquipmentsInBag [i].equiped) { allItemsInBag.Add(allEquipmentsInBag [i]); } } for (int i = 0; i < allConsumablesInBag.Count; i++) { allItemsInBag.Add(allConsumablesInBag[i]); } for (int i = 0; i < allUnlockScrollsInBag.Count; i++) { if (!allUnlockScrollsInBag [i].unlocked) { allItemsInBag.Add(allUnlockScrollsInBag [i]); } } for (int i = 0; i < allCraftingRecipesInBag.Count; i++) { allItemsInBag.Add(allCraftingRecipesInBag[i]); } for (int i = 0; i < triggeredSkillsContainer.childCount; i++) { Destroy(triggeredSkillsContainer.GetChild(i).gameObject); } for (int i = 0; i < allEquipedEquipments.Length; i++) { Equipment equipment = allEquipedEquipments [i]; if (equipment.itemId > 0) { for (int j = 0; j < equipment.attachedSkillInfos.Length; j++) { TriggeredSkill attachedSkill = SkillGenerator.Instance.GenerateTriggeredSkill(equipment, equipment.attachedSkillInfos [j], triggeredSkillsContainer); equipment.attachedSkills.Add(attachedSkill); Debug.LogFormat("{0}-{1}", equipment.itemName, attachedSkill.name); attachedTriggeredSkills.Add(attachedSkill); } } } }
public TriggeredSkillExcutor(TriggeredSkill ts, SkillEffectTarget source, SkillCallBack callBack) { this.triggeredSkill = ts; this.triggerSource = source; this.triggeredCallback = callBack; }
private TriggeredSkill GetPropertyOnceOrDurativeChangeSkill(Item item, SkillInfo skillInfo, Transform skillContainer) { TriggeredSkill skill = null; if (skillInfo.excuteOnce) { PropertyChangeOnce propertyChangeOnce = GameManager.Instance.gameDataCenter.allSkills.Find(delegate(Skill obj) { return(obj.skillName == "PropertyChangeOnce"); }) as PropertyChangeOnce; string propertyName = ""; switch (skillInfo.skillType) { case MySkillType.MaxHealth: propertyChangeOnce.propertyType = PropertyType.MaxHealth; propertyName = "MaxHealth"; break; case MySkillType.Health: propertyChangeOnce.propertyType = PropertyType.Health; propertyName = "Health"; break; case MySkillType.Mana: propertyChangeOnce.propertyType = PropertyType.Mana; propertyName = "Mana"; break; case MySkillType.Attack: propertyChangeOnce.propertyType = PropertyType.Attack; propertyName = "Attack"; break; case MySkillType.AttackSpeed: propertyChangeOnce.propertyType = PropertyType.AttackSpeed; propertyName = "AttackSpeed"; break; case MySkillType.Armor: propertyChangeOnce.propertyType = PropertyType.Armor; propertyName = "Armor"; break; case MySkillType.MagicResist: propertyChangeOnce.propertyType = PropertyType.MagicResist; propertyName = "MagicResist"; break; case MySkillType.Dodge: propertyChangeOnce.propertyType = PropertyType.Dodge; propertyName = "Dodge"; break; case MySkillType.Crit: propertyChangeOnce.propertyType = PropertyType.Crit; propertyName = "Crit"; break; case MySkillType.Hit: propertyChangeOnce.propertyType = PropertyType.Hit; propertyName = "Hit"; break; case MySkillType.WholeProperty: propertyChangeOnce.propertyType = PropertyType.WholeProperty; propertyName = "WholeProperty"; break; } skill = GameObject.Instantiate(propertyChangeOnce.gameObject, skillContainer).GetComponent <TriggeredSkill> (); skill.gameObject.name = string.Format("{0}-{1}-{2}", item.itemName, "PropertyChangeOnce", propertyName); } else { PropertyChangeDurative durativeChange = GameManager.Instance.gameDataCenter.allSkills.Find(delegate(Skill obj) { return(obj.skillName == "PropertyChangeDurative"); }) as PropertyChangeDurative; string propertyName = ""; switch (skillInfo.skillType) { case MySkillType.MaxHealth: durativeChange.propertyType = PropertyType.MaxHealth; propertyName = "MaxHealth"; break; case MySkillType.Health: durativeChange.propertyType = PropertyType.Health; propertyName = "Health"; break; case MySkillType.Mana: durativeChange.propertyType = PropertyType.Mana; propertyName = "Mana"; break; case MySkillType.Attack: durativeChange.propertyType = PropertyType.Attack; propertyName = "Attack"; break; case MySkillType.AttackSpeed: durativeChange.propertyType = PropertyType.AttackSpeed; propertyName = "AttackSpeed"; break; case MySkillType.Armor: durativeChange.propertyType = PropertyType.Armor; propertyName = "Armor"; break; case MySkillType.MagicResist: durativeChange.propertyType = PropertyType.MagicResist; propertyName = "MagicResist"; break; case MySkillType.Dodge: durativeChange.propertyType = PropertyType.Dodge; propertyName = "Dodge"; break; case MySkillType.Crit: durativeChange.propertyType = PropertyType.Crit; propertyName = "Crit"; break; case MySkillType.Hit: durativeChange.propertyType = PropertyType.Hit; propertyName = "Hit"; break; case MySkillType.WholeProperty: durativeChange.propertyType = PropertyType.WholeProperty; propertyName = "WholeProperty"; break; } skill = GameObject.Instantiate(durativeChange.gameObject, skillContainer).GetComponent <TriggeredSkill> (); skill.gameObject.name = string.Format("{0}-{1}-{2}", item.itemName, "PropertyChangeDurative", propertyName); } return(skill); }
public TriggeredSkill GenerateTriggeredSkill(Item item, SkillInfo skillInfo, Transform skillContainer) { TriggeredSkill newSkill = null; // public float skillSourceValue;//技能数据输入源 // public float duration;//状态持续事件 switch (skillInfo.skillType) { case MySkillType.AttachMagicalHurt: TriggeredSkill attachMagicalHurt = GameManager.Instance.gameDataCenter.allSkills.Find(delegate(Skill obj) { return(obj.skillName == "AttachMagicalHurt"); }) as TriggeredSkill; newSkill = GameObject.Instantiate(attachMagicalHurt.gameObject, skillContainer).GetComponent <TriggeredSkill> (); newSkill.gameObject.name = string.Format("{0}-{1}", item.itemName, "AttachMagicalHurt"); break; case MySkillType.HealthAbsorb: TriggeredSkill healthAbsorb = GameManager.Instance.gameDataCenter.allSkills.Find(delegate(Skill obj) { return(obj.skillName == "HealthAbsorb"); }) as TriggeredSkill; newSkill = GameObject.Instantiate(healthAbsorb.gameObject, skillContainer).GetComponent <TriggeredSkill> (); newSkill.gameObject.name = string.Format("{0}-{1}", item.itemName, "HealthAbsorb"); break; case MySkillType.Fizzy: TriggeredSkill fizzy = GameManager.Instance.gameDataCenter.allSkills.Find(delegate(Skill obj) { return(obj.skillName == "Fizzy"); }) as TriggeredSkill; newSkill = GameObject.Instantiate(fizzy.gameObject, skillContainer).GetComponent <TriggeredSkill> (); newSkill.gameObject.name = string.Format("{0}-{1}", item.itemName, "Fizzy"); break; case MySkillType.ReflectHurt: TriggeredSkill reflectHurt = GameManager.Instance.gameDataCenter.allSkills.Find(delegate(Skill obj) { return(obj.skillName == "ReflectHurt"); }) as TriggeredSkill; newSkill = GameObject.Instantiate(reflectHurt.gameObject, skillContainer).GetComponent <TriggeredSkill> (); newSkill.gameObject.name = string.Format("{0}-{1}", item.itemName, "ReflectHurt"); break; case MySkillType.Health: case MySkillType.Mana: case MySkillType.Attack: case MySkillType.AttackSpeed: case MySkillType.Armor: case MySkillType.MagicResist: case MySkillType.Dodge: case MySkillType.Crit: case MySkillType.Hit: case MySkillType.WholeProperty: newSkill = GetPropertyOnceOrDurativeChangeSkill(item, skillInfo, skillContainer); break; case MySkillType.None: Debug.LogError(string.Format("物品{0}缺少技能类型信息,无法生成技能", item.itemName)); break; } switch (skillInfo.triggeredCondition) { case TriggeredCondition.BeforeFight: newSkill.beforeFightTriggerInfo.triggerSource = skillInfo.triggerSource; newSkill.beforeFightTriggerInfo.triggerTarget = skillInfo.triggerTarget; newSkill.beforeFightTriggerInfo.triggered = true; break; case TriggeredCondition.Attack: newSkill.attackTriggerInfo.triggerSource = skillInfo.triggerSource; newSkill.attackTriggerInfo.triggerTarget = skillInfo.triggerTarget; newSkill.attackTriggerInfo.triggered = true; break; case TriggeredCondition.Hit: newSkill.hitTriggerInfo.triggerSource = skillInfo.triggerSource; newSkill.hitTriggerInfo.triggerTarget = skillInfo.triggerTarget; newSkill.hitTriggerInfo.triggered = true; break; case TriggeredCondition.BeAttacked: newSkill.beAttackedTriggerInfo.triggerSource = skillInfo.triggerSource; newSkill.beAttackedTriggerInfo.triggerTarget = skillInfo.triggerTarget; newSkill.beAttackedTriggerInfo.triggered = true; break; case TriggeredCondition.BeHit: newSkill.beHitTriggerInfo.triggerSource = skillInfo.triggerSource; newSkill.beHitTriggerInfo.triggerTarget = skillInfo.triggerTarget; newSkill.beHitTriggerInfo.triggered = true; break; case TriggeredCondition.None: break; } newSkill.hurtType = skillInfo.hurtType; newSkill.selfEffectAnimName = skillInfo.selfEffectAnimName; newSkill.enemyEffectAnimName = skillInfo.enemyEffectAnimName; newSkill.statusName = skillInfo.statusName; newSkill.triggeredProbability = skillInfo.triggeredProbability; newSkill.skillSourceValue = skillInfo.skillSourceValue; newSkill.duration = skillInfo.duration; newSkill.canOverlay = skillInfo.canOverlay; return(newSkill); }