I think you sould be able to change the summon item to use the target of the summoner. The problem is if the summoner inputs the wrong value you would never know.
in command.cpp is
void command_summonitem(Client *c, const Seperator *sep)
with in the if's it could be checked if a target is selected and then summon to their cursor.
this is some ruff UNTESTED code....
Code:
Mob *t;
if(c->GetTarget()){ // have target
t=c->GetTarget();
t->CastToClient()->SummonItem(itemid);
}
else
{
c->SummonItem(itemid);
}