Exemple #1
0
Cmd::ProcessResult ColoniseSquaresCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
	auto& m = VerifyCastInput<const Input::CmdColoniseSquares>(msg);

	Population pop = m.m_moved;

	VERIFY_INPUT_MSG("no moves specified", !pop.IsEmpty());
	VERIFY_INPUT_MSG("not enough ships", pop.GetTotal() <= GetTeam(session.GetGame()).GetUnusedColonyShips());

	Moves moves = GetMoves(pop, GetSquareCounts(session.GetGame()));
	DoRecord(RecordPtr(new ColoniseRecord(m_colour, m_pos, moves)), session);

	return nullptr;
}
Exemple #2
0
Cmd::ProcessResult CombatDiceCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
	auto& m = VerifyCastInput<const Input::CmdDice>(msg);

	session.GetController().SendMessage(Output::ChooseFinished(), GetPlayer(session.GetGame()));

	// TODO: manually assign hits.
	
	DoRecord(session.GetGame().GetBattle().CreateAttackRecord(session.GetGame(), m_dice), session);

	// TODO: Send attack animation 

	return nullptr;
}
Exemple #3
0
Cmd::ProcessResult AutoInfluenceCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
	if (dynamic_cast<const Input::CmdAbort*>(&msg))
		return nullptr;

	std::vector<MapPos> hexes = GetHexes(session.GetGame());

	auto& m = VerifyCastInput<const Input::CmdAutoInfluence>(msg);
	VERIFY_INPUT(m.m_selected.size() == hexes.size());

	const LiveGame& game = session.GetGame();

	for (size_t i = 0; i < hexes.size();++i)
		if (m.m_selected[i])
			DoRecord(RecordPtr(new InfluenceRecord(m_colour, nullptr, &hexes[i])), session);

	return nullptr;
}
Exemple #4
0
Cmd::ProcessResult BankruptCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
	auto& m = VerifyCastInput<const Input::CmdInfluenceSrc>(msg);

	std::vector<MapPos> srcs = BankruptCmd::GetSources(session.GetGame());
	VERIFY_INPUT_MSG("invalid pos index", m.m_iPos == -1 || InRange(srcs, m.m_iPos));

	auto& pos = srcs[m.m_iPos];

	InfluenceRecord* pRec = new InfluenceRecord(m_colour, &pos, nullptr);
	DoRecord(RecordPtr(pRec), session);

	const LiveGame& game = session.GetGame();
	const Map& map = game.GetMap();
	if (map.GetHex(pos).HasPopulation())
		return ProcessResult(new UncoloniseCmd(m_colour, pos), nullptr);

	return nullptr;
}
Exemple #5
0
Cmd::ProcessResult TradeCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
	const Team& team = session.GetGame().GetTeam(m_colour);
	auto& storage = team.GetStorage();

	auto& m = VerifyCastInput<const Input::CmdTrade>(msg);

	const int fromCount = m.m_count * Race(team.GetRace()).GetTradeRate();
	VERIFY_INPUT_MSG("no count", m.m_count > 0);
	VERIFY_INPUT_MSG("to == from", m.m_from != m.m_to);
	VERIFY_INPUT_MSG("can't afford trade", fromCount <= storage[m.m_from]);

	TradeRecord::PairVec srcs{ { m.m_from, fromCount } };
	TradeRecord::Pair dst(m.m_to, m.m_count);

	TradeRecord* pRec = new TradeRecord(m_colour, srcs, dst);
	DoRecord(RecordPtr(pRec), session);

	return nullptr;
}
Exemple #6
0
Cmd::ProcessResult DiscoverCmd::Process(const Input::CmdMessage& msg, CommitSession& session)
{
	auto& m = VerifyCastInput<const Input::CmdDiscovery>(msg);
	
	VERIFY_INPUT(m.m_action != Input::CmdDiscovery::Action::None);

	auto& game = session.GetGame();

	bool use = m.m_action == Input::CmdDiscovery::Action::Use;
	VERIFY_INPUT(!use || CanUse(game));

	if (use && m_discovery == DiscoveryType::AncientTech)
		return ProcessResult(new ResearchDiscoveryCmd(m_colour, game, GetAncientTechs(game)));

	DiscoveryType discovery = m.m_action == Input::CmdDiscovery::Action::Points ? DiscoveryType::None : m_discovery;
	DoRecord(RecordPtr(new DiscoveryRecord(m_colour, discovery, m_idHex)), session);

	if (use && Discovery::GetClass(m_discovery) == DiscoveryClass::ShipPart)
		return ProcessResult(new UpgradeDiscoveryCmd(m_colour, session.GetGame(), Discovery::GetShipPart(m_discovery)));

	return ProcessResult(nullptr);
}
Exemple #7
0
Fichier : main.c Projet : VVer/opal
int main(int argc, char * argv[])
{
  Operations operation;

  
  if (argc < 2 || (operation = GetOperation(argv[1])) == NumOperations || argc < RequiredArgsForOperation[operation]) {
    Operations op;
    fputs("usage: c_api { ", stderr);
    for (op = OpListen; op < NumOperations; op++) {
      if (op > OpListen)
        fputs(" | ", stderr);
      fputs(OperationNames[op], stderr);
    }
    fputs(" } [ A-party [ B-party | file ] ]\n", stderr);
    return 1;
  }

  puts("Initialising.\n");

  if (!InitialiseOPAL())
    return 1;

  switch (operation) {
    case OpListen :
      puts("Listening.\n");
      HandleMessages(60000);
      break;

    case OpCall :
      if (argc > 3) {
        if (!DoCall(argv[2], argv[3]))
          break;
      } else {
        if (!DoCall(NULL, argv[2]))
          break;
      }
      HandleMessages(15000);
      break;

    case OpMute :
      if (!DoCall(NULL, argv[2]))
        break;
      HandleMessages(15000);
      if (!DoMute(1))
        break;
      HandleMessages(15000);
      if (!DoMute(0))
        break;
      HandleMessages(15000);
      break;

    case OpHold :
      if (!DoCall(NULL, argv[2]))
        break;
      HandleMessages(15000);
      if (!DoHold())
        break;
      HandleMessages(15000);
      break;

    case OpTransfer :
      if (!DoCall(NULL, argv[2]))
        break;
      HandleMessages(15000);
      if (!DoTransfer(argv[3]))
        break;
      HandleMessages(15000);
      break;

    case OpConsult :
      if (!DoCall(NULL, argv[2]))
        break;
      HandleMessages(15000);
      if (!DoHold())
        break;
      HandleMessages(15000);
      if (!DoCall(NULL, argv[3]))
        break;
      HandleMessages(15000);
      if (!DoTransfer(HeldCallToken))
        break;
      HandleMessages(15000);
      break;

    case OpRegister :
      if (!DoRegister(argv[2], argv[3]))
        break;
      HandleMessages(15000);
      break;

    case OpSubscribe :
      if (!DoSubscribe(argv[2], argv[3], argv[4]))
        break;
      HandleMessages(INT_MAX); // More or less forever
      break;

    case OpRecord :
      if (!DoRecord(argv[2], argv[3]))
        break;
      HandleMessages(INT_MAX); // More or less forever
      break;

    case OpPlay :
      if (!DoPlay(argv[2], argv[3]))
        break;
      HandleMessages(INT_MAX); // More or less forever
      break;

    default :
      break;
  }

  puts("Exiting.\n");

  ShutDownFunction(hOPAL);
  return 0;
}