<NME> a_ward_trap.cs
<BEF> ﻿using UnityEngine;
using System.Collections;

public class a_ward_trap : trap_base
{
    //?
    /*
	 * Magic ward traps.
	 * NPC collides with one it will set off a spell property object.
	 */

    public SpellProp spellprop;//The spell properties of the ward.
    public bool CanHitPlayer = true;
    protected override void Start()
    {
        base.Start();
        this.gameObject.layer = LayerMask.NameToLayer("Ward");
        BoxCollider bx = this.gameObject.GetComponent<BoxCollider>();
        if (bx == null)
        {
            bx = this.gameObject.AddComponent<BoxCollider>();
        }
        bx.size = new Vector3(0.35f, 0.35f, 0.35f);
        bx.center = new Vector3(0.0f, 0.1f, 0.0f);
        bx.isTrigger = true;
        switch (_RES)
        {
            case GAME_UW2:
                {
                    switch (item_id)
                    {
					spellprop.onHit(npc.gameObject.GetComponent<ObjectInteraction>());
					Destroy (this.gameObject);
			}
		}
}
                                break;
                            }
                        default:
                            Debug.Log("unimplemented ward trap type " + item_id);
                            break;
                    }
                    break;
                }
            default://UW1 rune of warding
                {
                    SpellProp_RuneOfWarding spIJ = new SpellProp_RuneOfWarding();//myObj.AddComponent<SpellProp_RuneOfWarding>();
                    spIJ.init(SpellEffect.UW1_Spell_Effect_RuneofWarding, UWCharacter.Instance.gameObject);
                    spellprop = spIJ;
                    CanHitPlayer = false;
                    break;
                }
        }

    }

    void OnTriggerEnter(Collider other)
    {
        //Get the NPC that hit the ward
        NPC npc = other.gameObject.GetComponent<NPC>();

        if (npc != null)//Has the collision hit an npc
        {
            if (spellprop.BaseDamage != 0)
            {
                npc.ApplyAttack(spellprop.BaseDamage);
            }
            spellprop.onImpact(npc.transform);
            spellprop.onHit(npc.gameObject.GetComponent<ObjectInteraction>());
            objInt().consumeObject();
        }
        else
        {
            if (other.gameObject.GetComponent<UWCharacter>() )
            {
                if (CanHitPlayer)
                {
                    if (spellprop.BaseDamage != 0)
                    {
                        UWCharacter.Instance.ApplyDamage(spellprop.BaseDamage);
                    }
                    spellprop.onHitPlayer();
                    objInt().consumeObject();
                }
            }
            else
            {
                if (_RES == GAME_UW2)
                {//An object has been thrown at the trap to consume it.
                    objInt().consumeObject();
                }
            }
        }

    }
}

<MSG> Spell casting code for rune of warding.
Rune of Warding can now indicated relative direction when detonating.
Code to support player tripped wards.
<DFF> @@ -32,5 +32,12 @@ public class a_ward_trap : trap_base {
 					spellprop.onHit(npc.gameObject.GetComponent<ObjectInteraction>());
 					Destroy (this.gameObject);
 			}
+			else
+			{
+			if (other.gameObject.GetComponent<UWCharacter>())
+				{
+					spellprop.onImpactPlayer();
+				}					
+			}
 		}
 }

Spell casting code for rune of warding. Rune of Warding can now indicated relative direction when detonating. Code to support player tripped wards.