public MakingOffer makeOffer(Offer offer, PlayerPtrVector allPlayers,
			News news) {
		// called by CheckBuying() of own team, or by GUI
		if (offer.getPlayer().getContracts().getNextContr().getTeam() != null
				|| offer.getBuyer().equals(offer.getPlayer().getContracts().getCurrContr()
						.getTeam())) {
			// has already a new contract or same team
			return MakingOffer.FAILED;
		}
		// unsigned
		int nofOffers = getNofBuyNegOffers();
		for (int i = 0; i < nofOffers; i++) {
			Offer alreadyOffer = getBuyNegOffer(i);
			if (offer.getPlayer().equals(alreadyOffer.getPlayer())) {
				// already a pending offer to same player
				return MakingOffer.FAILED;
			}
		}
		if (offer.getSeller() == null) {
			// free agent

			// NYI AI of the free agent

			if (Util.random(3) == 0
					&& buyerNofPlayers(offer, allPlayers) < Team.TEAM_MAXTEAMPLAYER
							+ Team.TEAM_MAXFARMPLAYER) {
				String s = news.getTransfers();
				s += offer.getPlayer().getLastName();
				s += Util.getModelResourceBundle().getString("L_SIGNS_AT");
				s += offer.getBuyer().getTeamName();
				if (offer.isImmediately()) {
					offer.getPlayer().getContracts().setCurrContr(new Contracts.TContract(
							offer.getBuyer()));
					offer.getPlayer().getContracts().setCurrContrYears(offer.getYears());
					offer.getPlayer().getContracts().setCurrContrWage(offer.getWage());
					offer.getPlayer().calcFee(false); // calc new fee after transferring
					offer.getBuyer().addPlayer(offer.getPlayer());
					s += Util.getModelResourceBundle().getString("L_IMMEDIATELY");
					s += "\n";
					news.setTransfers(s);
					return MakingOffer.ACCEPTED_AND_DONE;
				} else {
					offer.getPlayer().getContracts().setNextContr(new Contracts.TContract(
							offer.getBuyer()));
					offer.getPlayer().getContracts().setNextContrYears(offer.getYears());
					offer.getPlayer().getContracts().setNextContrWage(offer.getWage());
					s += Util.getModelResourceBundle().getString("L_FOR_NEXT_SEASON");
					s += "\n";
					news.setTransfers(s);
					return MakingOffer.ACCEPTED;
				}
			} else {
				offer.getPlayer().getContracts().setNoContractThisRound(true);
				return MakingOffer.FAILED;
			}
		} else {
			buyNeg.add(offer);
			offer.getSeller().getTransfer().sellNeg.add(offer);
			String s;
			s = offer.getBuyer().getTeamName();
			s += Util.getModelResourceBundle().getString("L_IS_INTERESTED_IN");
			if (offer.getPlayer().isMultipleName()) {
				s += offer.getPlayer().getFirstName();
				s += " ";
			}
			s += offer.getPlayer().getLastName();
			offer.getSeller().getMessages().add(s);
		}
		return MakingOffer.SUCCEED;
	}