I can only think of one real option (others may exist but I cannot recall any):
Use repsys hook introducted in POL 097.
From core-changes.txt:
Code:
08-17 Austin
Added: repsys.cfg
New elem called 'HookList' which will support syste hook scripts for the reputation system.
Currently name (single click) and highlight (health bar) colors are hookable.
Example:
repsys.cfg
HookList HookList
{
NameColor :repsys:hookScript:NameColor
HighLightColor :repsys:hookScript:HighLightColor
}
:repsys:hookScript.src
exported function NameColor(mobile, visible_to)
return CInt(GetObjProperty(mobile, "NameColor"));
endfunction
exported function HighLightColor(mobile, visible_to)
return CInt(GetObjProperty(mobile, "HighLightColor"));
endfunction
HighLightColor note: The client seems to only accept the following numbers
0 - None, 1 - Innocent, 2 - Friend, 3 - Attackable,
4 - Criminal, 5 - Enemy, 6 - Murderer, 7 - Invulnerable
8 - Unknown (blue gump, pure black mobile)
08-19 Austin
Added: Three more hooks to repsys.cfg's HookList elem.
OnAttack Run when a mobile attacks another.
- Target with the TGTOPT_HARMFUL flag set.
- Mobile goes into warmode and double clicks another.
OnDamage Run when a mobile damages another.
- ApplyDamage() or ApplyRawDamage() is used.
OnHelp Run when a mobile helps another.
- Target with TGTOPT_HELPFUL is used.
See distro code for example core-like usage of this.
What you'd like to do is give player a Attackable status the way you want (cprop is fine), and in the OnAttack hook check if the defender has such. If so, the attacker did not break the law. Or if you wish to grant the privilege so that player can attack everything without consequences, do the checking for attacker's cprop. I think you'll got the idea.
Note though, there's a bug in the way core handles these hooks. Take a look at this:
http://forums.polserver.com/ftopic1061.php. One possible workaround is to use external script launched with Start_Script() for status toggling.