I'd like to point out that changing you shields by forcing values has no serverside effect, since all statistic changes must go via a 'binary stream' to update the server.
Eg: when you issue a Shield Allocation change (via your hotbar / keyboard etc.. it will issue the new state to the server via a series of calls then finally set the new "shield allocation" via Stat functions (client visable)).
Hence mobs still think you have the "last known state" of your shields by just "forcing" 
Code:
case ShieldAllocation:
{
if(!IsCharacter(pDynel))
return false;
int result = pDynel->GetStat(STAT_ShieldAllocation,DATA_ONLY);
...
//Client side only, useless...
pDynel->SetStat(STAT_ShieldAllocation,SHIELD_UP_2LEFT);
//Do it properly by using the games functions to handle all + server stream ...
pDynel = GetPlayer();
pDynel->GetActionObjectFromType(SHIELD_ALLOCATION)->PerformAction(SHIELD_UP_2LEFT);