Index: src/ai/api/ai_town.hpp =================================================================== --- src/ai/api/ai_town.hpp (revision 22696) +++ src/ai/api/ai_town.hpp (working copy) @@ -209,7 +209,8 @@ /** * Find out if this tile is within the rating influence of a town. - * Stations on this tile influence the rating of the town. + * If a new station would be build on this tile, the servicing quality of it would + * influence the rating of the town. * @param town_id The town to check. * @param tile The tile to check. * @pre IsValidTown(town_id). Index: src/ai/api/ai_tile.hpp =================================================================== --- src/ai/api/ai_tile.hpp (revision 22696) +++ src/ai/api/ai_tile.hpp (working copy) @@ -439,7 +439,8 @@ /** * Find out if this tile is within the rating influence of a town. - * Stations on this tile influence the rating of the town. + * If a new station would be build on this tile, the servicing quality of it would + * influence the rating of the town. * @param tile The tile to check. * @param town_id The town to check. * @return True if the tile is within the rating influence of the town. @@ -447,6 +448,13 @@ static bool IsWithinTownInfluence(TileIndex tile, TownID town_id); /** + * Find the town which has authority for the tile. + * The rating of your company in this town will be checked and affected when + * building stations, trees etc. + */ + static TownID GetTownAuthority(TileIndex tile); + + /** * Find the town that is closest to a tile. Stations you build at this tile * will belong to this town. * @param tile The tile to check. Index: src/ai/api/ai_changelog.hpp =================================================================== --- src/ai/api/ai_changelog.hpp (revision 22696) +++ src/ai/api/ai_changelog.hpp (working copy) @@ -26,6 +26,7 @@ * \li AICompany::GetQuarterlyCargoDelivered * \li AICompany::GetQuarterlyPerformanceRating * \li AICompany::GetQuarterlyCompanyValue + * \li AITown::GetTownAuthority * * API removals: * \li AICompany::GetCompanyValue, use AICompany::GetQuarterlyCompanyValue instead. Index: src/ai/api/ai_company.hpp.sq =================================================================== --- src/ai/api/ai_company.hpp.sq (revision 22696) +++ src/ai/api/ai_company.hpp.sq (working copy) @@ -13,6 +13,8 @@ namespace SQConvert { /* Allow enums to be used as Squirrel parameters */ + template <> AICompany::Quarter GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AICompany::Quarter)tmp; } + template <> int Return(HSQUIRRELVM vm, AICompany::Quarter res) { sq_pushinteger(vm, (int32)res); return 1; } template <> AICompany::CompanyID GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AICompany::CompanyID)tmp; } template <> int Return(HSQUIRRELVM vm, AICompany::CompanyID res) { sq_pushinteger(vm, (int32)res); return 1; } template <> AICompany::Gender GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AICompany::Gender)tmp; } @@ -42,33 +44,33 @@ SQAICompany.DefSQConst(engine, AICompany::GENDER_FEMALE, "GENDER_FEMALE"); SQAICompany.DefSQConst(engine, AICompany::GENDER_INVALID, "GENDER_INVALID"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::IsMine, "IsMine", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetName, "SetName", 2, ".."); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetName, "GetName", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentName, "SetPresidentName", 2, ".."); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentName, "GetPresidentName", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentGender, "SetPresidentGender", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentGender, "GetPresidentGender", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetLoanAmount, "SetLoanAmount", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetMinimumLoanAmount, "SetMinimumLoanAmount", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanAmount, "GetLoanAmount", 1, "."); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetMaxLoanAmount, "GetMaxLoanAmount", 1, "."); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanInterval, "GetLoanInterval", 1, "."); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyIncome, "GetQuarterlyIncome", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyExpenses, "GetQuarterlyExpenses", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyCargoDelivered, "GetQuarterlyCargoDelivered", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyPerformanceRating, "GetQuarterlyPerformanceRating", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyCompanyValue, "GetQuarterlyCompanyValue", 3, ".ii"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetBankBalance, "GetBankBalance", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::BuildCompanyHQ, "BuildCompanyHQ", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetCompanyHQ, "GetCompanyHQ", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewStatus, "SetAutoRenewStatus", 2, ".b"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewStatus, "GetAutoRenewStatus", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMonths, "SetAutoRenewMonths", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMonths, "GetAutoRenewMonths", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMoney, "SetAutoRenewMoney", 2, ".i"); - SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMoney, "GetAutoRenewMoney", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::IsMine, "IsMine", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetName, "SetName", 2, ".."); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetName, "GetName", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentName, "SetPresidentName", 2, ".."); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentName, "GetPresidentName", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentGender, "SetPresidentGender", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentGender, "GetPresidentGender", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetLoanAmount, "SetLoanAmount", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetMinimumLoanAmount, "SetMinimumLoanAmount", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanAmount, "GetLoanAmount", 1, "."); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetMaxLoanAmount, "GetMaxLoanAmount", 1, "."); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanInterval, "GetLoanInterval", 1, "."); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetBankBalance, "GetBankBalance", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyIncome, "GetQuarterlyIncome", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyExpenses, "GetQuarterlyExpenses", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyCargoDelivered, "GetQuarterlyCargoDelivered", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyPerformanceRating, "GetQuarterlyPerformanceRating", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyCompanyValue, "GetQuarterlyCompanyValue", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::BuildCompanyHQ, "BuildCompanyHQ", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetCompanyHQ, "GetCompanyHQ", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewStatus, "SetAutoRenewStatus", 2, ".b"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewStatus, "GetAutoRenewStatus", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMonths, "SetAutoRenewMonths", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMonths, "GetAutoRenewMonths", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMoney, "SetAutoRenewMoney", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMoney, "GetAutoRenewMoney", 2, ".i"); SQAICompany.PostRegister(engine); } Index: src/ai/api/ai_station.hpp =================================================================== --- src/ai/api/ai_station.hpp (revision 22696) +++ src/ai/api/ai_station.hpp (working copy) @@ -117,7 +117,8 @@ /** * Find out if this station is within the rating influence of a town. - * Stations within the radius influence the rating of the town. + * The service quality of stations within the radius influences + * the rating of the town. * @param station_id The station to check. * @param town_id The town to check. * @return True if the tile is within the rating influence of the town. Index: src/ai/api/ai_tile.cpp =================================================================== --- src/ai/api/ai_tile.cpp (revision 22696) +++ src/ai/api/ai_tile.cpp (working copy) @@ -267,6 +267,13 @@ return AITown::IsWithinTownInfluence(town_id, tile); } +/* static */ TownID AITile::GetTownAuthority(TileIndex tile) +{ + if (!::IsValidTile(tile)) return false; + + return ::ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority)->index; +} + /* static */ TownID AITile::GetClosestTown(TileIndex tile) { if (!::IsValidTile(tile)) return INVALID_TOWN; Index: src/ai/api/ai_tile.hpp.sq =================================================================== --- src/ai/api/ai_tile.hpp.sq (revision 22696) +++ src/ai/api/ai_tile.hpp.sq (working copy) @@ -125,6 +125,7 @@ SQAITile.DefSQStaticMethod(engine, &AITile::PlantTree, "PlantTree", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &AITile::PlantTreeRectangle, "PlantTreeRectangle", 4, ".iii"); SQAITile.DefSQStaticMethod(engine, &AITile::IsWithinTownInfluence, "IsWithinTownInfluence", 3, ".ii"); + SQAITile.DefSQStaticMethod(engine, &AITile::GetTownAuthority, "GetTownAuthority", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &AITile::GetClosestTown, "GetClosestTown", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &AITile::GetBuildCost, "GetBuildCost", 2, ".i");