mpoload takes only the vnum as an argument. Thus, there should not be any "i" there.
On the other hand, mpgive takes a keyword (just like give). So, you might write "mpgive key $n" or "mpgive i433 $n". The word composed of "i" and the vnum is actually an keyword automatically added to all objects by the mud (same for "m" + vnum for the mobs). So, after a mpgive, you need a "i" if you are going to use the vnum.
As a side note, another comment on your program: In an "mpechoaround $n", you should use $N instead of $n in the text. "$n" is replaced with the name of the character; "$N" on the other hand is replaced with the name (for people who have been greeted) or with the description (for people who have not been greeted). So... if you do not want the echo to give out $n's name, you should use
Code: Select all
mpechoaround $n A gnomish gem dealer gives $N a red gem.
And... final comment, it's better to colourize your echoes. For example:
Code: Select all
mpechoat $n {B0}A gnomish gem dealer gives you a red gem.
Or, if the snippet of code is taken from a program on that gnomish gem dealer, you could use
Code: Select all
mpechoat $n $I gives you a red gem.
and $I will be replaced by the mob's short description (complete with the colour code).