![]() |
Freeciv21
Develop your civilization from humble roots to a global empire
|
#include <QDateTime>#include <cstdlib>#include <cstring>#include "bitvector.h"#include "effects.h"#include "extras.h"#include "fcintl.h"#include "hand_gen.h"#include "log.h"#include "path_finder.h"#include "rand.h"#include "shared.h"#include "support.h"#include "base.h"#include "city.h"#include "combat.h"#include "events.h"#include "game.h"#include "government.h"#include "idex.h"#include "map.h"#include "movement.h"#include "packets.h"#include "player.h"#include "research.h"#include "terrain.h"#include "unit.h"#include "unit_utils.h"#include "unitlist.h"#include "unittype.h"#include "path_finding.h"#include "pf_tools.h"#include "script_server.h"#include "actiontools.h"#include "aiiface.h"#include "citytools.h"#include "cityturn.h"#include "gamehand.h"#include "maphand.h"#include "notify.h"#include "plrhand.h"#include "sernet.h"#include "srv_main.h"#include "techtools.h"#include "unithand.h"#include "advgoto.h"#include "autoexplorer.h"#include "autosettlers.h"#include "handicaps.h"#include "unittools.h"#include "speclist.h"Go to the source code of this file.
Classes | |
| struct | unit_move_data |
| struct | autoattack_prob |
Macros | |
| #define | SPECLIST_TAG unit_move_data |
| #define | unit_move_data_list_iterate(_plist, _pdata) TYPED_LIST_ITERATE(struct unit_move_data, _plist, _pdata) |
| #define | unit_move_data_list_iterate_end LIST_ITERATE_END |
| #define | unit_move_data_list_iterate_rev(_plist, _pdata) TYPED_LIST_ITERATE_REV(struct unit_move_data, _plist, _pdata) |
| #define | unit_move_data_list_iterate_rev_end LIST_ITERATE_REV_END |
| #define | SPECLIST_TAG autoattack_prob |
| #define | SPECLIST_TYPE struct autoattack_prob |
| #define | autoattack_prob_list_iterate_safe(autoattack_prob_list, _aap_, _unit_) |
| #define | autoattack_prob_list_iterate_safe_end LIST_ITERATE_END |
Functions | |
| static void | unit_restore_movepoints (struct player *pplayer, struct unit *punit) |
| Move points are trivial, only modifiers to the base value is if it's sea units and the player has certain wonders/techs. More... | |
| static void | update_unit_activity (struct unit *punit, time_t now) |
| Progress settlers in their current tasks, and units that are pillaging. More... | |
| static bool | try_to_save_unit (struct unit *punit, const struct unit_type *pttype, bool helpless, bool teleporting, const struct city *pexclcity) |
| Determine if it is possible to save a given unit, and if so, save them. More... | |
| static void | wakeup_neighbor_sentries (struct unit *punit) |
| Will wake up any neighboring enemy sentry units or patrolling units. More... | |
| static void | do_upgrade_effects (struct player *pplayer) |
| Do unit auto-upgrades to players with the EFT_UNIT_UPGRADE effect (traditionally from Leonardo's Workshop). More... | |
| static bool | maybe_cancel_patrol_due_to_enemy (struct unit *punit) |
| Maybe cancel the patrol as there is an enemy near. More... | |
| static bool | maybe_become_veteran_real (struct unit *punit, bool settler) |
| After a battle, after diplomatic aggression and after surviving trireme loss chance, this routine is called to decide whether or not the unit should become more experienced. More... | |
| static void | unit_transport_load_tp_status (struct unit *punit, struct unit *ptrans, bool force) |
| Load unit to transport, send transport's loaded status to everyone. More... | |
| static void | wipe_unit_full (struct unit *punit, bool transported, enum unit_loss_reason reason, struct player *killer) |
| Remove the unit, and passengers if it is a carrying any. More... | |
| struct unit_type * | find_a_unit_type (enum unit_role_id role, enum unit_role_id role_tech) |
| Returns a unit type that matches the role_tech or role roles. More... | |
| bool | maybe_make_veteran (struct unit *punit) |
| Unit has a chance to become veteran. More... | |
| void | unit_versus_unit (struct unit *attacker, struct unit *defender, int *att_hp, int *def_hp) |
| This is the basic unit versus unit combat routine. More... | |
| void | unit_bombs_unit (struct unit *attacker, struct unit *defender, int *att_hp, int *def_hp) |
| This is the basic unit versus unit classic bombardment routine. More... | |
| void | combat_veterans (struct unit *attacker, struct unit *defender) |
| Maybe make either side of combat veteran. More... | |
| static bool | converting_fuel_rescue (struct unit *punit) |
| Return true if unit is about to finish converting to a unittype with more/no fuel, rescuing it from imminent death. More... | |
| void | player_restore_units (struct player *pplayer) |
| void | update_unit_activities (struct player *pplayer) |
| Iterate through all units and update them. More... | |
| void | execute_unit_orders (struct player *pplayer) |
| Iterate through all units and execute their orders. More... | |
| void | finalize_unit_phase_beginning (struct player *pplayer) |
| Iterate through all units and remember their current activities. More... | |
| static int | total_activity (struct tile *ptile, enum unit_activity act, struct extra_type *tgt) |
| Calculate the total amount of activity performed by all units on a tile for a given task and target. More... | |
| static bool | total_activity_done (struct tile *ptile, enum unit_activity act, struct extra_type *tgt) |
| Check the total amount of activity performed by all units on a tile for a given task. More... | |
| void | notify_unit_experience (struct unit *punit) |
| Common notification for all experience levels. More... | |
| static void | unit_convert (struct unit *punit) |
| Convert a single unit to another type. More... | |
| void | unit_activities_cancel_all_illegal (const struct tile *ptile) |
| Cancel all illegal activities done by units at the specified tile. More... | |
| void | unit_activities_cancel_all_illegal_area (const struct tile *ptile) |
| Cancel all illegal activities done by units at the specified tile, and surrounding tiles. More... | |
| static void | unit_activity_complete (struct unit *punit) |
| Progress settlers in their current tasks, and units that is pillaging. More... | |
| void | finish_unit_wait (struct unit *punit, int activity_count) |
| Finish activity of a unit that was deferred by unitwaittime. More... | |
| void | unit_forget_last_activity (struct unit *punit) |
| Forget the unit's last activity so that it can't be resumed. More... | |
| bool | unit_activity_needs_target_from_client (enum unit_activity activity) |
| Return TRUE iff activity requires some sort of target to be specified by the client. More... | |
| void | unit_assign_specific_activity_target (struct unit *punit, enum unit_activity *activity, struct extra_type **target) |
| For some activities (currently only pillaging), the precise target can be assigned by the server rather than explicitly requested by the client. More... | |
| static bool | find_a_good_partisan_spot (struct tile *pcenter, struct player *powner, struct unit_type *u_type, int sq_radius, struct tile **dst_tile) |
| Find place to place partisans. More... | |
| void | place_partisans (struct tile *pcenter, struct player *powner, int count, int sq_radius) |
| Place partisans for powner around pcenter (normally around a city). More... | |
| bool | teleport_unit_to_city (struct unit *punit, struct city *pcity, int move_cost, bool verbose) |
| Teleport punit to city at cost specified. More... | |
| void | bounce_unit (struct unit *punit, bool verbose, bounce_reason reason, int max_distance) |
| Move or remove a unit due to stack conflicts. More... | |
| static void | throw_units_from_illegal_cities (struct player *pplayer, bool verbose) |
| Throw pplayer's units from non allied cities. More... | |
| static void | resolve_stack_conflicts (struct player *pplayer, struct player *aplayer, bool verbose) |
| For each pplayer's unit, check if we stack illegally, if so, bounce both players' units. More... | |
| void | resolve_unit_stacks (struct player *pplayer, struct player *aplayer, bool verbose) |
| When in civil war or an alliance breaks there will potentially be units from both sides coexisting on the same squares. More... | |
| struct unit_list * | get_units_seen_via_ally (const struct player *pplayer, const struct player *aplayer) |
| Returns the list of the units seen by 'pplayer' potentially seen only thanks to an alliance with 'aplayer'. More... | |
| void | remove_allied_visibility (struct player *pplayer, struct player *aplayer, const struct unit_list *seen_units) |
| When two players cancel an alliance, a lot of units that were visible may no longer be visible (this includes units in transporters and cities). More... | |
| void | give_allied_visibility (struct player *pplayer, struct player *aplayer) |
| Refresh units visibility of 'aplayer' for 'pplayer' after alliance have been contracted. More... | |
| bool | is_airunit_refuel_point (const struct tile *ptile, const struct player *pplayer, const struct unit *punit) |
| Can unit refuel on tile. More... | |
| void | transform_unit (struct unit *punit, const struct unit_type *to_unit, bool is_free) |
| Really transforms a single unit to another type. More... | |
| struct unit * | create_unit (struct player *pplayer, struct tile *ptile, const struct unit_type *type, int veteran_level, int homecity_id, int moves_left) |
| Wrapper of the below. More... | |
| void | unit_get_goods (struct unit *punit) |
| Set carried goods for unit. More... | |
| struct unit * | create_unit_full (struct player *pplayer, struct tile *ptile, const struct unit_type *type, int veteran_level, int homecity_id, int moves_left, int hp_left, struct unit *ptrans) |
| Creates a unit, and set it's initial values, and put it into the right lists. More... | |
| void | unit_set_removal_callback (struct unit *punit, void(*callback)(struct unit *punit)) |
| Set the call back to run when the server removes the unit. More... | |
| void | unit_unset_removal_callback (struct unit *punit) |
| Remove the call back so nothing runs when the server removes the unit. More... | |
| static void | server_remove_unit_full (struct unit *punit, bool transported, enum unit_loss_reason reason) |
| We remove the unit and see if it's disappearance has affected the homecity and the city it was in. More... | |
| static void | server_remove_unit (struct unit *punit, enum unit_loss_reason reason) |
| We remove the unit and see if it's disappearance has affected the homecity and the city it was in. More... | |
| static void | unit_lost_with_transport (const struct player *pplayer, struct unit *pcargo, const struct unit_type *ptransport, struct player *killer) |
| Handle units destroyed when their transport is destroyed. More... | |
| void | wipe_unit (struct unit *punit, enum unit_loss_reason reason, struct player *killer) |
| Remove the unit, and passengers if it is a carrying any. More... | |
| struct unit * | unit_change_owner (struct unit *punit, struct player *pplayer, int homecity, enum unit_loss_reason reason) |
| We don't really change owner of the unit, but create completely new unit as its copy. More... | |
| void | kill_unit (struct unit *pkiller, struct unit *punit, bool vet) |
| Called when one unit kills another in combat (this function is only called in one place). More... | |
| void | package_unit (struct unit *punit, struct packet_unit_info *packet) |
| Package a unit_info packet. More... | |
| void | package_short_unit (struct unit *punit, struct packet_unit_short_info *packet, enum unit_info_use packet_use, int info_city_id) |
| Package a short_unit_info packet. More... | |
| void | unit_goes_out_of_sight (struct player *pplayer, const unit *punit) |
| Handle situation where unit goes out of player sight. More... | |
| void | send_unit_info (struct conn_list *dest, struct unit *punit) |
| Send the unit to the players who need the info. More... | |
| void | send_all_known_units (struct conn_list *dest) |
| For each specified connections, send information about all the units known to that player/conn. More... | |
| static void | do_nuke_tile (struct player *pplayer, struct tile *ptile) |
| Nuke a square: 1) remove all units on the square, and 2) halve the size of the city on the square. More... | |
| void | do_nuclear_explosion (struct player *pplayer, struct tile *ptile) |
| Nuke all the squares in a 3x3 square around the center of the explosion pplayer is the player that caused the explosion. More... | |
| bool | do_airline (struct unit *punit, struct city *pdest_city, const struct action *paction) |
| Go by airline, if both cities have an airport and neither has been used this turn the unit will be transported by it and have its moves set to 0. More... | |
| void | do_explore (struct unit *punit) |
| Autoexplore with unit. More... | |
| bool | do_paradrop (struct unit *punit, struct tile *ptile, const struct action *paction) |
| Returns whether the drop was made or not. More... | |
| static bool | hut_get_limited (struct unit *punit) |
| Give 25 Gold or kill the unit. More... | |
| static void | unit_enter_hut (struct unit *punit) |
| Due to the effects in the scripted hut behavior can not be predicted, unit_enter_hut returns nothing. More... | |
| void | unit_transport_load_send (struct unit *punit, struct unit *ptrans) |
| Put the unit onto the transporter, and tell everyone. More... | |
| void | unit_transport_unload_send (struct unit *punit) |
| Pull the unit off of the transporter, and tell everyone. More... | |
| static void | autoattack_prob_free (struct autoattack_prob *prob) |
| Used when unit_survive_autoattack()'s autoattack_prob_list autoattack frees its items. More... | |
| static int | compare_units (const struct autoattack_prob *const *p1, const struct autoattack_prob *const *q1) |
| This function is passed to autoattack_prob_list_sort() to sort a list of units and action probabilities according to their win chance against the autoattack target, modified by transportation relationships. More... | |
| static bool | unit_survive_autoattack (struct unit *punit) |
| Check if unit survives enemy autoattacks. More... | |
| static void | cancel_orders (struct unit *punit, const char *dbg_msg) |
| Cancel orders for the unit. More... | |
| static bool | unit_move_consequences (struct unit *punit, struct tile *src_tile, struct tile *dst_tile, bool passenger, bool conquer_city_allowed) |
| Does: 1) updates the unit's homecity and the city it enters/leaves (the city's happiness varies). More... | |
| static void | check_unit_activity (struct unit *punit) |
| Check if the units activity is legal for a move , and reset it if it isn't. More... | |
| static struct unit_move_data * | unit_move_data (struct unit *punit, struct tile *psrctile, struct tile *pdesttile) |
| Create a new unit move data, or use previous one if available. More... | |
| static void | unit_move_data_unref (struct unit_move_data *pdata) |
| Decrease the reference counter and destroy if needed. More... | |
| bool | unit_move (struct unit *punit, struct tile *pdesttile, int move_cost, struct unit *embark_to, bool find_embark_target, bool conquer_city_allowed) |
| Moves a unit. More... | |
| static bool | maybe_cancel_goto_due_to_enemy (struct unit *punit, struct tile *ptile) |
| Maybe cancel the goto if there is an enemy in the way. More... | |
| static bool | player_is_watching (struct unit *punit, const bool fresh) |
| Returns TRUE iff it is reasonable to assume that the player is wathing the unit. More... | |
| bool | execute_orders (struct unit *punit, const bool fresh) |
| Executes a unit's orders stored in punit->orders. More... | |
| int | get_unit_vision_at (struct unit *punit, const struct tile *ptile, enum vision_layer vlayer) |
| Return the vision the unit will have at the given tile. More... | |
| void | unit_refresh_vision (struct unit *punit) |
| Refresh the unit's vision. More... | |
| void | unit_list_refresh_vision (struct unit_list *punitlist) |
| Refresh the vision of all units in the list - see unit_refresh_vision. More... | |
| bool | unit_can_do_action_now (const struct unit *punit) |
| Used to implement the game rule controlled by the unitwaittime setting. More... | |
| void | unit_did_action (struct unit *punit) |
| Mark a unit as having done something at the current time. More... | |
| bool | unit_can_be_retired (struct unit *punit) |
| Units (usually barbarian units) may disband spontaneously if they are far from any enemy units or cities. More... | |
| bool | unit_order_list_is_sane (int length, const struct unit_order *orders) |
| Returns TRUE iff the unit order array is sane. More... | |
| struct unit_order * | create_unit_orders (int length, const struct unit_order *orders) |
| Sanity-check unit order arrays from a packet and create a unit_order array from their contents if valid. More... | |
| #define autoattack_prob_list_iterate_safe | ( | autoattack_prob_list, | |
| _aap_, | |||
| _unit_ | |||
| ) |
Definition at line 115 of file unittools.cpp.
| #define autoattack_prob_list_iterate_safe_end LIST_ITERATE_END |
Definition at line 124 of file unittools.cpp.
| #define SPECLIST_TAG unit_move_data |
Definition at line 111 of file unittools.cpp.
| #define SPECLIST_TAG autoattack_prob |
Definition at line 111 of file unittools.cpp.
| #define SPECLIST_TYPE struct autoattack_prob |
Definition at line 112 of file unittools.cpp.
| #define unit_move_data_list_iterate | ( | _plist, | |
| _pdata | |||
| ) | TYPED_LIST_ITERATE(struct unit_move_data, _plist, _pdata) |
Definition at line 95 of file unittools.cpp.
| #define unit_move_data_list_iterate_end LIST_ITERATE_END |
Definition at line 97 of file unittools.cpp.
| #define unit_move_data_list_iterate_rev | ( | _plist, | |
| _pdata | |||
| ) | TYPED_LIST_ITERATE_REV(struct unit_move_data, _plist, _pdata) |
Definition at line 98 of file unittools.cpp.
| #define unit_move_data_list_iterate_rev_end LIST_ITERATE_REV_END |
Definition at line 100 of file unittools.cpp.
|
static |
Used when unit_survive_autoattack()'s autoattack_prob_list autoattack frees its items.
Definition at line 3336 of file unittools.cpp.
Referenced by unit_survive_autoattack().
| void bounce_unit | ( | struct unit * | punit, |
| bool | verbose, | ||
| bounce_reason | reason, | ||
| int | max_distance | ||
| ) |
Move or remove a unit due to stack conflicts.
This function will try to find a random safe tile within a given distance of the unit's current tile and move the unit there. If no tiles are found, the unit is disbanded. If 'verbose' is true, a message is sent to the unit owner regarding what happened (the exact message depends on 'reason'). The maximum distance it 2 by default for backward compatibility.
Definition at line 1327 of file unittools.cpp.
Referenced by check_units_single_tile(), diplomat_bribe(), do_capture_units(), resolve_stack_conflicts(), sg_load_sanitycheck(), throw_units_from_illegal_cities(), transfer_city_units(), and transfer_unit().
|
static |
Cancel orders for the unit.
Definition at line 3525 of file unittools.cpp.
Referenced by execute_orders(), and wakeup_neighbor_sentries().
|
static |
Check if the units activity is legal for a move , and reset it if it isn't.
Definition at line 3740 of file unittools.cpp.
Referenced by unit_move_data().
Maybe make either side of combat veteran.
Definition at line 371 of file unittools.cpp.
Referenced by do_attack().
|
static |
This function is passed to autoattack_prob_list_sort() to sort a list of units and action probabilities according to their win chance against the autoattack target, modified by transportation relationships.
The reason for making sure that a cargo unit is ahead of its transporter(s) is to leave transports out of combat if at all possible. (The transport could be destroyed during combat.)
Definition at line 3350 of file unittools.cpp.
Referenced by unit_survive_autoattack().
|
static |
Return true if unit is about to finish converting to a unittype with more/no fuel, rescuing it from imminent death.
Definition at line 442 of file unittools.cpp.
Referenced by player_restore_units().
| struct unit* create_unit | ( | struct player * | pplayer, |
| struct tile * | ptile, | ||
| const struct unit_type * | type, | ||
| int | veteran_level, | ||
| int | homecity_id, | ||
| int | moves_left | ||
| ) |
Wrapper of the below.
Definition at line 1762 of file unittools.cpp.
Referenced by city_create_unit(), give_midgame_initial_units(), handle_edit_unit_create(), place_animal(), place_partisans(), place_starting_unit(), try_summon_barbarians(), and unleash_barbarians().
| struct unit* create_unit_full | ( | struct player * | pplayer, |
| struct tile * | ptile, | ||
| const struct unit_type * | type, | ||
| int | veteran_level, | ||
| int | homecity_id, | ||
| int | moves_left, | ||
| int | hp_left, | ||
| struct unit * | ptrans | ||
| ) |
Creates a unit, and set it's initial values, and put it into the right lists.
If moves_left is less than zero, unit will get max moves.
Definition at line 1789 of file unittools.cpp.
Referenced by api_edit_create_unit_full(), create_unit(), try_summon_barbarians(), and unit_change_owner().
| struct unit_order* create_unit_orders | ( | int | length, |
| const struct unit_order * | orders | ||
| ) |
Sanity-check unit order arrays from a packet and create a unit_order array from their contents if valid.
Definition at line 5119 of file unittools.cpp.
Referenced by handle_city_rally_point(), and handle_unit_orders().
Go by airline, if both cities have an airport and neither has been used this turn the unit will be transported by it and have its moves set to 0.
Definition at line 3018 of file unittools.cpp.
Referenced by unit_perform_action().
| void do_explore | ( | struct unit * | punit | ) |
Autoexplore with unit.
Definition at line 3047 of file unittools.cpp.
Referenced by handle_unit_server_side_agent_set(), and unit_activity_complete().
Nuke all the squares in a 3x3 square around the center of the explosion pplayer is the player that caused the explosion.
Definition at line 2999 of file unittools.cpp.
Referenced by spy_nuke_city(), and unit_nuke().
Nuke a square: 1) remove all units on the square, and 2) halve the size of the city on the square.
If it isn't a city square or an ocean square then with 50% chance add some fallout, then notify the client about the changes.
Definition at line 2892 of file unittools.cpp.
Referenced by do_nuclear_explosion().
Returns whether the drop was made or not.
Note that it also returns 1 in the case where the drop was succesful, but the unit was killed by barbarians in a hut.
Definition at line 3082 of file unittools.cpp.
Referenced by unit_perform_action().
|
static |
Do unit auto-upgrades to players with the EFT_UNIT_UPGRADE effect (traditionally from Leonardo's Workshop).
Definition at line 388 of file unittools.cpp.
Referenced by player_restore_units().
| bool execute_orders | ( | struct unit * | punit, |
| const bool | fresh | ||
| ) |
Executes a unit's orders stored in punit->orders.
The unit is put on idle if an action fails or if "patrol" is set and an enemy unit is encountered.
The return value will be TRUE if the unit lives, FALSE otherwise. (This function used to return a goto_result enumeration, declared in gotohand.h. But this enumeration was never checked by the caller and just lead to confusion. All the caller really needs to know is if the unit lived or died; everything else is handled internally within execute_orders.)
If the orders are repeating the loop starts over at the beginning once it completes. To avoid infinite loops on railroad we stop for this turn when the unit is back where it started, even if it have moves left.
A unit will attack under orders only on its final action.
The fresh parameter is true if the order execution happens because the orders just were received.
Definition at line 4384 of file unittools.cpp.
Referenced by execute_unit_orders(), and handle_unit_orders().
| void execute_unit_orders | ( | struct player * | pplayer | ) |
Iterate through all units and execute their orders.
Definition at line 659 of file unittools.cpp.
Referenced by begin_phase().
| void finalize_unit_phase_beginning | ( | struct player * | pplayer | ) |
Iterate through all units and remember their current activities.
Definition at line 673 of file unittools.cpp.
Referenced by begin_phase().
|
static |
Find place to place partisans.
Returns whether such spot was found, and if it has been found, dst_tile contains that tile.
Definition at line 1132 of file unittools.cpp.
Referenced by place_partisans().
| struct unit_type* find_a_unit_type | ( | enum unit_role_id | role, |
| enum unit_role_id | role_tech | ||
| ) |
Returns a unit type that matches the role_tech or role roles.
If role_tech is given, then we look at all units with this role whose requirements are met by any player, and return a random one. This can be used to give a unit to barbarians taken from the set of most advanced units researched by the 'real' players.
If role_tech is not give (-1) or if there are no matching unit types, then we look at 'role' value and return a random matching unit type.
It is an error if there are no available units. This function will always return a valid unit.
Definition at line 159 of file unittools.cpp.
Referenced by try_summon_barbarians(), and unleash_barbarians().
| void finish_unit_wait | ( | struct unit * | punit, |
| int | activity_count | ||
| ) |
Finish activity of a unit that was deferred by unitwaittime.
Definition at line 1063 of file unittools.cpp.
Referenced by finish_unit_waits().
Return the vision the unit will have at the given tile.
The base vision range may be modified by effects.
Note that vision MUST be independent of transported_by for this to work properly.
Definition at line 4791 of file unittools.cpp.
Referenced by maybe_cancel_patrol_due_to_enemy(), unit_move_data(), unit_refresh_vision(), and wakeup_neighbor_sentries().
| struct unit_list* get_units_seen_via_ally | ( | const struct player * | pplayer, |
| const struct player * | aplayer | ||
| ) |
Returns the list of the units seen by 'pplayer' potentially seen only thanks to an alliance with 'aplayer'.
The returned pointer is newly allocated and should be freed by the caller, using unit_list_destroy().
Definition at line 1552 of file unittools.cpp.
Referenced by handle_diplomacy_accept_treaty_req(), and handle_diplomacy_cancel_pact_explicit().
Refresh units visibility of 'aplayer' for 'pplayer' after alliance have been contracted.
Definition at line 1621 of file unittools.cpp.
Referenced by handle_diplomacy_accept_treaty_req().
|
static |
Give 25 Gold or kill the unit.
For H_LIMITEDHUTS Return TRUE if unit is alive, and FALSE if it was killed
Definition at line 3177 of file unittools.cpp.
Referenced by unit_enter_hut().
| bool is_airunit_refuel_point | ( | const struct tile * | ptile, |
| const struct player * | pplayer, | ||
| const struct unit * | punit | ||
| ) |
Can unit refuel on tile.
Considers also carrier capacity on tile.
Definition at line 1635 of file unittools.cpp.
Referenced by dai_find_strategic_airbase(), dai_manage_airunit(), find_nearest_airbase(), and player_restore_units().
Called when one unit kills another in combat (this function is only called in one place).
It handles all side effects including notifications and killstack.
Definition at line 2358 of file unittools.cpp.
Referenced by do_attack().
|
static |
After a battle, after diplomatic aggression and after surviving trireme loss chance, this routine is called to decide whether or not the unit should become more experienced.
There is a specified chance for it to happen, (+50% if player got SUNTZU) the chances are specified in the units.ruleset file.
If 'settler' is TRUE the veteran level is increased due to work done by the unit.
Definition at line 220 of file unittools.cpp.
Referenced by maybe_make_veteran(), and update_unit_activity().
Maybe cancel the goto if there is an enemy in the way.
Definition at line 4312 of file unittools.cpp.
Referenced by execute_orders().
|
static |
Maybe cancel the patrol as there is an enemy near.
If you modify the wakeup range you should change it in wakeup_neighbor_sentries() too.
Definition at line 4325 of file unittools.cpp.
Referenced by execute_orders(), and wakeup_neighbor_sentries().
| bool maybe_make_veteran | ( | struct unit * | punit | ) |
Unit has a chance to become veteran.
This should not be used for settlers for the work they do.
Definition at line 204 of file unittools.cpp.
Referenced by combat_veterans(), diplomat_bribe(), diplomat_escape_full(), and diplomat_infiltrate_tile().
| void notify_unit_experience | ( | struct unit * | punit | ) |
Common notification for all experience levels.
Definition at line 723 of file unittools.cpp.
Referenced by diplomat_bribe(), diplomat_escape_full(), diplomat_infiltrate_tile(), do_attack(), and update_unit_activity().
| void package_short_unit | ( | struct unit * | punit, |
| struct packet_unit_short_info * | packet, | ||
| enum unit_info_use | packet_use, | ||
| int | info_city_id | ||
| ) |
Package a short_unit_info packet.
This contains a limited amount of information about the unit, and is sent to players who shouldn't know everything (like the unit's owner's enemies).
Definition at line 2750 of file unittools.cpp.
Referenced by diplomat_investigate(), see_combat_unit(), send_unit_info(), and unit_move().
| void package_unit | ( | struct unit * | punit, |
| struct packet_unit_info * | packet | ||
| ) |
Package a unit_info packet.
This packet contains basically all information about a unit.
Definition at line 2662 of file unittools.cpp.
Referenced by see_combat_unit(), send_unit_info(), and unit_move().
Place partisans for powner around pcenter (normally around a city).
Definition at line 1180 of file unittools.cpp.
Referenced by api_edit_place_partisans().
|
inlinestatic |
Returns TRUE iff it is reasonable to assume that the player is wathing the unit.
Since the player is watching the unit there is no need to inform him about things he could see happening. Remember that it still may be necessary to explain why something happened.
Definition at line 4357 of file unittools.cpp.
Referenced by execute_orders().
| void player_restore_units | ( | struct player * | pplayer | ) |
Definition at line 481 of file unittools.cpp.
Referenced by end_phase().
| void remove_allied_visibility | ( | struct player * | pplayer, |
| struct player * | aplayer, | ||
| const struct unit_list * | seen_units | ||
| ) |
When two players cancel an alliance, a lot of units that were visible may no longer be visible (this includes units in transporters and cities).
Call this function to inform the clients that these units are no longer visible. Pass the list of seen units returned by get_units_seen_via_ally() before alliance was broken up.
Definition at line 1593 of file unittools.cpp.
Referenced by update_players_after_alliance_breakup().
|
static |
For each pplayer's unit, check if we stack illegally, if so, bounce both players' units.
If on ocean tile, bounce everyone but ships to avoid drowning. This function assumes that cities are clean.
If verbose is true, the unit owner gets messages about where each units goes.
Definition at line 1505 of file unittools.cpp.
Referenced by resolve_unit_stacks().
When in civil war or an alliance breaks there will potentially be units from both sides coexisting on the same squares.
This routine resolves this by first bouncing off non-allied units from their cities, then by bouncing both players' units in now illegal multiowner stacks. To avoid drowning due to removal of transports, we bounce everyone (including third parties' units) from ocean tiles.
If verbose is true, the unit owner gets messages about where each units goes.
Definition at line 1537 of file unittools.cpp.
Referenced by civil_war(), kill_player(), sg_load_sanitycheck(), transfer_city(), and update_players_after_alliance_breakup().
| void send_all_known_units | ( | struct conn_list * | dest | ) |
For each specified connections, send information about all the units known to that player/conn.
Definition at line 2859 of file unittools.cpp.
Referenced by send_all_info().
| void send_unit_info | ( | struct conn_list * | dest, |
| struct unit * | punit | ||
| ) |
Send the unit to the players who need the info.
dest = nullptr means all connections (game.est_connections)
Definition at line 2808 of file unittools.cpp.
Referenced by action_success_pay_mp(), action_success_target_pay_mp(), adv_follow_path(), api_edit_unit_turn(), auto_settler_findwork(), auto_settler_setup_work(), cancel_orders(), city_units_upkeep(), create_unit_full(), dai_auto_settler_run(), dai_unit_goto_constrained(), destroy_extra(), diplomat_bribe(), diplomat_embassy(), diplomat_escape_full(), diplomat_get_tech(), diplomat_infiltrate_tile(), diplomat_investigate(), diplomat_sabotage(), do_attack(), do_capture_units(), do_expel_unit(), do_explore(), do_heal_unit(), execute_orders(), finalize_unit_phase_beginning(), give_allied_visibility(), handle_edit_unit(), handle_unit_orders(), handle_unit_rename(), handle_unit_sscs_set(), illegal_action_pay_price(), map_change_seen(), map_claim_base(), map_show_tile(), place_animal(), place_partisans(), player_restore_units(), remove_city(), research_tech_lost(), send_all_known_units(), server_remove_unit_full(), spy_sabotage_unit(), transfer_city(), transform_unit(), try_summon_barbarians(), try_to_save_unit(), unit_activities_cancel_all_illegal(), unit_activity_complete(), unit_activity_dependencies(), unit_activity_internal(), unit_activity_targeted_internal(), unit_bombard(), unit_change_homecity_handling(), unit_change_owner(), unit_lost_with_transport(), unit_move(), unit_move_handling(), unit_server_side_agent_set(), unit_survive_autoattack(), unit_transport_load_send(), unit_transport_load_tp_status(), unit_transport_unload_send(), unleash_barbarians(), wakeup_neighbor_sentries(), and wipe_unit_full().
|
static |
We remove the unit and see if it's disappearance has affected the homecity and the city it was in.
Definition at line 2019 of file unittools.cpp.
Referenced by do_paradrop().
|
static |
We remove the unit and see if it's disappearance has affected the homecity and the city it was in.
Definition at line 1895 of file unittools.cpp.
Referenced by server_remove_unit(), and wipe_unit_full().
| bool teleport_unit_to_city | ( | struct unit * | punit, |
| struct city * | pcity, | ||
| int | move_cost, | ||
| bool | verbose | ||
| ) |
Teleport punit to city at cost specified.
Returns success. Note that unit may die if it succesfully moves, i.e., even when return value is TRUE. (If specified cost is -1, then teleportation costs all movement.)
Definition at line 1212 of file unittools.cpp.
Referenced by diplomat_escape_full(), do_expel_unit(), and try_to_save_unit().
|
static |
Throw pplayer's units from non allied cities.
If verbose is true, pplayer gets messages about where each units goes.
Definition at line 1438 of file unittools.cpp.
Referenced by resolve_unit_stacks().
|
static |
Calculate the total amount of activity performed by all units on a tile for a given task and target.
Definition at line 691 of file unittools.cpp.
Referenced by total_activity_done(), and unit_activity_complete().
|
static |
Check the total amount of activity performed by all units on a tile for a given task.
Definition at line 713 of file unittools.cpp.
Referenced by unit_activity_complete().
Really transforms a single unit to another type.
This function performs no checks. You should perform the appropriate test first to check that the transformation is legal (test_unit_upgrade() or test_unit_convert()).
is_free: Does unit owner need to pay upgrade price.
Note that this function is strongly tied to unit.c:test_unit_upgrade().
Definition at line 1676 of file unittools.cpp.
Referenced by do_unit_upgrade(), do_upgrade_effects(), and unit_convert().
|
static |
Determine if it is possible to save a given unit, and if so, save them.
'pexclcity' is a city to avoid teleporting to, if 'teleporting' is set. Note that despite being saved from drowning, teleporting the units to "safety" may have killed them in the end.
Definition at line 2260 of file unittools.cpp.
Referenced by wipe_unit_full().
| void unit_activities_cancel_all_illegal | ( | const struct tile * | ptile | ) |
Cancel all illegal activities done by units at the specified tile.
Definition at line 774 of file unittools.cpp.
Referenced by unit_activities_cancel_all_illegal_area().
| void unit_activities_cancel_all_illegal_area | ( | const struct tile * | ptile | ) |
Cancel all illegal activities done by units at the specified tile, and surrounding tiles.
For most rulesets this is for cancelling irrigation on surrounding tiles when the central tile was the only source of water, but does not provide water any more.
Definition at line 801 of file unittools.cpp.
Referenced by climate_change(), end_turn(), and unit_activity_complete().
|
static |
Progress settlers in their current tasks, and units that is pillaging.
also move units that is on a goto. Restore unit move points (information needed for settler tasks)
Definition at line 817 of file unittools.cpp.
Referenced by finish_unit_wait(), and update_unit_activity().
| bool unit_activity_needs_target_from_client | ( | enum unit_activity | activity | ) |
Return TRUE iff activity requires some sort of target to be specified by the client.
Definition at line 1085 of file unittools.cpp.
Referenced by sg_load_player_unit(), and unit_perform_action().
| void unit_assign_specific_activity_target | ( | struct unit * | punit, |
| enum unit_activity * | activity, | ||
| struct extra_type ** | target | ||
| ) |
For some activities (currently only pillaging), the precise target can be assigned by the server rather than explicitly requested by the client.
This function assigns a specific activity+target if the current settings are open-ended (otherwise leaves them unchanged).
Please update unit_activity_needs_target_from_client() if you add server side unit activity target setting to more activities.
Definition at line 1105 of file unittools.cpp.
Referenced by action_sub_target_id_for_action(), ai_level_convert(), and unit_activity_targeted_internal().
This is the basic unit versus unit classic bombardment routine.
1) ALOT of modifiers bonuses etc is added to the 2 units rates. 2) Do rate attacks and don't kill the defender, then return.
Definition at line 321 of file unittools.cpp.
Referenced by unit_bombard().
| bool unit_can_be_retired | ( | struct unit * | punit | ) |
Units (usually barbarian units) may disband spontaneously if they are far from any enemy units or cities.
It is to remove barbarians that do not engage into any activity for a long time.
Definition at line 4906 of file unittools.cpp.
Referenced by begin_turn().
| bool unit_can_do_action_now | ( | const struct unit * | punit | ) |
Used to implement the game rule controlled by the unitwaittime setting.
Notifies the unit owner if the unit is unable to act.
Definition at line 4844 of file unittools.cpp.
Referenced by unit_move_handling(), and unit_perform_action().
| struct unit* unit_change_owner | ( | struct unit * | punit, |
| struct player * | pplayer, | ||
| int | homecity, | ||
| enum unit_loss_reason | reason | ||
| ) |
We don't really change owner of the unit, but create completely new unit as its copy.
The new pointer to 'punit' is returned.
Definition at line 2302 of file unittools.cpp.
Referenced by diplomat_bribe(), and do_capture_units().
|
static |
Convert a single unit to another type.
Definition at line 750 of file unittools.cpp.
Referenced by unit_activity_complete().
| void unit_did_action | ( | struct unit * | punit | ) |
Mark a unit as having done something at the current time.
This is used in conjunction with unit_can_do_action_now() and the unitwaittime setting.
Definition at line 4879 of file unittools.cpp.
Referenced by diplomat_bribe(), do_attack(), do_capture_units(), unit_bombard(), unit_change_owner(), and unit_move_data().
|
static |
Due to the effects in the scripted hut behavior can not be predicted, unit_enter_hut returns nothing.
Definition at line 3207 of file unittools.cpp.
Referenced by unit_move().
| void unit_forget_last_activity | ( | struct unit * | punit | ) |
Forget the unit's last activity so that it can't be resumed.
This is used for example when the unit moves or attacks.
Definition at line 1073 of file unittools.cpp.
Referenced by do_attack(), do_capture_units(), transform_unit(), unit_bombard(), and unit_move_data().
| void unit_get_goods | ( | struct unit * | punit | ) |
Set carried goods for unit.
Definition at line 1773 of file unittools.cpp.
Referenced by create_unit_full(), and unit_change_homecity_handling().
Handle situation where unit goes out of player sight.
Definition at line 2795 of file unittools.cpp.
Referenced by create_city(), create_extra(), map_change_seen(), map_claim_base(), map_hide_tile(), remove_allied_visibility(), send_bombardment(), send_combat(), transfer_city(), transform_unit(), unit_change_homecity_handling(), unit_move(), and unit_transport_load_send().
| void unit_list_refresh_vision | ( | struct unit_list * | punitlist | ) |
Refresh the vision of all units in the list - see unit_refresh_vision.
Definition at line 4834 of file unittools.cpp.
Referenced by create_city(), create_extra(), found_new_tech(), and unit_activity_complete().
|
static |
Handle units destroyed when their transport is destroyed.
Definition at line 2028 of file unittools.cpp.
Referenced by wipe_unit_full().
| bool unit_move | ( | struct unit * | punit, |
| struct tile * | pdesttile, | ||
| int | move_cost, | ||
| struct unit * | embark_to, | ||
| bool | find_embark_target, | ||
| bool | conquer_city_allowed | ||
| ) |
Moves a unit.
No checks whatsoever! This is meant as a practical function for other functions, like do_airline, which do the checking themselves.
If you move a unit you should always use this function, as it also sets the transport status of the unit correctly. Note that the source tile (the current tile of the unit) and pdesttile need not be adjacent.
Returns TRUE iff unit still alive.
Definition at line 3878 of file unittools.cpp.
Referenced by adv_unit_execute_path(), api_edit_unit_move(), api_edit_unit_teleport(), do_airline(), do_disembark(), do_paradrop(), do_unit_conquer_city(), do_unit_embark(), kill_unit(), teleport_unit_to_city(), and unit_move_handling().
|
static |
Does: 1) updates the unit's homecity and the city it enters/leaves (the city's happiness varies).
This also takes into account when the unit enters/leaves a fortress. 2) updates adjacent cities' unavailable tiles.
FIXME: Sometimes it is not necessary to send cities because the goverment doesn't care whether a unit is away or not.
Definition at line 3625 of file unittools.cpp.
Referenced by unit_move().
|
static |
Create a new unit move data, or use previous one if available.
Definition at line 3776 of file unittools.cpp.
Referenced by unit_move().
|
static |
Decrease the reference counter and destroy if needed.
Definition at line 3848 of file unittools.cpp.
Referenced by unit_move().
| bool unit_order_list_is_sane | ( | int | length, |
| const struct unit_order * | orders | ||
| ) |
Returns TRUE iff the unit order array is sane.
Definition at line 4924 of file unittools.cpp.
Referenced by create_unit_orders(), and sg_load_sanitycheck().
| void unit_refresh_vision | ( | struct unit * | punit | ) |
Refresh the unit's vision.
This function has very small overhead and can be called any time effects may have changed the vision range of the city.
Definition at line 4818 of file unittools.cpp.
Referenced by create_unit_full(), sg_load_player_units(), transform_unit(), unit_change_homecity_handling(), and unit_list_refresh_vision().
Move points are trivial, only modifiers to the base value is if it's sea units and the player has certain wonders/techs.
Then add veteran bonus, if any.
Definition at line 636 of file unittools.cpp.
Referenced by update_unit_activity().
Set the call back to run when the server removes the unit.
Definition at line 1872 of file unittools.cpp.
Referenced by uk_rem_gold_append().
|
static |
Check if unit survives enemy autoattacks.
We assume that any unit that is adjacent to us can see us.
Definition at line 3392 of file unittools.cpp.
Referenced by unit_move().
Put the unit onto the transporter, and tell everyone.
Definition at line 3261 of file unittools.cpp.
Referenced by dai_unit_new_task(), and do_unit_board().
|
static |
Load unit to transport, send transport's loaded status to everyone.
Definition at line 3295 of file unittools.cpp.
Referenced by create_unit_full(), player_restore_units(), try_to_save_unit(), and unit_move().
| void unit_transport_unload_send | ( | struct unit * | punit | ) |
Pull the unit off of the transporter, and tell everyone.
Definition at line 3316 of file unittools.cpp.
Referenced by do_attack(), do_unit_alight(), do_unit_board(), do_unit_embark(), do_unit_unload(), and throw_units_from_illegal_cities().
| void unit_unset_removal_callback | ( | struct unit * | punit | ) |
Remove the call back so nothing runs when the server removes the unit.
Definition at line 1886 of file unittools.cpp.
Referenced by unit_list_referred_destroy().
| void unit_versus_unit | ( | struct unit * | attacker, |
| struct unit * | defender, | ||
| int * | att_hp, | ||
| int * | def_hp | ||
| ) |
This is the basic unit versus unit combat routine.
1) ALOT of modifiers bonuses etc is added to the 2 units rates. 2) the combat loop, which continues until one of the units are dead or EFT_COMBAT_ROUNDS rounds have been fought. 3) the aftermath, the loser (and potentially the stack which is below it) is wiped, and the winner gets a chance of gaining veteran status
Definition at line 268 of file unittools.cpp.
Referenced by do_attack().
| void update_unit_activities | ( | struct player * | pplayer | ) |
Iterate through all units and update them.
Definition at line 646 of file unittools.cpp.
Referenced by begin_phase().
|
static |
Progress settlers in their current tasks, and units that are pillaging.
Also move units on a goto. Restore unit move points (information needed for settler tasks)
Definition at line 995 of file unittools.cpp.
Referenced by update_unit_activities().
|
static |
Will wake up any neighboring enemy sentry units or patrolling units.
Definition at line 3536 of file unittools.cpp.
Referenced by create_unit_full(), and unit_move().
Remove the unit, and passengers if it is a carrying any.
Remove the minimum number, eg there could be another boat on the square.
Definition at line 2248 of file unittools.cpp.
Referenced by action_success_actor_consume(), api_edit_unit_kill(), api_edit_unit_teleport(), begin_turn(), bounce_unit(), diplomat_escape_full(), diplomat_get_tech(), diplomat_incite(), diplomat_infiltrate_tile(), diplomat_sabotage(), do_attack(), do_nuke_tile(), handle_edit_unit_remove(), handle_edit_unit_remove_by_id(), hut_get_limited(), illegal_action_pay_price(), kill_player(), kill_unit(), player_restore_units(), remove_city(), remove_illegal_armistice_units(), spy_nuke_city(), spy_sabotage_unit(), spy_spread_plague(), spy_steal_gold(), spy_steal_some_maps(), transfer_city_units(), transfer_unit(), unit_change_owner(), unit_nuke(), unleash_barbarians(), and upkeep_kill_unit().
|
static |
Remove the unit, and passengers if it is a carrying any.
Remove the minimum number, eg there could be another boat on the square.
Definition at line 2051 of file unittools.cpp.
Referenced by unit_lost_with_transport(), and wipe_unit().