WormAIDev  Worm SELF_VERSION
 All Classes Files Functions Variables Pages
Public Member Functions | Public Attributes | List of all members
WormAI Class Reference

Define the main class of our AI WormAI. More...

Public Member Functions

function GetAuthor ()
function GetName ()
function GetShortName ()
function GetDescription ()
function GetVersion ()
function GetDate ()
function MinVersionToLoad ()
function CreateInstance ()
function GetAPIVersion ()
function GetURL ()
function GetSettings ()
constructor WormAI ()
 Create an instance of WormAI.
Implementation of base class functions
function Start ()
 Start the main loop of WormAI.
function Save ()
 Save all data that WormAI uses.
function Load (version, data)
 Load previously saved information.
Utility functions
function decToHex (number)
 Convert a number to its hexadecimal string representation.
function WriteTile (tile)
 Writes a tile as a hexadecimal number.
function GetAircraftTypeAsText (airplane_id)
 Returns aircraft type as text.
function GetAgeString (AgeInDays)
 Rough year/month age estimation string where year = 365 days and month = 30 days.
function SafeAddRectangle (list, tile, radius)
 Add a rectangular area to an AITileList containing tiles that are within /radius/ tiles from the center tile, taking the edges of the map into account.
Debugging output functions
function DebugListTownsUsed ()
 List of towns used and stations near those towns.
function DebugListTowns (towns_list)
 List all towns in the supplied list.
function DebugListRoutes ()
 List all routes: per route all stations and all vehicles on that route with relevant info.
function DebugListRoute (route)
 List all route info in the supplied list.
function DebugListRouteInfo ()
 List all our air routes.
function DebugListVehiclesSentToDepot ()
 List all vehicles that were sent to depot to be sold.
function DebugVehicleInfo (veh)
 Show info about the specified vehicle.
Money related functions
function HasMoney (money)
 Check if we have enough money (via loan and on bank).
function GetMoney (money)
 Get the amount of money requested, loan if needed.
Airport handling functions
function RemoveAirport (tile)
 Remove airport at specified tile.
function GetOptimalAvailableAirportType ()
 Get the optimal type of airport that is available.
function GetAiportTileOtherEndOfRoute (town_id, station_tile)
 Get tile of airport at the other end of the route.
function UpdateAirportTileInfo (town_idx, station_id, old_tile)
 Update the airport station tile info in our lists after upgrading airport.
function ReplaceAirportTileInfo (old_town_idx, old_tile, new_tile, other_end_of_route_tile)
 Replace the airport town and station tile info in our lists and update orders.
function CheckForAirportsNeedingToBeUpgraded ()
 Checks all airports to see if they should be upgraded.
function BuildAirportRoute ()
 Build an airport route.
function FindSuitableAirportSpot (airport_type, center_tile)
 Find a suitable spot for an airport, walking all towns hoping to find one.
function SellAirports (airport_1_tile, airport_2_tile)
 Sells the airports at tile_1 and tile_2.
Order handling
function IsTownFirstOrder (town_id)
 Check whether the airport at a certain town is used as the first order of a route.
function ReplaceOrders (veh, is_first_order, breakdowns, station_tile)
 Replace orders of a vehicle, either the first station or last station is replaced.
function InsertGotoStationOrder (veh, order_pos, station_tile)
 Insert go to station order for airport at station_tile.
function InsertMaintenanceOrder (veh, order_pos, station_tile)
 Insert Maintenance order for airport at station_tile.
function ReplaceGotoStationOrder (veh, order_pos, station_tile)
 Replace go to station order for airport at station_tile.
Aircraft handling
function GetMaximumDistance (engine)
 Get the maximum distance this aircraft can safely fly without landing.
function BuildAircraft (tile_1, tile_2, start_tile)
 Build an aircraft with orders from tile_1 to tile_2.
function SendAllVehiclesOfStationToDepot (station_id, sell_reason)
 Send all vehicles belonging to a station to depot for selling.
function SendToDepotForSelling (vehicle, sell_reason)
 Send a vehicle to depot to be sold when it arrives.
function RemoveVehicleFromLists (vehicle)
 Remove a vehicle from our route lists and to depot list.
function SellVehicleInDepot (vehicle)
 Sell the vehicle provided it's in depot.
function SellVehiclesInDepot ()
 Sell all vehicles in depot that are marked to be sold.
function CanBuildAircraft ()
 Checks if we can build an aircraft and if not outputs a string with the reason.
Task related functions
function ManageVehicleRenewal (age_limit)
 Check all vehicles for being old or needing upgrading to a newer type.
function CheckAirportsWithoutVehicles ()
 Check for airports that don't have any vehicles anymore and delete them.
function ManageAirRoutes ()
 

Manage air routes:


function HandleEvents ()
 Callback that handles events.
