public override void Exec(IResultControl control) { Actor actor = ActorManager.Singleton.Lookup(TargetID); if (null == actor) { return; } for (int i = 0; i < BuffIDList.Length; ++i) { if (BuffIDIsRun[i]) { continue; } BuffInfo info = GameTable.BuffTableAsset.Lookup((int)BuffIDList[i]); if (null == info) { continue; } if (info.BuffType == (int)BuffInfo.ENBuffType.Harmful) {//有害buff float r = UnityEngine.Random.Range(0.0f, 1.0f); float curPercent = info.BuffPercent - actor.Props.GetProperty_Float(ENProperty.FResist); //Debug.LogWarning("add buff id==" + m_buffID.ToString() + " buff value=" + curPercent.ToString() + "target id = " + actor.ID.ToString()); if (curPercent <= 0.0f) {//被抗性抵消,buff没有添加 continue; } if (r > curPercent) {//buff没有添加 continue; } if (actor.Type == ActorType.enMain) { MainPlayer player = actor as MainPlayer; player.Damgaed(ActorManager.Singleton.Lookup(SourceID)); } } actor.MyBuffControl.RemoveBuff(info.ID, control); actor.MyBuffControl.AddBuff(info.ID, SourceID, BuffModifyTimeList[i], false); } }