I think that i found a valid solution.
The problem is that, when a Pokémon uses SkyDrop, it sets the opponent SkyDrop effect to true, and its TwoTurneffect to the move's index (163). When the second part of the attack starts, the game check if the move can fail. Unfortunately this happens because of the line ret=true if opponent.effects[PBEffects::SkyDrop]; in fact the opponent.effects[PBEffects::SkyDrop] is equal to true. To correct this we need to create another effect, into PBEffects script section, that traces the actual state of the attacker (it's using SkyDrop, but we can't use the same effect of the opponent, that suffers that move).
Into PBEffects script section, after Yawn = 106, we need to add:
SkyDropAttacker = 107
Now, into the 0xCE PokeBattle_MoveEffect script section, we need to edit some lines:
First thing first, we need to correct the line
ret=true if opponent.effects[PBEffects::SkyDrop] to:
ret=true if opponent.effects[PBEffects::SkyDrop] && attacker.effects[PBEffects::SkyDropAttacker]==false
After this, we need to add
attacker.effects[PBEffects::SkyDropAttacker]=true after opponent.effects[PBEffects::SkyDrop]=true
And then
attacker.effects[PBEffects::SkyDropAttacker]=false after opponent.effects[PBEffects::SkyDrop]=false
Now, the game checks if the opponent is in the air with the attacker before to determine if the move will fails; however, this isn't enough, because the opponent will avoid always this move. Therefore, after the following line:
override=true if USENEWBATTLEMECHANICS && thismove.function==0x06 && thismove.basedamage==0 && user.pbHasType?(:POISON)
We need to add this:
override=true if target.effects[PBEffects::SkyDrop] && user.effects[PBEffects::SkyDropIndex] && thismove.function==0xCE
I hope that this is enough and, above all, correct! :)