1
0
Fork 0

(svn r5348) -Fix: A HQ could only be flooded at its northern tile, the other 3 were immune to water

release/0.5
tron 2006-06-24 08:08:28 +00:00
parent a832ca51fe
commit 5fad8a1829
1 changed files with 18 additions and 31 deletions

View File

@ -25,39 +25,25 @@
* @param tile tile coordinates where HQ is located to destroy * @param tile tile coordinates where HQ is located to destroy
* @param flags docommand flags of calling function * @param flags docommand flags of calling function
*/ */
static int32 DestroyCompanyHQ(TileIndex tile, uint32 flags) static int32 DestroyCompanyHQ(PlayerID pid, uint32 flags)
{ {
Player *p; Player* p = GetPlayer(pid);
SET_EXPENSES_TYPE(EXPENSES_PROPERTY); SET_EXPENSES_TYPE(EXPENSES_PROPERTY);
/* Find player that has HQ flooded, and reset their location_of_house */ if (flags & DC_EXEC) {
if (_current_player == OWNER_WATER) { TileIndex t = p->location_of_house;
bool dodelete = false;
FOR_ALL_PLAYERS(p) { DoClearSquare(t + TileDiffXY(0, 0));
if (p->location_of_house == tile) { DoClearSquare(t + TileDiffXY(0, 1));
dodelete = true; DoClearSquare(t + TileDiffXY(1, 0));
break; DoClearSquare(t + TileDiffXY(1, 1));
} p->location_of_house = 0; // reset HQ position
} InvalidateWindow(WC_COMPANY, pid);
if (!dodelete) return CMD_ERROR; }
} else /* Destruction was initiated by player */
p = GetPlayer(_current_player);
if (p->location_of_house == 0) return CMD_ERROR;
if (flags & DC_EXEC) {
DoClearSquare(p->location_of_house + TileDiffXY(0, 0));
DoClearSquare(p->location_of_house + TileDiffXY(0, 1));
DoClearSquare(p->location_of_house + TileDiffXY(1, 0));
DoClearSquare(p->location_of_house + TileDiffXY(1, 1));
p->location_of_house = 0; // reset HQ position
InvalidateWindow(WC_COMPANY, p->index);
}
// cost of relocating company is 1% of company value // cost of relocating company is 1% of company value
return CalculateCompanyValue(p) / 100; return CalculateCompanyValue(p) / 100;
} }
void UpdateCompanyHQ(Player *p, uint score) void UpdateCompanyHQ(Player *p, uint score)
@ -101,9 +87,7 @@ int32 CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
cost = ret; cost = ret;
if (p->location_of_house != 0) { /* Moving HQ */ if (p->location_of_house != 0) { /* Moving HQ */
ret = DestroyCompanyHQ(p->location_of_house, flags); cost += DestroyCompanyHQ(_current_player, flags);
if (CmdFailed(ret)) return CMD_ERROR;
cost += ret;
} }
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
@ -202,8 +186,11 @@ static Slope GetSlopeTileh_Unmovable(TileIndex tile, Slope tileh)
static int32 ClearTile_Unmovable(TileIndex tile, byte flags) static int32 ClearTile_Unmovable(TileIndex tile, byte flags)
{ {
if (IsCompanyHQ(tile)) { if (IsCompanyHQ(tile)) {
if (_current_player == OWNER_WATER) return DestroyCompanyHQ(tile, DC_EXEC); if (_current_player == OWNER_WATER) {
return_cmd_error(STR_5804_COMPANY_HEADQUARTERS_IN); return DestroyCompanyHQ(GetTileOwner(tile), DC_EXEC);
} else {
return_cmd_error(STR_5804_COMPANY_HEADQUARTERS_IN);
}
} }
if (IsOwnedLand(tile)) { if (IsOwnedLand(tile)) {