function EvaluateAircraft ()
 Task that evaluates all available aircraft for how suited they are for our purposes.
General functions
function GetTownFromStationTile (st_tile)
 Get Town id in our towns_used list based on tile of station built near it.
function IsValidStationFromTile (st_tile)
 Determine if a station is valid based on the station tile.
function IsValidFirstStation (veh)
 Determine if the first station of the route of a vehicle is valid.
function IsValidLastStation (veh)
 Determine if the last station of the route of a vehicle is valid.
Valuator functions
function GetCostFactor (engine, costfactor_list)
 Valuator function to get the cost factor of an aircraft.
Initialization functions
function InitSettings ()
 InitSettings initializes a number of required variables based on the game settings of our AI.
function Welcome ()
 Welcome says hello to the user and prints out the current AI gamesettings.

Public Attributes

 name = null
 towns_used = null
 town id, airport station tile
 route_1 = null
 vehicle id, station_tile of first station in an order
 route_2 = null
 vehicle id, station_tile of last station in an order
 distance_of_route = {}
 vehicle id, distance between first/last order stations
 vehicle_to_depot = {}
 vehicle id, boolean always true currently
 ai_speed_factor = 1
 speed factor for our ai actions (1=fast..3=slow)
 delay_build_airport_route = 0
 passenger_cargo_id = -1
 loaded_from_save = false
 engine_usefulness = null
 acceptance_limit = 0
 Starting limit for passenger acceptance for airport finding.
 aircraft_disabled_shown = 0
 Has the aircraft disabled in game settings message been shown (1) or not (0).
 aircraft_max0_shown = 0
 Has the max aircraft is 0 in game settings message been shown.

Detailed Description

Define the main class of our AI WormAI.

Constructor & Destructor Documentation

constructor WormAI::WormAI ( )
inline

Create an instance of WormAI.

Member Function Documentation

function WormAI::BuildAircraft ( tile_1  ,
tile_2  ,
start_tile   
)

Build an aircraft with orders from tile_1 to tile_2.

The best available aircraft will be bought.

Parameters
tile_1Airport tile that should be used as the first order.
tile_2Airport tile that should be used as the last order.
start_tileThe Airport tile where the airplane should start. If this is 0 then it will start at tile_1. To let it start at tile_2 use the same value as tile_2.
function WormAI::BuildAirportRoute ( )

Build an airport route.

Find 2 cities that are big enough and try to build airport in both cities. Then we can build an aircraft and try to make some money. We limit our amount of airports to max aircraft / AIRPORT_LIMIT_FACTOR * 2. (2 airports for a route, and AIRPORT_LIMIT_FACTOR planes per route)

function WormAI::CanBuildAircraft ( )

Checks if we can build an aircraft and if not outputs a string with the reason.

Returns
true if we can build an aircraft, otherwise false.
function WormAI::CheckForAirportsNeedingToBeUpgraded ( )

Checks all airports to see if they should be upgraded.

If they can it tries to upgrade the airport. If it fails after removing the old airport it will first try to replace it with another airport at another spot. If that also fails it will send the aircraft on the now crippled route to depot to be sold. After all aircraft are sold the remaining airport will be sold too.

Todo:
Maybe set a max amount of upgrades at one time?
Todo:
Maybe order by highest amount of waiting cargo to choose the station to be converted first.
function WormAI::DebugListRoute ( route  )

List all route info in the supplied list.

function WormAI::DebugListRouteInfo ( )

List all our air routes.

function WormAI::DebugListRoutes ( )

List all routes: per route all stations and all vehicles on that route with relevant info.

function WormAI::DebugListTowns ( towns_list  )

List all towns in the supplied list.

function WormAI::DebugListTownsUsed ( )

List of towns used and stations near those towns.

function WormAI::DebugListVehiclesSentToDepot ( )

List all vehicles that were sent to depot to be sold.

function WormAI::DebugVehicleInfo ( veh  )

Show info about the specified vehicle.

It's start and end town and distance between them.

Parameters
veh= Vehicle id
function WormAI::decToHex ( number  )

Convert a number to its hexadecimal string representation.

Parameters
numberThe number to convert.
Returns
The hexadecimal string.
Note
Since it seems that Squirrel string library (with format and regexp) is not enabled in OpenTTD I used the following function to get a hexadecimal string. Source: http://forum.iv-multiplayer.com/index.php?topic=914.60
function WormAI::EvaluateAircraft ( )

Task that evaluates all available aircraft for how suited they are for our purposes.

The suitedness values for aircraft which we can use are saved in engine_usefulness.

function WormAI::FindSuitableAirportSpot ( airport_type  ,
center_tile   
)

Find a suitable spot for an airport, walking all towns hoping to find one.

When a town is used, it is marked as such and not re-used.

