Exemplo n.º 1
0
void monopoly_player(gint player_num, gint victim_num, gint num,
		     Resource type)
{
	gchar *buf;
	gchar *tmp;

	player_modify_statistic(player_num, STAT_RESOURCES, num);
	player_modify_statistic(victim_num, STAT_RESOURCES, -num);

	buf = resource_cards(num, type);
	if (player_num == my_player_num()) {
		/* I get the cards */
		/* $1=resources, $2=player that loses resources */
		log_message(MSG_STEAL, _("You get %s from %s.\n"),
			    buf, player_name(victim_num, FALSE));
		resource_modify(type, num);
	} else if (victim_num == my_player_num()) {
		/* I lose the cards */
		/* $1=player that steals, $2=resources */
		log_message(MSG_STEAL, _("%s took %s from you.\n"),
			    player_name(player_num, TRUE), buf);
		resource_modify(type, -num);
	} else {
		/* I'm a bystander */
		/* $1=player that steals, $2=resources, $3=player that loses resources */
		tmp = g_strdup(player_name(player_num, TRUE));
		log_message(MSG_STEAL, _("%s took %s from %s.\n"),
			    tmp, buf, player_name(victim_num, FALSE));
		g_free(tmp);
	}
	g_free(buf);
}
Exemplo n.º 2
0
void player_maritime_trade(gint player_num,
			   gint ratio, Resource supply, Resource receive)
{
	gchar *buf_give;
	gchar *buf_receive;
	gint resources[NO_RESOURCE];
	gint idx;

	for (idx = 0; idx < NO_RESOURCE; ++idx)
		resources[idx] = 0;
	resources[supply] = ratio;
	resources[receive] = -1;
	modify_bank(resources);

	player_modify_statistic(player_num, STAT_RESOURCES, 1 - ratio);
	if (player_num == my_player_num()) {
		resource_modify(supply, -ratio);
		resource_modify(receive, 1);
	}

	buf_give = resource_cards(ratio, supply);
	buf_receive = resource_cards(1, receive);
	log_message(MSG_TRADE, _("%s exchanged %s for %s.\n"),
		    player_name(player_num, TRUE), buf_give, buf_receive);
	g_free(buf_give);
	g_free(buf_receive);
}
Exemplo n.º 3
0
void player_domestic_trade(gint player_num, gint partner_num,
			   gint * supply, gint * receive)
{
	gchar *supply_desc;
	gchar *receive_desc;
	gint diff;
	gint idx;

	diff = resource_count(receive) - resource_count(supply);
	player_modify_statistic(player_num, STAT_RESOURCES, -diff);
	player_modify_statistic(partner_num, STAT_RESOURCES, diff);
	if (player_num == my_player_num()) {
		for (idx = 0; idx < NO_RESOURCE; idx++) {
			resource_modify(idx, supply[idx]);
			resource_modify(idx, -receive[idx]);
		}
	} else if (partner_num == my_player_num()) {
		for (idx = 0; idx < NO_RESOURCE; idx++) {
			resource_modify(idx, -supply[idx]);
			resource_modify(idx, receive[idx]);
		}
	}

	if (!resource_count(supply)) {
		if (!resource_count(receive)) {
			log_message(MSG_TRADE, _("%s gave %s nothing!?\n"),
				    player_name(player_num, TRUE),
				    player_name(partner_num, FALSE));
		} else {
			receive_desc = resource_format_num(receive);
			log_message(MSG_TRADE,
				    _("%s gave %s %s for free.\n"),
				    player_name(player_num, TRUE),
				    player_name(partner_num, FALSE),
				    receive_desc);
			g_free(receive_desc);
		}
	} else if (!resource_count(receive)) {
		supply_desc = resource_format_num(supply);
		log_message(MSG_TRADE, _("%s gave %s %s for free.\n"),
			    player_name(partner_num, TRUE),
			    player_name(player_num, FALSE), supply_desc);
		g_free(supply_desc);
	} else {
		supply_desc = resource_format_num(supply);
		receive_desc = resource_format_num(receive);
		log_message(MSG_TRADE,
			    _("%s gave %s %s in exchange for %s.\n"),
			    player_name(player_num, TRUE),
			    player_name(partner_num, FALSE), receive_desc,
			    supply_desc);
		g_free(supply_desc);
		g_free(receive_desc);
	}
}
Exemplo n.º 4
0
void player_stole_from(gint player_num, gint victim_num, Resource resource)
{
	player_modify_statistic(player_num, STAT_RESOURCES, 1);
	player_modify_statistic(victim_num, STAT_RESOURCES, -1);

	if (resource == NO_RESOURCE) {
		/* CHECK THIS: Since anonymous players (NULL) no longer exist,
		 *  player_name doesn't use its static buffer anymore, and
		 * two calls can be safely combined. If not: ai/player.c should also be fixed */
		/* FIXME: in the client, anonymous players can exist.
		 * I prefer changing that instead of this function */
		log_message(MSG_STEAL,
			    /* We are not in on the action
			       someone stole a resource from someone else */
			    _("%s stole a resource from %s.\n"),
			    player_name(player_num, TRUE),
			    player_name(victim_num, FALSE));
	} else {
		gchar *buf;

		buf = resource_cards(1, resource);
		if (player_num == my_player_num()) {
			/* We stole a card :-) */
			log_message(MSG_STEAL,
				    _("You stole %s from %s.\n"), buf,
				    player_name(victim_num, FALSE));
			resource_modify(resource, 1);
		} else {
			/* Someone stole our card :-( */
			log_message(MSG_STEAL,
				    _("%s stole %s from you.\n"),
				    player_name(player_num, TRUE), buf);
			resource_modify(resource, -1);
		}
		g_free(buf);
	}
	callbacks.player_robbed(player_num, victim_num, resource);
}