mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
fe3a7cc5ed
commit
5f5ab6cc87
|
@ -33,6 +33,7 @@ CommandCallback CcPlaySound10;
|
||||||
CommandCallback CcPlaceSign;
|
CommandCallback CcPlaceSign;
|
||||||
CommandCallback CcTerraform;
|
CommandCallback CcTerraform;
|
||||||
CommandCallback CcBuildTown;
|
CommandCallback CcBuildTown;
|
||||||
|
CommandCallback CcGiveMoney;
|
||||||
|
|
||||||
/* rail_gui.cpp */
|
/* rail_gui.cpp */
|
||||||
CommandCallback CcPlaySound1E;
|
CommandCallback CcPlaySound1E;
|
||||||
|
@ -87,7 +88,8 @@ CommandCallback *_callback_table[] = {
|
||||||
/* 0x17 */ CcCloneShip,
|
/* 0x17 */ CcCloneShip,
|
||||||
/* 0x18 */ CcCloneTrain,
|
/* 0x18 */ CcCloneTrain,
|
||||||
/* 0x19 */ CcAI,
|
/* 0x19 */ CcAI,
|
||||||
/* 0x1A */ CcCloneVehicle
|
/* 0x1A */ CcCloneVehicle,
|
||||||
|
/* 0x1B */ CcGiveMoney,
|
||||||
};
|
};
|
||||||
|
|
||||||
const int _callback_table_count = lengthof(_callback_table);
|
const int _callback_table_count = lengthof(_callback_table);
|
||||||
|
|
|
@ -58,6 +58,21 @@ extern void GenerateIndustries();
|
||||||
extern bool GenerateTowns();
|
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)
|
void HandleOnEditText(const char *str)
|
||||||
{
|
{
|
||||||
int id = _rename_id;
|
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
|
case 3: { // Give money, you can only give money in excess of loan
|
||||||
const Player *p = GetPlayer(_current_player);
|
const Player *p = GetPlayer(_current_player);
|
||||||
int32 money = min(p->money64 - p->current_loan, atoi(str) / _currency->rate);
|
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
|
money = clamp(money, 0, 20000000); // Clamp between 20 million and 0
|
||||||
|
|
||||||
/* Give 'id' the money, and substract it from ourself */
|
/* Give 'id' the money, and substract it from ourself */
|
||||||
int32 ret = DoCommandP(0, money, id, NULL, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
|
DoCommandP(0, money, id, CcGiveMoney, 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);
|
|
||||||
}
|
|
||||||
} break;
|
} break;
|
||||||
#endif /* ENABLE_NETWORK */
|
#endif /* ENABLE_NETWORK */
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
|
|
Loading…
Reference in New Issue