(svn r10087) -Fix [FS#834]: multiple subsequent "give money" actions could result in duplicate messages that money has been transfered when it only happened once.

pull/155/head
rubidium 17 years ago
parent c33e651393
commit a2b505e4ca

@ -33,6 +33,7 @@ CommandCallback CcPlaySound10;
CommandCallback CcPlaceSign;
CommandCallback CcTerraform;
CommandCallback CcBuildTown;
CommandCallback CcGiveMoney;
/* rail_gui.cpp */
CommandCallback CcPlaySound1E;
@ -87,7 +88,8 @@ CommandCallback *_callback_table[] = {
/* 0x17 */ CcCloneShip,
/* 0x18 */ CcCloneTrain,
/* 0x19 */ CcAI,
/* 0x1A */ CcCloneVehicle
/* 0x1A */ CcCloneVehicle,
/* 0x1B */ CcGiveMoney,
};
const int _callback_table_count = lengthof(_callback_table);

@ -58,6 +58,21 @@ extern void GenerateIndustries();
extern bool GenerateTowns();
void CcGiveMoney(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
if (!success) return;
char msg[20];
/* Inform the player of this action */
snprintf(msg, sizeof(msg), "%d", p1);
if (!_network_server) {
SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg);
} else {
NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, NETWORK_SERVER_INDEX);
}
}
void HandleOnEditText(const char *str)
{
int id = _rename_id;
@ -75,22 +90,11 @@ void HandleOnEditText(const char *str)
case 3: { // Give money, you can only give money in excess of loan
const Player *p = GetPlayer(_current_player);
int32 money = min(p->money64 - p->current_loan, atoi(str) / _currency->rate);
char msg[20];
money = clamp(money, 0, 20000000); // Clamp between 20 million and 0
/* Give 'id' the money, and substract it from ourself */
int32 ret = DoCommandP(0, money, id, NULL, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
if (CmdFailed(ret) || ret == 0) break; // We either did something wrong, or we don't have any money anymore
/* Inform the player of this action */
snprintf(msg, sizeof(msg), "%d", money);
if (!_network_server) {
SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg);
} else {
NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg, NETWORK_SERVER_INDEX);
}
DoCommandP(0, money, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
} break;
#endif /* ENABLE_NETWORK */
default: NOT_REACHED();

Loading…
Cancel
Save