(svn r1023) -Fix: [Network] [ 1083692 ] You can no longer buy out a company in MP
authortruelight
Sun, 12 Dec 2004 14:00:25 +0000
changeset 599 80e49e323483
parent 598 200de7111fa9
child 600 701078838fde
(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
player_gui.c
--- a/economy.c	Sun Dec 12 13:46:10 2004 +0000
+++ b/economy.c	Sun Dec 12 14:00:25 2004 +0000
@@ -1466,6 +1466,8 @@
 	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 @@
 	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;
--- a/player_gui.c	Sun Dec 12 13:46:10 2004 +0000
+++ b/player_gui.c	Sun Dec 12 14:00:25 2004 +0000
@@ -443,7 +443,7 @@
 	}
 }
 
-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 @@
 		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;