The Battle for Wesnoth  1.17.4+dev
Classes | Macros | Typedefs | Functions | Variables
game_lua_kernel.cpp File Reference

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/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 "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 "sdl/surface.hpp"
#include "side_filter.hpp"
#include "sound.hpp"
#include "soundsource.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 "variable.hpp"
#include "variable_info.hpp"
#include "whiteboard/manager.hpp"
#include "wml_exception.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>
#include "lua/lauxlib.h"
Include dependency graph for game_lua_kernel.cpp:

Go to the source code of this file.

Classes

struct  map_locker
 

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)
 

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 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 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...
 

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"
 

Detailed Description

Provides a Lua interpreter, to be embedded in WML.

Note
Naming conventions:
  • intf_ functions are exported in the wesnoth domain,
  • impl_ functions are hidden inside metatables,
  • cfun_ functions are closures,
  • luaW_ functions are helpers in Lua style.

Definition in file game_lua_kernel.cpp.

Macro Definition Documentation

◆ ERR_LUA

#define ERR_LUA   LOG_STREAM(err, log_scripting_lua)

◆ ERR_WML

#define ERR_WML   LOG_STREAM(err, log_wml)

◆ LOG_LUA

#define LOG_LUA   LOG_STREAM(info, log_scripting_lua)

◆ WRN_LUA

#define WRN_LUA   LOG_STREAM(warn, log_scripting_lua)

Typedef Documentation

◆ member_callback

typedef int(game_lua_kernel::* member_callback) (lua_State *)

Definition at line 145 of file game_lua_kernel.cpp.

◆ member_callback2

typedef int(game_lua_kernel::* member_callback2) (lua_State *, bool)

Definition at line 153 of file game_lua_kernel.cpp.

◆ wml_conditional_handler

using wml_conditional_handler = bool(*)(const vconfig&)

Definition at line 5122 of file game_lua_kernel.cpp.

Function Documentation

◆ cfun_exec_candidate_action()

static int cfun_exec_candidate_action ( lua_State *  L)
static

◆ cfun_exec_stage()

static int cfun_exec_stage ( lua_State *  L)
static

Definition at line 3889 of file game_lua_kernel.cpp.

References ai::stage::play_stage().

Referenced by push_component().

◆ cfun_wml_condition()

static int cfun_wml_condition ( lua_State *  L)
static

Executes its upvalue as a wml condition and returns the result.

Definition at line 5127 of file game_lua_kernel.cpp.

References h, and luaW_checkvconfig().

Referenced by game_lua_kernel::set_wml_condition().

◆ dispatch()

template<member_callback method>
int dispatch ( lua_State *  L)

Definition at line 148 of file game_lua_kernel.cpp.

Referenced by events::console_handler::console_handler().

◆ dispatch2()

template<member_callback2 method, bool b>
int dispatch2 ( lua_State *  L)

Definition at line 156 of file game_lua_kernel.cpp.

References b.

◆ impl_add_animation()

static int impl_add_animation ( lua_State *  L)
static

◆ impl_animator_collect()

static int impl_animator_collect ( lua_State *  L)
static

Definition at line 257 of file game_lua_kernel.cpp.

References animatorKey.

Referenced by game_lua_kernel::intf_create_animator().

◆ impl_animator_get()

static int impl_animator_get ( lua_State *  L)
static

Definition at line 387 of file game_lua_kernel.cpp.

References luaW_getmetafield().

Referenced by game_lua_kernel::intf_create_animator().

◆ impl_clear_animation()

static int impl_clear_animation ( lua_State *  L)
static

Definition at line 380 of file game_lua_kernel.cpp.

References animatorKey, and unit_animator::clear().

Referenced by game_lua_kernel::intf_create_animator().

◆ impl_end_level_data_collect()

static int impl_end_level_data_collect ( lua_State *  L)
static

Definition at line 1391 of file game_lua_kernel.cpp.

Referenced by game_lua_kernel::impl_scenario_get().

◆ impl_end_level_data_get()

static int impl_end_level_data_get ( lua_State *  L)
static

◆ impl_floating_label_getmethod()

static int impl_floating_label_getmethod ( lua_State *  L)
static

◆ impl_mp_settings_get()

static int impl_mp_settings_get ( lua_State *  L)
static

◆ impl_mp_settings_len()

static int impl_mp_settings_len ( lua_State *  L)
static

