public void AppAddBuff(int buffID, EntityParent caster, long targetID, int fromSkillID, int elementType = 0, bool isCommunicateMix = false) { Buff buffDataByID = LocalAgent.GetBuffDataByID(buffID); EntityParent entityByID = LocalAgent.GetEntityByID(targetID); if (this.CheckBuff(buffDataByID, caster, entityByID, fromSkillID, elementType, isCommunicateMix)) { this.InitBuff(buffDataByID, caster, entityByID, fromSkillID, elementType, isCommunicateMix); } }
public void AddGlobalBuff(EntityParent target) { EntityParent entSelf = EntityWorld.Instance.EntSelf; for (int i = 0; i < this.globalBuff.get_Count(); i++) { Buff buffDataByID = LocalAgent.GetBuffDataByID(this.globalBuff.get_Item(i)); if (this.CheckAddGlobalBuff(buffDataByID, entSelf, target)) { this.InitGlobalBuff(buffDataByID, entSelf, target); } } }
public bool CheckBuffTypeContainOther(Buff buffData, long targetID) { if (!this.buffStateTable.ContainsKey(targetID)) { return(false); } for (int i = 0; i < this.buffStateTable[targetID].Count; i++) { if (this.buffStateTable[targetID].ElementKeyAt(i) != buffData.id) { Buff buffDataByID = LocalAgent.GetBuffDataByID(this.buffStateTable[targetID].ElementKeyAt(i)); if (buffDataByID.type == buffData.type) { return(true); } } } return(false); }
protected bool CheckAddGlobalBuff(Buff buffData, EntityParent caster, EntityParent target) { if (buffData == null) { return(false); } if (caster == null) { return(false); } if (target == null) { return(false); } if (!EntityWorld.Instance.TargetTypeFilter <EntityParent>(target, caster, buffData.globalTarget)) { return(false); } if (!BattleCalculator.CalculateAddBuff(caster.BattleBaseAttrs, target.BattleBaseAttrs, (double)buffData.buffProp, 0)) { return(false); } XDict <int, BuffState> buffListByEntityID = this.GetBuffListByEntityID(target.ID); if (buffListByEntityID == null) { return(false); } for (int i = 0; i < buffListByEntityID.Count; i++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(i)).resist.Contains(buffData.type)) { return(false); } } for (int j = 0; j < buffListByEntityID.Count; j++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(j)).resistId.Contains(buffData.id)) { return(false); } } List <int> list = new List <int>(); for (int k = 0; k < buffListByEntityID.Count; k++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(k)).cover.Contains(buffData.type)) { list.Add(buffListByEntityID.ElementKeyAt(k)); } } for (int l = 0; l < list.get_Count(); l++) { this.AppRemoveBuff(list.get_Item(l), target.ID); } list.Clear(); for (int m = 0; m < buffListByEntityID.Count; m++) { if (buffData.delete.Contains(LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(m)).type)) { list.Add(buffListByEntityID.ElementKeyAt(m)); } } for (int n = 0; n < list.get_Count(); n++) { this.AppRemoveBuff(list.get_Item(n), target.ID); } if (LocalAgent.CheckBuffByTargetIDAndBuffID(target.ID, buffData.id)) { int overlayModeId = buffData.overlayModeId; if (overlayModeId != 1 && overlayModeId != 2) { this.AppRemoveBuff(buffData.id, target.ID); } } return(true); }
protected void KillBuff(int buffID, long casterID, long targetID, int fromSkillLevel, bool isCommunicateMix) { Buff buffDataByID = LocalAgent.GetBuffDataByID(buffID); EntityParent entityByID = LocalAgent.GetEntityByID(casterID); EntityParent entityByID2 = LocalAgent.GetEntityByID(targetID); switch (buffDataByID.type) { case 1: LocalBattleBuffCalculatorDamageHandler.KillBuff(buffID, casterID, targetID, fromSkillLevel, isCommunicateMix); break; case 2: LocalBattleBuffCalculatorTreatHandler.KillBuff(buffID, casterID, targetID, fromSkillLevel, isCommunicateMix); break; case 3: LocalBattleBuffTauntHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 4: LocalBattleBuffFixHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 5: LocalBattleBuffStaticHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 6: LocalBattleBuffShiftHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 7: LocalBattleBuffChangeAttrsHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 8: LocalBattleBuffSuperArmorHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 9: LocalBattleBuffDrainHandler.KillBuff(buffID, casterID, targetID, fromSkillLevel, isCommunicateMix); break; case 10: LocalBattleBuffIgnoreFormulaHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 11: LocalBattleBuffCloseRendererHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 12: LocalBattleBuffMoveCastHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 13: LocalBattleBuffFilterHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 14: LocalBattleBuffDizzyHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 15: LocalBattleBuffUnconspicuousHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 16: LocalBattleBuffAuraHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 17: LocalBattleBuffWeakHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 18: LocalBattleBuffIncurableHandler.KillBuff(buffDataByID, entityByID, entityByID2, fromSkillLevel, isCommunicateMix); break; case 19: LocalBattleBuffCalculatorTreat2Handler.KillBuff(buffID, casterID, targetID, fromSkillLevel, isCommunicateMix); break; } if (buffDataByID.tempSkill > 0) { LocalBattleProtocolSimulator.SendRemoveSkill(targetID, buffDataByID.tempSkill); } }
protected void IntervalHandleBuff(int buffID, long targetID) { EntityParent entityByID = LocalAgent.GetEntityByID(targetID); if (entityByID == null) { return; } XDict <int, BuffState> buffListByEntityID = this.GetBuffListByEntityID(targetID); if (buffListByEntityID == null) { return; } if (buffListByEntityID.Count == 0) { return; } if (!buffListByEntityID.ContainsKey(buffID)) { return; } EntityParent entityByID2 = LocalAgent.GetEntityByID(this.buffStateTable[targetID][buffID].casterID); if (entityByID2 == null) { return; } Buff buffDataByID = LocalAgent.GetBuffDataByID(buffID); BuffType type = (BuffType)buffDataByID.type; switch (type) { case BuffType.Aura: entityByID.GetSkillManager().ClientCastSkillByID(buffDataByID.tempSkill); return; case BuffType.Weak: case BuffType.Incurable: IL_83: if (type == BuffType.Damage) { LocalBattleBuffCalculatorDamageHandler.IntervalBuff(buffDataByID, entityByID2, entityByID, this.buffStateTable[targetID][buffID].fromSkillID, this.buffStateTable[targetID][buffID].fromSkillLevel, this.buffStateTable[targetID][buffID].fromSkillAttrChange, this.buffStateTable[targetID][buffID].isCommunicateMix); return; } if (type == BuffType.Theat) { LocalBattleBuffCalculatorTreatHandler.IntervalBuff(buffDataByID, entityByID2, entityByID, this.buffStateTable[targetID][buffID].fromSkillID, this.buffStateTable[targetID][buffID].fromSkillLevel, this.buffStateTable[targetID][buffID].fromSkillAttrChange, this.buffStateTable[targetID][buffID].isCommunicateMix); return; } if (type != BuffType.Drain) { return; } LocalBattleBuffDrainHandler.IntervalBuff(buffDataByID, entityByID2, entityByID, this.buffStateTable[targetID][buffID].fromSkillID, this.buffStateTable[targetID][buffID].fromSkillLevel, this.buffStateTable[targetID][buffID].fromSkillAttrChange, this.buffStateTable[targetID][buffID].isCommunicateMix); return; case BuffType.Theat2: LocalBattleBuffCalculatorTreat2Handler.IntervalBuff(buffDataByID, entityByID2, entityByID, this.buffStateTable[targetID][buffID].fromSkillID, this.buffStateTable[targetID][buffID].fromSkillLevel, this.buffStateTable[targetID][buffID].fromSkillAttrChange, this.buffStateTable[targetID][buffID].isCommunicateMix); return; } goto IL_83; }
protected bool CheckBuff(Buff buffData, EntityParent caster, EntityParent target, int fromSkillID, int elementType, bool isCommunicateMix = false) { if (buffData == null) { return(false); } if (caster == null) { return(false); } if (target == null) { return(false); } if (LocalAgent.GetSpiritIsDead(target, isCommunicateMix)) { return(false); } if (!target.IsFighting) { return(false); } if (!BattleCalculator.CalculateAddBuff(caster.BattleBaseAttrs, target.BattleBaseAttrs, (double)buffData.buffProp, elementType)) { return(false); } XDict <int, BuffState> buffListByEntityID = this.GetBuffListByEntityID(target.ID); if (buffListByEntityID == null) { return(false); } for (int i = 0; i < buffListByEntityID.Count; i++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(i)).resist.Contains(buffData.type)) { return(false); } } for (int j = 0; j < buffListByEntityID.Count; j++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(j)).resistId.Contains(buffData.id)) { return(false); } } List <int> list = new List <int>(); for (int k = 0; k < buffListByEntityID.Count; k++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(k)).cover.Contains(buffData.type)) { list.Add(buffListByEntityID.ElementKeyAt(k)); } } for (int l = 0; l < buffListByEntityID.Count; l++) { if (LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(l)).coverId.Contains(buffData.id)) { list.Add(buffListByEntityID.ElementKeyAt(l)); } } for (int m = 0; m < list.get_Count(); m++) { this.AppRemoveBuff(list.get_Item(m), target.ID); } list.Clear(); for (int n = 0; n < buffListByEntityID.Count; n++) { if (buffData.delete.Contains(LocalAgent.GetBuffDataByID(buffListByEntityID.ElementKeyAt(n)).type)) { list.Add(buffListByEntityID.ElementKeyAt(n)); } } for (int num = 0; num < list.get_Count(); num++) { this.AppRemoveBuff(list.get_Item(num), target.ID); } if (LocalAgent.CheckBuffByTargetIDAndBuffID(target.ID, buffData.id)) { int overlayModeId = buffData.overlayModeId; if (overlayModeId != 1 && overlayModeId != 2) { this.AppRemoveBuff(buffData.id, target.ID); } } return(true); }