// MorgenGrauen MUDlib
/** \file /file.c
* Kurzbeschreibung.
* Langbeschreibung...
* \author <Autor>
* \date <date>
* \version $Id$
*/
/* Changelog:
*/
#pragma strong_types, save_types, rtt_checks
#pragma no_clone, no_shadow
#pragma range_check
#pragma warn_deprecated

private void check_all_player(mapping allplayer, closure check_cl,
                             closure finish_cl, int res,
                             varargs mixed extra)
{
  // offenbar fertig mit allen Spielern, Aufrufer informieren.
  if (!sizeof(allplayer))
  {
    funcall(finish_cl, extra...);
    return;
  }

  string dir=m_indices(allplayer)[0];
  string *pls=allplayer[dir];
  foreach(string pl: &pls)
  {
    if (get_eval_cost() < res)
      break; // spaeter weitermachen
    catch(funcall(check_cl, pl, extra...) ; publish);
    pl = 0;
  }
  pls-=({0});
  allplayer[dir] = pls;

  if (!sizeof(allplayer[dir]))
    m_delete(allplayer,dir);

  call_out(#'check_all_player,2, allplayer, check_cl, finish_cl, res, extra...);
}

protected int start_player_check(closure check_cl, closure finish_cl, int res,
                             varargs mixed extra)
{
  // Reservierte Ticks, pausieren, wenn weniger.
  res ||= 1250000;
  mapping allplayer=master()->get_all_players();
  call_out(#'check_all_player,2, allplayer, check_cl, finish_cl, res, extra...);
  return 1;
}

