private void AddSkillBuffToUnit(Soldier s) { if (s == null || !s.Alive()) { return; } List <AttributeEffect> attributeEffects = new List <AttributeEffect>(); for (int i = 0; i < base.attributeEffects.Count; i++) { int buffId = base.attributeEffects[i]; AttributeEffect ae = GenerateAttributeEffect(buffId); // Notice skill the buff has been detached for some reason, maybe the unit has been dead ae.RegisterNoticeGiverDestroyMethod((b) => { if (attributeEffectOwnerDic.ContainsKey(b.taker.id)) { attributeEffectOwnerDic[b.taker.id].Remove(b); if (attributeEffectOwnerDic[b.taker.id].Count == 0) { attributeEffectOwnerDic.Remove(b.taker.id); } } }); ae.Attach(owner, s); attributeEffects.Add(ae); } attributeEffectOwnerDic.Add(s.id, attributeEffects); }
//When town create new solider use this. public void AddSoliderInEffectedSoldier(Soldier solider) { for (int i = 0; i < usedInstituteSkills.Count; i++) { List <int> buffsID; buffsID = GetBuffsID(usedInstituteSkills[i].BuffsID.Split('|')); AttributeEffect buff = GenerateAttributeEffect(buffsID[0]); buff.Attach(this, solider); buff.RegisterNoticeGiverDestroyMethod(SoldierDieRemoveBuff); playerSkillBuffs.Add(buff); AttributeEffect debuff = GenerateAttributeEffect(buffsID[1]); debuff.Attach(this, solider); debuff.RegisterNoticeGiverDestroyMethod(SoldierDieRemoveDebuff); playerSkillDeBuffs.Add(debuff); } effectedSoldier.Add(solider); }