You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
| using System.Collections.Generic;
 | |
| using Articy.Touhou;
 | |
| using Articy.Unity;
 | |
| 
 | |
| namespace Game
 | |
| {
 | |
|     public enum EBuffEffectTimingType
 | |
|     {
 | |
|         During,
 | |
|         Enter,
 | |
|         Leave,
 | |
|         LevelUp,
 | |
|         LevelDown,
 | |
|         LevelFull,
 | |
|         Attack,
 | |
|         BeAttack,
 | |
|         BeAttackHeavy,
 | |
|     }
 | |
| 
 | |
|     public struct BuffEffectData
 | |
|     {
 | |
|         public GameEntity Entity;
 | |
|         public GameEntity Target;
 | |
|         public ArticyObject BuffObj;
 | |
|     }
 | |
| 
 | |
|     public static partial class UtilBuff
 | |
|     {
 | |
|         public static void BuffEffectAll(int t, EBuffEffectTimingType timing)
 | |
|         {
 | |
|             var target = Util.GetEntity(t);
 | |
|             var buff = target.buff;
 | |
|             var temp = new List<BuffData>(buff.BuffMap.Value.Values);
 | |
|             foreach (var buffItem in temp)
 | |
|             {
 | |
|                 BuffEffect(buffItem, timing);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void SendHitBuff(int target, string buffId)
 | |
|         {
 | |
|             var buffCfg = Util.GetBuffConfig(buffId);
 | |
|             var hitMsg = new PEntityHitText()
 | |
|             {
 | |
|                 Target = target,
 | |
|                 Text = buffCfg.Buff.Name,
 | |
|             };
 | |
|             EventManager.Instance.SendEvent(EEvent.EntityHitText, hitMsg);
 | |
|         }
 | |
| 
 | |
|         public static void BuffEffect(BuffData data, EBuffEffectTimingType timing)
 | |
|         {
 | |
|             var entity = Util.GetEntity(data.Owner);
 | |
|             var target = Util.GetEntity(data.Target);
 | |
|             // Util.Print(data.buffCfg.Buff.Name, data.owner, data.target, timing);
 | |
|             foreach (var item in data.BuffCfg.Buff.BuffEffect)
 | |
|             {
 | |
|                 var basicInfo = ((IObjectWithFeatureBuffEffect)item).GetFeatureBuffEffect();
 | |
|                 //检查owner的前置祝福
 | |
|                 if (basicInfo.Bless != null)
 | |
|                 {
 | |
|                     var preBless = (Bless)basicInfo.Bless;
 | |
|                     if (!Util.HasBless(entity, preBless.TechnicalName))
 | |
|                     {
 | |
|                         continue;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 //检查timing
 | |
|                 if ((EBuffEffectTimingType)basicInfo.BuffEffectTimingType != timing)
 | |
|                 {
 | |
|                     continue;
 | |
|                 }
 | |
| 
 | |
|                 var buffData = new BuffEffectData
 | |
|                 {
 | |
|                     Entity = entity,
 | |
|                     Target = target,
 | |
|                     BuffObj = item,
 | |
|                 };
 | |
|                 BuffEffect(data, buffData);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |