I'll asume you are using a 'recent' build:
Code:
ON=@EQUIP
IF (<SRC.ISMAGE>)
SRC.events +e_paralizzly_shield
ELSE
SRC.events -e_paralizzly_shield
unequip
src.sysmessage @07a1,3 You cant equip mage items.
return 1
endif
 
Code:
ON=@EQUIPTEST //this trigger is called before @Equip, return 1 here
IF !(<SRC.ISMAGE>)
    src.sysmessage @07a1,3 You cant equip mage items.
    return 1
endif
ON=@Equip
SRC.events +e_paralizzly_shield
ON=@UnEquip
SRC.events -e_paralizzly_shield
 
Code:
ON=@SpellSuccess
IF (<ARGN>==49) || (<ARGN>==1) || (<ARGN>==27) || (<ARGN>==57) || (<ARGN>==42) || (<ARGN>==43) || (<ARGN>==3) || (<ARGN>==69) || (<ARGN>==28) || (<ARGN>==18) || (<ARGN>==51) || (<ARGN>==12) || (<ARGN>==30) || (<ARGN>==5) || (<ARGN>==31) || (<ARGN>==53) || (<ARGN>==46) || (<ARGN>==55) || (<ARGN>==37) || (<ARGN>==38) || (<ARGN>==47) || (<ARGN>==39)
        if !(<act.uid> == <src.uid>)
        IF !(<SRC.NPC>)
            IF rand(4)==1
            timerf 1,ACT.SPELLEFFECT S_PARALYZE,10000
            timerf 1,ACT.SAY @0444 Paralyze!
            endif
            endif
            ENDIF
            ENDIF
 
This can be applied to the @SpellEffect trigger too.
Code:
ON=@SpellSuccess
IF (<serv.spell.<argn>.flags>&spellflag_harm) //this will check for all harmfull spells instead of your long check (simple and fast, without unneeded checks).
    if !(<uid>==<src>)//there is no act in this trigger, so I guess you are comparing the caster  with the spell receiver.
        IF !(<SRC.NPC>)
            IF (<r4>==1)
                timerf 1,ACT.SPELLEFFECT S_PARALYZE,10000
                timerf 1,ACT.SAY @0444 Paralyze!
            endif
        endif
    ENDIF
ENDIF
 
And for the end, what is causing your problem:
Code:
ON=@GETHIT
IF !(<src.archery>>960.0)
IF rand(4)==1
var.act <src.act.uid>
src.newitem i_ice_memory_shield
src.act.equip
src.act <var.act>
src.damage <eval <act.tag0.damage>>,1,<uid>
return 1
endif
ENDIF
 
Thats what you have, this is how it should be and why:
Code:
ON=@GETHIT
IF !(<src.archery>>960.0)
    IF (<r4>==1)
        //var.act <src.act.uid> not needed, see the 2 following lines.
        serv.newitem i_ice_memory_shield //this will create an item without modifying your act
        new.equip //and new.equip will equip it to the SRC, if you want it to be equiped by the character receiving the damage change it to EQUIP=<NEW>
        //src.act <var.act>//not needed too
        //src.damage <eval <act.tag0.damage>>,1,<uid> //here you are doing damage to the character dealing it, however... where are you storing act.tag.damage? i can't see it anywhere, hence it should not do any damage.
        //And I don't see the point on dealing damage to the damage dealer in this case, with a paralyzing shield... it should paralyze him, not damage?
        //return 1 if you return 1 in the @GetHit you will stop the proccess, wich in this case is the damage itself
    endif
ENDIF