Definition at line 1518 of file game_lua_kernel.cpp.

References mp_game_settings::addons, and p.

Referenced by game_lua_kernel::impl_scenario_get().

◆ intf_add_known_unit()

static int intf_add_known_unit ( lua_State *  L)
static

Adds a new known unit type to the help system.

  • Arg 1: string.

Definition at line 3600 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().

◆ intf_add_modification()

static int intf_add_modification ( lua_State *  L)
static

Adds a modification to a unit.

  • Arg 1: unit.
  • Arg 2: string.
  • Arg 3: WML table.
  • Arg 4: (optional) Whether to add to [modifications] - default true

Definition at line 3524 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().

◆ intf_advance_unit()

static int intf_advance_unit ( lua_State *  L)
static

Advances a unit if the unit has enough xp.

  • Arg 1: unit.
  • Arg 2: optional boolean whether to animate the advancement.
  • Arg 3: optional boolean whether to fire advancement events.

Definition at line 3580 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().

◆ intf_append_ai()

static int intf_append_ai ( lua_State *  L)
static

◆ intf_copy_unit()

static int intf_copy_unit ( lua_State *  L)
static

Copies a unit.

  • Arg 1: unit userdata.
  • Ret 1: unit userdata.

Definition at line 2767 of file game_lua_kernel.cpp.

References unit::clone(), luaW_checkunit(), and luaW_pushunit().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_create_unit()

static int intf_create_unit ( lua_State *  L)
static

Creates a unit from its WML description.

  • Arg 1: WML table.
  • Ret 1: unit userdata.

Definition at line 2753 of file game_lua_kernel.cpp.

References unit::create(), luaW_checkconfig(), and luaW_pushunit().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_debug_ai()

static int intf_debug_ai ( lua_State *  L)
static

◆ intf_do_unsynced()

static int intf_do_unsynced ( lua_State *  L)
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'

  • Arg 1: function that will be called during the unsynced context.

Definition at line 3280 of file game_lua_kernel.cpp.

References luaW_pcall().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_eval_conditional()

static int intf_eval_conditional ( lua_State *  L)
static

Evaluates a boolean WML conditional.

  • Arg 1: WML table.
  • Ret 1: boolean.

Definition at line 1803 of file game_lua_kernel.cpp.

References b, game_events::conditional_passed(), and luaW_checkvconfig().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_get_era()

static int intf_get_era ( lua_State *  L)
static

Gets a table for an era tag.

  • Arg 1: userdata (ignored).
  • Arg 2: string containing id of the desired era
  • Ret 1: config for the era

Definition at line 1245 of file game_lua_kernel.cpp.

References game_config_manager::get(), and luaW_pushconfig().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_get_resource()

static int intf_get_resource ( lua_State *  L)
static

Gets a table for an resource tag.

  • Arg 1: userdata (ignored).
  • Arg 2: string containing id of the desired resource
  • Ret 1: config for the era

Definition at line 1227 of file game_lua_kernel.cpp.

References game_config_manager::get(), and luaW_pushconfig().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_get_viewing_side()

static int intf_get_viewing_side ( lua_State *  L)
static

Gets currently viewing side.

  • Ret 1: integer specifying the currently viewing side
  • Ret 2: Bool whether the vision is not limited to that team, this can for example be true during replays.

Definition at line 243 of file game_lua_kernel.cpp.

References display::get_singleton().

Referenced by game_lua_kernel::game_lua_kernel().

◆ intf_invoke_synced_command()

static int intf_invoke_synced_command ( lua_State *  L)
static

◆ intf_modify_ai()

static int intf_modify_ai ( lua_State *  L,
const char *  action 
)
static

◆ intf_modify_ai_old()

static int intf_modify_ai_old ( lua_State *  L)
static

Lua frontend to the modify_ai functionality.

  • Arg 1: config.

Definition at line 3863 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().

◆ intf_remove_modifications()

static int intf_remove_modifications ( lua_State *  L)
static

Removes modifications from a unit.

  • Arg 1: unit
  • Arg 2: table (filter as [filter_wml])
  • Arg 3: type of modification (default "object")

Definition at line 3555 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().

◆ intf_switch_ai()

static int intf_switch_ai ( lua_State *  L)
static

◆ intf_synchronize_choice()

static int intf_synchronize_choice ( lua_State *  L)
static