Parameters
airport_typeThe type of airport we want to build.
center_tileThe tile around which we will search for a spot for the airport.
Returns
tile where we can build the airport or an error code.
Todo:
In early games with low maximum speeds we may need to adjust maximum and maybe even minimum distance to get a round trip within a year.
function WormAI::GetAgeString ( AgeInDays  )

Rough year/month age estimation string where year = 365 days and month = 30 days.

Parameters
AgeInDaysThe age in days.
Returns
Text string saying how many years and months.
function WormAI::GetAiportTileOtherEndOfRoute ( town_id  ,
station_tile   
)

Get tile of airport at the other end of the route.

Parameters
town_idTown id of town at this end of route.
station_tiletile of station at this end of route.
Returns
tile of airport or -1 if not found.
function WormAI::GetAircraftTypeAsText ( airplane_id  )

Returns aircraft type as text.

Parameters
airplane_idThe id of the airplane
Returns
The airplane type as a text string
function WormAI::GetCostFactor ( engine  ,
costfactor_list   
)

Valuator function to get the cost factor of an aircraft.

Parameters
engineThe engine id of the aircraft.
costfactor_listThe list (usually engine_usefulness) that holds the cost factors.
Returns
The cost factor.
function WormAI::GetMaximumDistance ( engine  )

Get the maximum distance this aircraft can safely fly without landing.

Parameters
engineThe engine id for which we want to know the maximum distance.
Returns
The maximum distance.
function WormAI::GetMoney ( money  )

Get the amount of money requested, loan if needed.

Parameters
moneyThe amount of money we need.
Returns
Boolean saying if we got the needed money or not.
function WormAI::GetOptimalAvailableAirportType ( )

Get the optimal type of airport that is available.

Note
For now we only choose between small, large and metropolitan. Larger ones would only be useful for very high cargo/passenger amounts with many airplanes.
Returns
The optimal AirportType or null if no suitable airport is available.
function WormAI::GetTownFromStationTile ( st_tile  )

Get Town id in our towns_used list based on tile of station built near it.

Returns
id of town or null if not found.
function WormAI::HandleEvents ( )

Callback that handles events.

Currently only AIEvent.ET_VEHICLE_CRASHED is handled.

function WormAI::HasMoney ( money  )

Check if we have enough money (via loan and on bank).

Parameters
moneyThe amount of money we need.
Returns
Boolean saying if we do or don't have enough money.
function WormAI::InsertGotoStationOrder ( veh  ,
order_pos  ,
station_tile   
)

Insert go to station order for airport at station_tile.

Parameters
vehVehicle to set the order for.
order_posPosition in the order list where order should be inserted.
station_tileTile for the Airport of the to be inserted order.
Returns
true if order got inserted; false in case of failure to insert.
function WormAI::InsertMaintenanceOrder ( veh  ,
order_pos  ,
station_tile   
)

Insert Maintenance order for airport at station_tile.

Parameters
vehVehicle to set the order for
order_posPosition in the order list where order should be inserted
station_tileTile for the Airport (not the hangar) of the order to be inserted.
Returns
true if order got inserted; false in case of failure to insert.
function WormAI::IsTownFirstOrder ( town_id  )

Check whether the airport at a certain town is used as the first order of a route.

Parameters
town_idThe id of the town to check if it's the first order.
Returns
true if it is the first order, else false if it is the last order.
function WormAI::IsValidFirstStation ( veh  )

Determine if the first station of the route of a vehicle is valid.

Parameters
vehVehicle to determine the validity of the station for.
Returns
true if station is valid, otherwise false.
function WormAI::IsValidLastStation ( veh  )

Determine if the last station of the route of a vehicle is valid.

Parameters
vehVehicle to determine the validity of the station for.
Returns
true if station is valid, otherwise false.
function WormAI::IsValidStationFromTile ( st_tile  )

Determine if a station is valid based on the station tile.

Parameters
st_tileThe tile of the station.
Returns
true if station is valid, otherwise false.
function WormAI::Load ( version  ,
data   
)

Load previously saved information.

Parameters
versionWhich version of our AI saved the information.
dataThe data that was saved.
Todo:
load data in temp values then later unpack it because load has limited time available
function WormAI::ManageAirRoutes ( )

Manage air routes:

  • Checks for airports without vehicles.
  • Send unprofitable aircraft to depot for selling.
  • Add aircraft to routes that have a lot of waiting cargo.
    Returns
    Error code if something went wrong or ok.
    Todo:
    Refactor the parts of this function into separate functions.
  • Checks for airports without vehicles.
  • Send unprofitable aircraft to depot for selling.
  • Add aircraft to routes that have a lot of waiting cargo.
    Returns
    Error code if something went wrong or ok.
    Todo:
    Refactor the parts of this function into separate functions.
