mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-01-22 07:06:01 +00:00
(svn r1023) -Fix: [Network] [ 1083692 ] You can no longer buy out a company in MP
because of the lag between commands (anyway, I hope)
This commit is contained in:
parent
e027fa76b1
commit
397bd915a3
@ -1466,6 +1466,8 @@ static void DoAcquireCompany(Player *p)
|
|||||||
DeletePlayerWindows(pi);
|
DeletePlayerWindows(pi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int GetAmountOwnedBy(Player *p, byte owner);
|
||||||
|
|
||||||
int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||||
{
|
{
|
||||||
Player *p;
|
Player *p;
|
||||||
@ -1476,6 +1478,13 @@ int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
|||||||
SET_EXPENSES_TYPE(EXPENSES_OTHER);
|
SET_EXPENSES_TYPE(EXPENSES_OTHER);
|
||||||
p = DEREF_PLAYER(p1);
|
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;
|
cost = CalculateCompanyValue(p) >> 2;
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
b = p->share_owners;
|
b = p->share_owners;
|
||||||
|
@ -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) +
|
return (p->share_owners[0] == owner) +
|
||||||
(p->share_owners[1] == 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));
|
SetDParam(2, GetPlayerNameString((byte)w->window_number, 3));
|
||||||
|
|
||||||
dis = 0;
|
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
|
// Also disable the buy button if 25% is not-owned by someone
|
||||||
// and the player is not an AI
|
// 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;
|
if (GetAmountOwnedBy(p, _local_player) == 0) dis |= 1 << 10;
|
||||||
|
|
||||||
w->disabled_state = dis;
|
w->disabled_state = dis;
|
||||||
|
Loading…
Reference in New Issue
Block a user