Ensures a value is synchronized among all the clients.

  • Arg 1: optional string specifying the type id of the choice.
  • Arg 2: function to compute the value, called if the client is the master.
  • Arg 3: optional function, called instead of the first function if the user is not human.
  • Arg 4: optional integer specifying, on which side the function should be evaluated.
  • Ret 1: WML table returned by the function.

Definition at line 3212 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().

◆ intf_synchronize_choices()

static int intf_synchronize_choices ( lua_State *  L)
static

Ensures a value is synchronized among all the clients.

  • Arg 1: optional string the id of this type of user input, may only contain characters a-z and '_'
  • Arg 2: function to compute the value, called if the client is the master.
  • Arg 3: an optional function to compute the value, if the side was null/empty controlled.
  • Arg 4: an array of integers specifying, on which side the function should be evaluated.
  • Ret 1: a map int -> WML tabls.

Definition at line 3247 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().

◆ intf_transform_unit()

static int intf_transform_unit ( lua_State *  L)
static

Changes a unit to the given unit type.

  • Arg 1: unit userdata.
  • Arg 2: unit type name
  • Arg 3: (optional) unit variation name

Definition at line 2906 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().

◆ intf_unit_defense()

static int intf_unit_defense ( lua_State *  L)
static

Returns unit defense on a given terrain.

  • Arg 1: unit userdata.
  • Arg 2: string containing the terrain type.
  • Ret 1: integer.

Definition at line 2871 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().

◆ intf_unit_jamming_cost()

static int intf_unit_jamming_cost ( lua_State *  L)
static

Returns unit jamming cost on a given terrain.

  • Arg 1: unit userdata.
  • Arg 2: string containing the terrain type.
  • Ret 1: integer.

Definition at line 2850 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().

◆ intf_unit_movement_cost()

static int intf_unit_movement_cost ( lua_State *  L)
static

Returns unit movement cost on a given terrain.

  • Arg 1: unit userdata.
  • Arg 2: string containing the terrain type.
  • Ret 1: integer.

Definition at line 2808 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().

◆ intf_unit_resistance()

static int intf_unit_resistance ( lua_State *  L)
static

Returns unit resistance against a given attack type.

  • Arg 1: unit userdata.
  • Arg 2: string containing the attack type.
  • Arg 3: boolean indicating if attacker.
  • Arg 4: optional location.
  • Ret 1: integer.

Definition at line 2782 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().

◆ intf_unit_vision_cost()

static int intf_unit_vision_cost ( lua_State *  L)
static

Returns unit vision cost on a given terrain.

  • Arg 1: unit userdata.
  • Arg 2: string containing the terrain type.
  • Ret 1: integer.

Definition at line 2829 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().

◆ is_handled_file_tag()

static bool is_handled_file_tag ( const std::string &  s)
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 4911 of file game_lua_kernel.cpp.

References s.

Referenced by game_lua_kernel::load_game(), and game_lua_kernel::save_game().

◆ load_fake_units()

template<typename T >
static int load_fake_units ( lua_State *  L,
int  arg,
T &  fake_units 
)
static

Definition at line 2065 of file game_lua_kernel.cpp.

References i, and luaW_tolocation().

Referenced by game_lua_kernel::intf_find_cost_map().

◆ luaW_check_floating_label()

static int* luaW_check_floating_label ( lua_State *  L,
int  idx 
)
static

◆ luaW_check_schedule()

static int luaW_check_schedule ( lua_State *  L,
int  idx 
)
static

◆ luaW_push_tod()

static void luaW_push_tod ( lua_State *  L,
const time_of_day tod 
)
static

◆ luaW_pushsimdata()

static void luaW_pushsimdata ( lua_State *  L,
const combatant cmb 
)
static

Puts a table at the top of the stack with some combat result.

Definition at line 2925 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().

◆ luaW_pushsimweapon()

static void luaW_pushsimweapon ( lua_State *  L,
const battle_context_unit_stats bcustats 
)
static

◆ push_component()

static void push_component ( lua_State *  L,
ai::component c,
const std::string &  ct = "" 
)
static

Variable Documentation

◆ animatorKey

const char animatorKey[] = "unit animator"
static

◆ labelKey

const char* labelKey = "floating label"

◆ log_scripting_lua

lg::log_domain log_scripting_lua("scripting/lua")
static

◆ log_wml

lg::log_domain log_wml("wml")
static