Ви маєте на увазі, що дії роблять кілька оборотів (тобто, спати на 50 оборотів прямо)?
Що я б робив, це зберегти об’єкт, player.currentAction. currentAction може містити, скільки поворотів потребує дії, яка роздільна здатність дії та перелік станів, які скасовують дію (загроза, атака, занадто гаряча тощо). Кожен поворот, перш ніж ми перевіряли наявність гравця, ми перевіряли, чи гравець перебуває в середині дії, а потім робимо щось на кшталт щось на кшталт ...
if(!player.currentAction.interrupted())
{
if(player.currentAction.complete() == true)
{
player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
player.currentAction = null;
}
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else
{
player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
player.currentAction = null;
}