Feature #630 ยป 0083-Lua-Add-Unit-seen-player.patch
common/player.c | ||
---|---|---|
/*******************************************************************//**
|
||
Checks if a unit can be seen by pplayer at its current location.
|
||
See can_player_see_unit_at.
|
||
See can_player_see_unit_at().
|
||
***********************************************************************/
|
||
bool can_player_see_unit(const struct player *pplayer,
|
||
const struct unit *punit)
|
||
... | ... | |
}
|
||
/*******************************************************************//**
|
||
Return TRUE iff the player can see units in the city. Either they
|
||
Return TRUE iff the player can see units in the city. Either they
|
||
can see all units or none.
|
||
If the player can see units in the city, then the server sends the
|
||
unit info for units in the city to the client. The client uses the
|
||
tile's unitlist to determine whether to show the city occupied flag. Of
|
||
course the units will be visible to the player as well, if they click on
|
||
them.
|
||
unit info for units in the city to the client. The client uses the
|
||
tile's unitlist to determine whether to show the city occupied flag.
|
||
Of course the units will be visible to the player as well, if they
|
||
click on them.
|
||
If the player can't see units in the city, then the server doesn't send
|
||
the unit info for these units. The client therefore uses the "occupied"
|
||
the unit info for these units. The client therefore uses the "occupied"
|
||
flag sent in the short city packet to determine whether to show the city
|
||
occupied flag.
|
||
Note that can_player_see_city_internals => can_player_see_units_in_city.
|
||
Note that can_player_see_city_internals() => can_player_see_units_in_city().
|
||
Otherwise the player would not know anything about the city's units at
|
||
all, since the full city packet has no "occupied" flag.
|
||
Returns TRUE if given a NULL player. This is used by the client when in
|
||
Returns TRUE if given a NULL player. This is used by the client when in
|
||
observer mode.
|
||
***********************************************************************/
|
||
bool can_player_see_units_in_city(const struct player *pplayer,
|
||
... | ... | |
}
|
||
/*******************************************************************//**
|
||
Return TRUE iff the player can see the city's internals. This means the
|
||
Return TRUE iff the player can see the city's internals. This means the
|
||
full city packet is sent to the client, who should then be able to popup
|
||
a dialog for it.
|
||
Returns TRUE if given a NULL player. This is used by the client when in
|
||
Returns TRUE if given a NULL player. This is used by the client when in
|
||
observer mode.
|
||
***********************************************************************/
|
||
bool can_player_see_city_internals(const struct player *pplayer,
|
||
... | ... | |
/*******************************************************************//**
|
||
Return the number of pplayer2's visible units in pplayer's territory,
|
||
from the point of view of pplayer. Units that cannot be seen by pplayer
|
||
from the point of view of pplayer. Units that cannot be seen by pplayer
|
||
will not be found (this function doesn't cheat).
|
||
***********************************************************************/
|
||
int player_in_territory(const struct player *pplayer,
|
||
... | ... | |
{
|
||
int in_territory = 0;
|
||
/* This algorithm should work at server or client. It only returns the
|
||
/* This algorithm should work at server or client. It only returns the
|
||
* number of visible units (a unit can potentially hide inside the
|
||
* transport of a different player).
|
||
*
|
||
* Note this may be quite slow. An even slower alternative is to iterate
|
||
* Note this may be quite slow. An even slower alternative is to iterate
|
||
* over the entire map, checking all units inside the player's territory
|
||
* to see if they're owned by the enemy. */
|
||
unit_list_iterate(pplayer2->units, punit) {
|
||
... | ... | |
if (owner == pplayer && can_player_see_unit(pplayer, punit)) {
|
||
/* Found one! */
|
||
in_territory += 1;
|
||
in_territory++;
|
||
}
|
||
} unit_list_iterate_end;
|
||
... | ... | |
}
|
||
/*******************************************************************//**
|
||
Returns whether this is a valid username. This is used by the server to
|
||
Returns whether this is a valid username. This is used by the server to
|
||
validate usernames and should be used by the client to avoid invalid
|
||
ones.
|
||
***********************************************************************/
|
common/scriptcore/api_game_methods.c | ||
---|---|---|
return "\?";
|
||
}
|
||
/**********************************************************************//**
|
||
Whether player currently sees the unit
|
||
**************************************************************************/
|
||
bool api_methods_unit_seen(lua_State *L, Unit *self, Player *watcher)
|
||
{
|
||
LUASCRIPT_CHECK_STATE(L, FALSE);
|
||
LUASCRIPT_CHECK_SELF(L, self, FALSE);
|
||
LUASCRIPT_CHECK_ARG_NIL(L, watcher, 3, Player, FALSE);
|
||
return can_player_see_unit(watcher, self);
|
||
}
|
||
/**********************************************************************//**
|
||
Return TRUE if players share research.
|
||
**************************************************************************/
|
common/scriptcore/api_game_methods.h | ||
---|---|---|
bool api_methods_unit_can_upgrade(lua_State *L, Unit *punit, bool is_free);
|
||
const char *api_methods_unit_transform_problem(lua_State *L, Unit *punit,
|
||
Unit_Type *ptype);
|
||
bool api_methods_unit_seen(lua_State *L, Unit *self, Player *watcher);
|
||
/* Unit Type */
|
||
bool api_methods_unit_type_has_flag(lua_State *L, Unit_Type *punit_type,
|
common/scriptcore/tolua_game.pkg | ||
---|---|---|
@ link_text(lua_State *L, Unit *self);
|
||
const char *api_methods_unit_tile_link
|
||
@ tile_link_text(lua_State *L, Unit *self);
|
||
bool api_methods_unit_seen
|
||
@ seen(lua_State *L, Unit *self, Player *watcher);
|
||
}
|
||
module methods_private {
|