diff --git a/src/callback_table.cpp b/src/callback_table.cpp index 30dca7cac4..21bd39a4cf 100644 --- a/src/callback_table.cpp +++ b/src/callback_table.cpp @@ -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); diff --git a/src/main_gui.cpp b/src/main_gui.cpp index ddf3943183..45c8bef498 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -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();