Provides a Lua interpreter, to be embedded in WML. More...
#include "scripting/game_lua_kernel.hpp"
#include "actions/attack.hpp"
#include "actions/advancement.hpp"
#include "actions/move.hpp"
#include "actions/vision.hpp"
#include "ai/composite/ai.hpp"
#include "ai/composite/component.hpp"
#include "ai/composite/contexts.hpp"
#include "ai/lua/engine_lua.hpp"
#include "ai/composite/rca.hpp"
#include "ai/composite/stage.hpp"
#include "ai/configuration.hpp"
#include "ai/lua/core.hpp"
#include "ai/manager.hpp"
#include "attack_prediction.hpp"
#include "chat_events.hpp"
#include "config.hpp"
#include "display_chat_manager.hpp"
#include "floating_label.hpp"
#include "formatter.hpp"
#include "game_board.hpp"
#include "game_classification.hpp"
#include "game_config.hpp"
#include "game_config_manager.hpp"
#include "game_data.hpp"
#include "game_display.hpp"
#include "game_errors.hpp"
#include "game_events/conditional_wml.hpp"
#include "game_events/entity_location.hpp"
#include "game_events/handlers.hpp"
#include "game_events/manager_impl.hpp"
#include "game_events/pump.hpp"
#include "preferences/game.hpp"
#include "log.hpp"
#include "map/map.hpp"
#include "map/label.hpp"
#include "map/location.hpp"
#include "mouse_events.hpp"
#include "mp_game_settings.hpp"
#include "pathfind/pathfind.hpp"
#include "pathfind/teleport.hpp"
#include "play_controller.hpp"
#include "preferences/general.hpp"
#include "recall_list_manager.hpp"
#include "replay.hpp"
#include "reports.hpp"
#include "resources.hpp"
#include "scripting/lua_audio.hpp"
#include "scripting/lua_unit.hpp"
#include "scripting/lua_unit_attacks.hpp"
#include "scripting/lua_common.hpp"
#include "scripting/lua_cpp_function.hpp"
#include "scripting/lua_gui2.hpp"
#include "scripting/lua_pathfind_cost_calculator.hpp"
#include "scripting/lua_race.hpp"
#include "scripting/lua_team.hpp"
#include "scripting/lua_terrainmap.hpp"
#include "scripting/lua_unit_type.hpp"
#include "scripting/push_check.hpp"
#include "synced_commands.hpp"
#include "color.hpp"
#include "side_filter.hpp"
#include "sound.hpp"
#include "synced_context.hpp"
#include "synced_user_choice.hpp"
#include "team.hpp"
#include "terrain/terrain.hpp"
#include "terrain/filter.hpp"
#include "terrain/translation.hpp"
#include "time_of_day.hpp"
#include "tod_manager.hpp"
#include "tstring.hpp"
#include "units/unit.hpp"
#include "units/animation_component.hpp"
#include "units/udisplay.hpp"
#include "units/filter.hpp"
#include "units/map.hpp"
#include "units/ptr.hpp"
#include "units/types.hpp"
#include "utils/scope_exit.hpp"
#include "variable.hpp"
#include "variable_info.hpp"
#include "video.hpp"
#include "whiteboard/manager.hpp"
#include "deprecation.hpp"
#include <functional>
#include <array>
#include <cassert>
#include <cstring>
#include <iterator>
#include <map>
#include <new>
#include <set>
#include <sstream>
#include <utility>
#include <algorithm>
#include <vector>
#include <SDL2/SDL_timer.h>
Go to the source code of this file.
Classes | |
struct | map_locker |
struct | lua_event_filter |
Macros | |
#define | LOG_LUA LOG_STREAM(info, log_scripting_lua) |
#define | WRN_LUA LOG_STREAM(warn, log_scripting_lua) |
#define | ERR_LUA LOG_STREAM(err, log_scripting_lua) |
#define | ERR_WML LOG_STREAM(err, log_wml) |
#define | READ_ONE_FILTER(key, tag) |
Typedefs | |
typedef int(game_lua_kernel::* | member_callback) (lua_State *) |
typedef int(game_lua_kernel::* | member_callback2) (lua_State *, bool) |
using | wml_conditional_handler = bool(*)(const vconfig &) |
Functions | |
template<member_callback method> | |
int | dispatch (lua_State *L) |
template<member_callback2 method, bool b> | |
int | dispatch2 (lua_State *L) |
static int | intf_get_viewing_side (lua_State *L) |
Gets currently viewing side. More... | |
static int | intf_handle_user_interact (lua_State *) |
static int | impl_animator_collect (lua_State *L) |
static int | impl_add_animation (lua_State *L) |
static int | impl_clear_animation (lua_State *L) |
static int | impl_animator_get (lua_State *L) |
static void | luaW_push_tod (lua_State *L, const time_of_day &tod) |
static int | luaW_check_schedule (lua_State *L, int idx) |
static int | intf_get_resource (lua_State *L) |
Gets a table for an resource tag. More... | |
static int | intf_get_era (lua_State *L) |
Gets a table for an era tag. More... | |
static int | impl_end_level_data_get (lua_State *L) |
static int | impl_end_level_data_collect (lua_State *L) |
static int | impl_mp_settings_get (lua_State *L) |
static int | impl_mp_settings_len (lua_State *L) |
static int | intf_eval_conditional (lua_State *L) |
Evaluates a boolean WML conditional. More... | |
template<typename T > | |
static int | load_fake_units (lua_State *L, int arg, T &fake_units) |
static int * | luaW_check_floating_label (lua_State *L, int idx) |
static int | impl_floating_label_getmethod (lua_State *L) |
static int | intf_create_unit (lua_State *L) |
Creates a unit from its WML description. More... | |
static int | intf_copy_unit (lua_State *L) |
Copies a unit. More... | |
static int | intf_unit_resistance (lua_State *L) |
Returns unit resistance against a given attack type. More... | |
static int | intf_unit_movement_cost (lua_State *L) |
Returns unit movement cost on a given terrain. More... | |
static int | intf_unit_vision_cost (lua_State *L) |
Returns unit vision cost on a given terrain. More... | |
static int | intf_unit_jamming_cost (lua_State *L) |
Returns unit jamming cost on a given terrain. More... | |
static int | intf_unit_defense (lua_State *L) |
Returns unit defense on a given terrain. More... | |
static int | intf_transform_unit (lua_State *L) |
Changes a unit to the given unit type. More... | |
static void | luaW_pushsimdata (lua_State *L, const combatant &cmb) |
Puts a table at the top of the stack with some combat result. More... | |
static void | luaW_pushsimweapon (lua_State *L, const battle_context_unit_stats &bcustats) |
Puts a table at the top of the stack with information about the combatants' weapons. More... | |
static int | intf_synchronize_choice (lua_State *L) |
Ensures a value is synchronized among all the clients. More... | |
static int | intf_synchronize_choices (lua_State *L) |
Ensures a value is synchronized among all the clients. More... | |
static int | intf_do_unsynced (lua_State *L) |
Calls a function in an unsynced context (this specially means that all random calls used by that function will be unsynced). More... | |
static int | intf_modify_ai (lua_State *L, const char *action) |
static int | intf_switch_ai (lua_State *L) |
static int | intf_append_ai (lua_State *L) |
static int | intf_add_modification (lua_State *L) |
Adds a modification to a unit. More... | |
static int | intf_remove_modifications (lua_State *L) |
Removes modifications from a unit. More... | |
static int | intf_advance_unit (lua_State *L) |
Advances a unit if the unit has enough xp. More... | |
static int | intf_add_known_unit (lua_State *L) |
Adds a new known unit type to the help system. More... | |
static std::string | read_event_name (lua_State *L, int idx) |
static int | intf_modify_ai_old (lua_State *L) |
Lua frontend to the modify_ai functionality. More... | |
static int | cfun_exec_candidate_action (lua_State *L) |
static int | cfun_exec_stage (lua_State *L) |
static void | push_component (lua_State *L, ai::component *c, const std::string &ct="") |
static int | intf_debug_ai (lua_State *L) |
Debug access to the ai tables. More... | |
static int | intf_invoke_synced_command (lua_State *L) |
static bool | is_handled_file_tag (const std::string &s) |
These are the child tags of [scenario] (and the like) that are handled elsewhere (in the C++ code). More... | |
static int | cfun_wml_condition (lua_State *L) |
Executes its upvalue as a wml condition and returns the result. More... | |
static int | intf_run_event_wml (lua_State *L) |
Variables | |
static lg::log_domain | log_scripting_lua ("scripting/lua") |
static lg::log_domain | log_wml ("wml") |
static const char | animatorKey [] = "unit animator" |
const char * | labelKey = "floating label" |
Provides a Lua interpreter, to be embedded in WML.
Definition in file game_lua_kernel.cpp.
#define ERR_LUA LOG_STREAM(err, log_scripting_lua) |
Definition at line 135 of file game_lua_kernel.cpp.
#define ERR_WML LOG_STREAM(err, log_wml) |
Definition at line 138 of file game_lua_kernel.cpp.
#define LOG_LUA LOG_STREAM(info, log_scripting_lua) |
Definition at line 133 of file game_lua_kernel.cpp.
#define READ_ONE_FILTER | ( | key, | |
tag | |||
) |
#define WRN_LUA LOG_STREAM(warn, log_scripting_lua) |
Definition at line 134 of file game_lua_kernel.cpp.
typedef int(game_lua_kernel::* member_callback) (lua_State *) |
Definition at line 144 of file game_lua_kernel.cpp.
typedef int(game_lua_kernel::* member_callback2) (lua_State *, bool) |
Definition at line 152 of file game_lua_kernel.cpp.
using wml_conditional_handler = bool(*)(const vconfig&) |
Definition at line 5660 of file game_lua_kernel.cpp.
|
static |
Definition at line 4375 of file game_lua_kernel.cpp.
References ai::candidate_action::evaluate(), ai::candidate_action::execute(), and luaW_toboolean().
Referenced by push_component().
|
static |
Definition at line 4392 of file game_lua_kernel.cpp.
References ai::stage::play_stage().
Referenced by push_component().
|
static |
Executes its upvalue as a wml condition and returns the result.
Definition at line 5665 of file game_lua_kernel.cpp.
References h, and luaW_checkvconfig().
Referenced by game_lua_kernel::set_wml_condition().
int dispatch | ( | lua_State * | L | ) |
Definition at line 147 of file game_lua_kernel.cpp.
int dispatch2 | ( | lua_State * | L | ) |
Definition at line 155 of file game_lua_kernel.cpp.
References b.
|
static |
Definition at line 268 of file game_lua_kernel.cpp.
References unit_animator::add_animation(), animatorKey, string_enums::enum_base< Definition >::get_enum(), unit::get_location(), luaW_checkunit_ptr(), luaW_toboolean(), luaW_tolocation(), luaW_totstring(), luaW_toweapon(), luaW_type_error(), and tiles_adjacent().
Referenced by game_lua_kernel::intf_create_animator().
|
static |
Definition at line 262 of file game_lua_kernel.cpp.
References animatorKey.
Referenced by game_lua_kernel::intf_create_animator().
|
static |
Definition at line 391 of file game_lua_kernel.cpp.
References luaW_getmetafield().
Referenced by game_lua_kernel::intf_create_animator().
|
static |
Definition at line 384 of file game_lua_kernel.cpp.
References animatorKey, and unit_animator::clear().
Referenced by game_lua_kernel::intf_create_animator().
|
static |
Definition at line 1413 of file game_lua_kernel.cpp.
References data.
Referenced by game_lua_kernel::impl_scenario_get().
|
static |
Definition at line 1365 of file game_lua_kernel.cpp.
References data, return_bool_attrib, return_cfg_attrib, return_cstring_attrib, and return_string_attrib.
Referenced by game_lua_kernel::impl_scenario_get().
|
static |
Definition at line 2313 of file game_lua_kernel.cpp.
References luaW_check_floating_label(), luaW_getmetafield(), and return_bool_attrib.
Referenced by game_lua_kernel::intf_set_floating_label().
|
static |
Definition at line 1420 of file game_lua_kernel.cpp.
References string_enums::enum_base< Definition >::get_string(), i, INDEFINITE, utils::join(), utils::join_map(), lua_push(), luaW_getglobal(), luaW_pushconfig(), p, return_bool_attrib, return_cfgref_attrib, return_int_attrib, return_string_attrib, and return_string_attrib_deprecated.
Referenced by game_lua_kernel::impl_scenario_get().
|
static |
Definition at line 1540 of file game_lua_kernel.cpp.
References p.
Referenced by game_lua_kernel::impl_scenario_get().
|
static |
Adds a new known unit type to the help system.
Definition at line 3899 of file game_lua_kernel.cpp.
References preferences::encountered_units(), unit_type_data::find(), and unit_types.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Adds a modification to a unit.
Definition at line 3814 of file game_lua_kernel.cpp.
References unit::add_modification(), deprecated_message(), luaW_checkconfig(), luaW_checkunit(), luaW_toboolean(), and PREEMPTIVE.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Advances a unit if the unit has enough xp.
Definition at line 3879 of file game_lua_kernel.cpp.
References advance_unit_at(), advance_unit_params::animate(), advance_unit_params::fire_events(), unit::get_location(), luaW_checkunit(), and luaW_toboolean().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Definition at line 3737 of file game_lua_kernel.cpp.
References config::add_child(), ai::manager::append_active_ai_for_side(), config::erase(), ai::configuration::expand_simplified_aspects(), ai::manager::get_singleton(), config::has_child(), luaW_checkconfig(), luaW_toteam(), config::mandatory_child(), config::ordered_begin(), config::ordered_end(), and t.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Copies a unit.
Definition at line 2806 of file game_lua_kernel.cpp.
References unit::clone(), luaW_checkunit(), and luaW_pushunit().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Creates a unit from its WML description.
Definition at line 2792 of file game_lua_kernel.cpp.
References unit::create(), luaW_checkconfig(), and luaW_pushunit().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Debug access to the ai tables.
Definition at line 4476 of file game_lua_kernel.cpp.
References config::add_child(), ai::component_manager::add_component(), c, game_config::debug, ai::manager::get_active_ai_holder_for_side_dbg(), ai::ai_composite::get_ai_context(), ai::holder::get_component(), ai::configuration::get_default_ai_parameters(), ai::manager::get_singleton(), i, LOG_LUA, luaW_toteam(), ai::engine_lua::push_ai_table(), push_component(), t, and ai::engine_lua::to_config().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Calls a function in an unsynced context (this specially means that all random calls used by that function will be unsynced).
This is usually used together with an unsynced if like 'if controller != network'
Definition at line 3570 of file game_lua_kernel.cpp.
References luaW_pcall().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Evaluates a boolean WML conditional.
Definition at line 1826 of file game_lua_kernel.cpp.
References b, game_events::conditional_passed(), and luaW_checkvconfig().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Gets a table for an era tag.
Definition at line 1261 of file game_lua_kernel.cpp.
References game_config_manager::get(), and luaW_pushconfig().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Gets a table for an resource tag.
Definition at line 1243 of file game_lua_kernel.cpp.
References game_config_manager::get(), and luaW_pushconfig().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Gets currently viewing side.
Definition at line 242 of file game_lua_kernel.cpp.
References display::get_singleton().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Definition at line 254 of file game_lua_kernel.cpp.
References ai::manager::get_singleton(), and ai::manager::raise_user_interact().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Definition at line 4908 of file game_lua_kernel.cpp.
References config::add_child(), config::child_or_add(), luaW_checkconfig(), luaW_getglobal(), luaW_pcall(), luaW_pushconfig(), and synced_command::registry().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Definition at line 3688 of file game_lua_kernel.cpp.
References config::add_child(), ai::manager::get_singleton(), luaW_checkconfig(), luaW_toteam(), ai::manager::modify_active_ai_for_side(), game_config::path, and t.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Lua frontend to the modify_ai functionality.
Definition at line 4366 of file game_lua_kernel.cpp.
References ai::manager::get_singleton(), luaW_toconfig(), and ai::manager::modify_active_ai_for_side().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Removes modifications from a unit.
Definition at line 3845 of file game_lua_kernel.cpp.
References config::all_children_count(), config::attribute_count(), config::attribute_range(), config::child_range(), unit::expire_modifications(), unit::get_modifications(), luaW_checkconfig(), and luaW_checkunit().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Definition at line 5745 of file game_lua_kernel.cpp.
References luaW_getglobal().
Referenced by game_lua_kernel::save_wml_event().
|
static |
Definition at line 3716 of file game_lua_kernel.cpp.
References ai::manager::add_ai_for_side_from_config(), lg::err(), ai::manager::get_singleton(), luaW_checkconfig(), luaW_toteam(), and t.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Ensures a value is synchronized among all the clients.
Definition at line 3502 of file game_lua_kernel.cpp.
References _(), mp_sync::get_user_choice(), luaW_pushconfig(), and luaW_totstring().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Ensures a value is synchronized among all the clients.
Definition at line 3537 of file game_lua_kernel.cpp.
References _(), mp_sync::get_user_choice_multiple_sides(), lua_push(), and luaW_totstring().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Changes a unit to the given unit type.
Definition at line 2945 of file game_lua_kernel.cpp.
References unit::advance_to(), unit_type_data::find(), unit_type::get_variation(), unit_type::has_variation(), luaW_checkunit(), and unit_types.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Returns unit defense on a given terrain.
Definition at line 2910 of file game_lua_kernel.cpp.
References unit::defense_modifier(), resources::gameboard, luaW_checkunit(), luaW_tolocation(), luaW_type_error(), t_translation::read_terrain_code(), and t.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Returns unit jamming cost on a given terrain.
Definition at line 2889 of file game_lua_kernel.cpp.
References resources::gameboard, unit::jamming_cost(), luaW_checkunit(), luaW_tolocation(), luaW_type_error(), t_translation::read_terrain_code(), and t.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Returns unit movement cost on a given terrain.
Definition at line 2847 of file game_lua_kernel.cpp.
References resources::gameboard, luaW_checkunit(), luaW_tolocation(), luaW_type_error(), unit::movement_cost(), t_translation::read_terrain_code(), and t.
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Returns unit resistance against a given attack type.
Definition at line 2821 of file game_lua_kernel.cpp.
References a, unit::get_location(), luaW_checklocation(), luaW_checkunit(), luaW_toboolean(), and unit::resistance_against().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
Returns unit vision cost on a given terrain.
Definition at line 2868 of file game_lua_kernel.cpp.
References resources::gameboard, luaW_checkunit(), luaW_tolocation(), luaW_type_error(), t_translation::read_terrain_code(), t, and unit::vision_cost().
Referenced by game_lua_kernel::game_lua_kernel().
|
static |
These are the child tags of [scenario] (and the like) that are handled elsewhere (in the C++ code).
Any child tags not in this list will be passed to Lua's on_load event.
Definition at line 5449 of file game_lua_kernel.cpp.
References s.
Referenced by game_lua_kernel::load_game(), and game_lua_kernel::save_game().
|
static |
Definition at line 2088 of file game_lua_kernel.cpp.
References resources::fake_units, i, and luaW_tolocation().
Referenced by game_lua_kernel::intf_find_cost_map().
|
static |
Definition at line 2308 of file game_lua_kernel.cpp.
References labelKey.
Referenced by impl_floating_label_getmethod(), game_lua_kernel::intf_move_floating_label(), game_lua_kernel::intf_remove_floating_label(), and game_lua_kernel::intf_set_floating_label().
|
static |
Definition at line 915 of file game_lua_kernel.cpp.
References i.
Referenced by game_lua_kernel::impl_schedule_get(), game_lua_kernel::impl_schedule_len(), game_lua_kernel::impl_schedule_set(), game_lua_kernel::intf_get_time_of_day(), and game_lua_kernel::intf_replace_schedule().
|
static |
Definition at line 870 of file game_lua_kernel.cpp.
References tod_color::b, time_of_day::bonus_modified, time_of_day::color, tod_color::g, time_of_day::id, time_of_day::image, time_of_day::image_mask, time_of_day::lawful_bonus, luaW_pushtstring(), time_of_day::name, tod_color::r, and time_of_day::sounds.
Referenced by game_lua_kernel::impl_schedule_get(), and game_lua_kernel::intf_get_time_of_day().
|
static |
Puts a table at the top of the stack with some combat result.
Definition at line 2964 of file game_lua_kernel.cpp.
References combatant::average_hp(), combatant::hp_dist, i, n, combatant::poisoned, combatant::slowed, and combatant::untouched.
Referenced by game_lua_kernel::intf_simulate_combat().
|
static |
Puts a table at the top of the stack with information about the combatants' weapons.
Definition at line 2987 of file game_lua_kernel.cpp.
References battle_context_unit_stats::attack_num, battle_context_unit_stats::chance_to_hit, battle_context_unit_stats::damage, battle_context_unit_stats::drain_constant, battle_context_unit_stats::drain_percent, battle_context_unit_stats::drains, battle_context_unit_stats::firststrike, luaW_pushweapon(), battle_context_unit_stats::num_blows, battle_context_unit_stats::petrifies, battle_context_unit_stats::plague_type, battle_context_unit_stats::plagues, battle_context_unit_stats::poisons, battle_context_unit_stats::rounds, battle_context_unit_stats::slows, and battle_context_unit_stats::weapon.
Referenced by game_lua_kernel::intf_simulate_combat().
|
static |
Definition at line 4401 of file game_lua_kernel.cpp.
References c, cfun_exec_candidate_action(), cfun_exec_stage(), i, and t.
Referenced by intf_debug_ai().
|
static |
Definition at line 4009 of file game_lua_kernel.cpp.
References utils::join(), and lua_check().
Referenced by game_lua_kernel::intf_add_event(), and game_lua_kernel::intf_add_event_simple().
|
static |
Definition at line 260 of file game_lua_kernel.cpp.
Referenced by impl_add_animation(), impl_animator_collect(), impl_clear_animation(), game_lua_kernel::impl_run_animation(), and game_lua_kernel::intf_create_animator().
const char* labelKey = "floating label" |
Definition at line 2306 of file game_lua_kernel.cpp.
Referenced by game_lua_kernel::intf_set_floating_label(), and luaW_check_floating_label().
|
static |
|
static |