I think this is the problem:
PHP Code:
emitter.addlocalmodifier("once", 0, 0, "y", "replace", player.y-30, player.y+30);
emitter.addlocalmodifier("once", 0, 0, "x", "replace", player.x-30, player.x+30);
It forces the particles to spawn around the place where the player last said "/hallo on". If he's at (32, 32), they'll spawn in the range 32-30 to 32+30 or 2 to 62, which will break when you're on a gmap.
Try this instead:
PHP Code:
emitter.addlocalmodifier("once", 0, 0, "y", "add", -30, +30);
emitter.addlocalmodifier("once", 0, 0, "x", "add", -30, +30);
And unrelated to the problem, you can remove this:
PHP Code:
this.x = this.dx;
this.y = this.dy;
And a good way to turn on/off particle effects is to toggle the emitter.emitautomatically flag.