From 397bd915a3dd5d606f5ae7f66125ef5e86e481fb Mon Sep 17 00:00:00 2001 From: truelight Date: Sun, 12 Dec 2004 14:00:25 +0000 Subject: (svn r1023) -Fix: [Network] [ 1083692 ] You can no longer buy out a company in MP because of the lag between commands (anyway, I hope) --- economy.c | 9 +++++++++ player_gui.c | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/economy.c b/economy.c index 9fa35e5c4..804763d1d 100644 --- a/economy.c +++ b/economy.c @@ -1466,6 +1466,8 @@ static void DoAcquireCompany(Player *p) DeletePlayerWindows(pi); } +extern int GetAmountOwnedBy(Player *p, byte owner); + int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2) { Player *p; @@ -1476,6 +1478,13 @@ int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2) SET_EXPENSES_TYPE(EXPENSES_OTHER); p = DEREF_PLAYER(p1); + /* Those lines are here for network-protection (clients can be slow) */ + if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 0) + return 0; + /* We can not buy out a real player in networking */ + if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 1 && !p->is_ai) + return 0; + cost = CalculateCompanyValue(p) >> 2; if (flags & DC_EXEC) { b = p->share_owners; diff --git a/player_gui.c b/player_gui.c index 541429ac7..c0990a27e 100644 --- a/player_gui.c +++ b/player_gui.c @@ -443,7 +443,7 @@ static void DrawPlayerVehiclesAmount(int player) } } -static int GetAmountOwnedBy(Player *p, byte owner) +int GetAmountOwnedBy(Player *p, byte owner) { return (p->share_owners[0] == owner) + (p->share_owners[1] == owner) + @@ -489,10 +489,10 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e) SetDParam(2, GetPlayerNameString((byte)w->window_number, 3)); dis = 0; - if (GetAmountOwnedBy(p, 0xFF) == 0) dis |= 1 << 9; + if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 0) dis |= 1 << 9; // Also disable the buy button if 25% is not-owned by someone // and the player is not an AI - if (GetAmountOwnedBy(p, 0xFF) == 1 && !p->is_ai) dis |= 1 << 9; + if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 1 && !p->is_ai) dis |= 1 << 9; if (GetAmountOwnedBy(p, _local_player) == 0) dis |= 1 << 10; w->disabled_state = dis; -- cgit v1.2.3-70-g09d2