Todo:
  1. Make groups for each route
  2. When we have max aircraft/airports:
    • Evaluate total profit per group, remove bad groups/airports or reduce # planes
    • Favor bigger/faster aircraft over cost more when high amount waiting passengers
  3. Upgrade aircraft when they are old or when newer ones would be more profitable
  4. Upgrade airports only when it's needed
  5. Check reliability when breakdowns are on
Todo:
When maintenance costs are on we should set low profit limit too at least the yearly costs.
Todo:
Don't sell all aircraft from the same route all at once, try selling 1 per year?
function WormAI::ManageVehicleRenewal ( age_limit  )

Check all vehicles for being old or needing upgrading to a newer type.

It will send all vehicles that are non optimal to depot for selling.

Parameters
age_limitThe days left age limit below which we send to depot for selling.
function WormAI::RemoveAirport ( tile  )

Remove airport at specified tile.

If removing fails then give a warning.

Note
Note that using Sleep(x) here and trying again doesn't work for some reason (removing still fails)
Parameters
tileThe tile of the airport that should be removed.
function WormAI::RemoveVehicleFromLists ( vehicle  )

Remove a vehicle from our route lists and to depot list.

Note
If this is the last vehicle serving a certain route then after selling the vehicle we will also sell the airports.
Parameters
vehicleThe vehicle id that should be removed from the lists.
function WormAI::ReplaceAirportTileInfo ( old_town_idx  ,
old_tile  ,
new_tile  ,
other_end_of_route_tile   
)

Replace the airport town and station tile info in our lists and update orders.

Parameters
old_town_idxIndex into towns_used list of town/station being replaced
old_tileThe old tile for the airport being replaced.
new_tileThe tile of the new airport.
other_end_of_route_tileTile of other end of route (needed to access vehicles of route)
function WormAI::ReplaceGotoStationOrder ( veh  ,
order_pos  ,
station_tile   
)

Replace go to station order for airport at station_tile.

Parameters
vehVehicle to set the order for.
order_posPosition in the order list where order should be inserted.
station_tileTile for the Airport of the new to be inserted order.
function WormAI::ReplaceOrders ( veh  ,
is_first_order  ,
breakdowns  ,
station_tile   
)

Replace orders of a vehicle, either the first station or last station is replaced.

Parameters
vehVehicle to replace the orders for.
is_first_orderWhether to replace the orders for the first or last station.
breakdownsWhether breakdowns are on; if they are on we will add maintenance orders.
station_tileTile of station for the new order.
function WormAI::SafeAddRectangle ( list  ,
tile  ,
radius   
)

Add a rectangular area to an AITileList containing tiles that are within /radius/ tiles from the center tile, taking the edges of the map into account.

Note
This function was taken from Rondje.
Parameters
listThe AITileList in which the valid tiles will be returned.
tileThe center tile.
radiusThe radius of tiles.
function WormAI::Save ( )

Save all data that WormAI uses.

Returns
The data to be saved.
function WormAI::SellAirports ( airport_1_tile  ,
airport_2_tile   
)

Sells the airports at tile_1 and tile_2.

Removes towns from towns_used list too.

Parameters
airport_1_tileThe tile of the first airport to remove
airport_2_tileThe tile of the other airport to remove
Note
The airport tiles are allowed to be invalid. Removal will be ignored in that case but the towns_used will be updated.
Todo:
Make a list of removed airports/tiles so that we don't build a new airport in the same spot soon after we have removed it!
function WormAI::SellVehicleInDepot ( vehicle  )

Sell the vehicle provided it's in depot.

If it's not yet in depot it will fail silently.

Parameters
vehicleThe id of the vehicle that should be sold.
function WormAI::SendAllVehiclesOfStationToDepot ( station_id  ,
sell_reason   
)

Send all vehicles belonging to a station to depot for selling.

Parameters
station_idThe id of the station.
sell_reasonThe reason for selling. Valid reasons are VEH_OLD_AGE, VEH_LOW_PROFIT, VEH_STATION_REMOVAL
function WormAI::SendToDepotForSelling ( vehicle  ,
sell_reason   
)

Send a vehicle to depot to be sold when it arrives.

Parameters
vehicleThe vehicle id of the vehicle to be sold.
sell_reasonThe reason for selling. Valid reasons are VEH_OLD_AGE, VEH_LOW_PROFIT, VEH_STATION_REMOVAL
function WormAI::UpdateAirportTileInfo ( town_idx  ,
station_id  ,
old_tile   
)

Update the airport station tile info in our lists after upgrading airport.

Expects a valid station_id.

Parameters
town_idxIndex into towns_used list.
station_idId of the Airport station that got upgraded.
old_tileThe old tile for the airport before upgrading.
function WormAI::WriteTile ( tile  )

Writes a tile as a hexadecimal number.

Parameters
tileThe tile to convert.
Returns
The hexadecimal string.

The documentation for this class was generated from the following files: