Gift monster ID's easier, so let's start with that.
Try amp_get_new_party_id to get the ID of the first empty slot in the party. If NONE, there's no empty slot - either abandon the gift procedure and tell the player they need to make some room in the party, or amp_get_new_box_id to get the first empty slot in the storage system instead. When you've got an empty slot, use amp_generate_monster to actually create a monster. (And optionally, give it a held item, special moves and so on - check out all the fun stuff in Scripts --> Data Mangling --> Active Monster Party). Also call msh_recompute_seencaught, in case the player didn't have this monster dex-ed yet.
(You can see an example of this stuff in action if you check mev_intro_starterselect_confirm.)
Now for text speed: There's two places where text speed is used, both in the message_handle script.
Line 17:
for(var c = 0; c < 2 + 2*k_a; c++){ //(main speed control - this many letters are typed per game step)
and line 23:
message_cooldown += 10; //(temporary pause on detecting the "|" character)
Depending on what needs you have, you could change either of those to put in some more speed control. I.e. instead of typing 2 + 2*k_a letters per step, you could type global.text_speed*(1 + k_a) letters, where the text speed variable defaults to 2 but there's a new "cc_textspeed" cutscene command script (see Scripts --> Cutscene System --> Cutscene Commands) which lets you change it at will. (I.e. change it to 1 to type more slowly, or change it to 99999 to reveal text instantly (but | characters can still be used to add dramatic breaks))
And of course, if you just want to add dramatic breaks or show someone enunciating a word extra clearly, there's no need for extra code - you could just sprinkle in some |s - one between each letter |l|i|k|e| |t|h|i|s, or a bunch at once when someone's...||| catching their breath.