mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-02 04:13:26 +00:00
(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.
This commit is contained in:
parent
fe3a7cc5ed
commit
5f5ab6cc87
@ -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…
Reference in New Issue
Block a user