From 02a0e3b82bcfe516d10868392ee8c98866114e5f Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 7 Jun 2013 18:42:31 -0700 Subject: [PATCH] Lua Documentation --- Lua-General-Functions.md | 147 ++++++++++++++++++++++++++++++++++++++- Lua-Object.md | 2 +- Lua-Parser.md | 143 ++++++++++++++++++++++++++++++++++++- 3 files changed, 289 insertions(+), 3 deletions(-) diff --git a/Lua-General-Functions.md b/Lua-General-Functions.md index c0ce02e..01e4da5 100644 --- a/Lua-General-Functions.md +++ b/Lua-General-Functions.md @@ -1 +1,146 @@ -PH \ No newline at end of file +All Lua General Functions are in the global table 'eq'. + +``` +void load_encounter(std::string name); +void unload_encounter(std::string name); +void register_event(std::string package_name, std::string name, int evt, luabind::object func); +void unregister_event(std::string package_name, std::string name, int evt); +void register_npc_event(std::string name, int evt, int npc_id, luabind::object func); +void unregister_npc_event(std::string name, int evt, int npc_id); +void register_player_event(std::string name, int evt, luabind::object func); +void unregister_player_event(std::string name, int evt); +void register_item_event(std::string name, int evt, Lua_Item item, luabind::object func); +void unregister_item_event(std::string name, int evt, Lua_Item item); +void register_spell_event(std::string name, int evt, int spell_id, luabind::object func); +void unregister_spell_event(std::string name, int evt, int spell_id); +Lua_Mob spawn2(int npc_type, int grid, int unused, double x, double y, double z, double heading); +Lua_Mob unique_spawn(int npc_type, int grid, int unused, double x, double y, double z, double heading = 0.0); +Lua_Mob spawn_from_spawn2(uint32 spawn2_id); +void enable_spawn2(int spawn2_id); +void disable_spawn2(int spawn2_id); +void set_timer(const char *timer, int time_ms); +void stop_timer(const char *timer); +void stop_all_timers(); +void depop(); +void depop(int npc_type); +void depop_with_timer(); +void depop_with_timer(int npc_type); +void depop_all(); +void depop_all(int npc_type); +void depop_zone(bool start_spawn_status); +void repop_zone(); +bool is_disc_tome(int item_id); +void safe_move(); +void rain(int weather); +void snow(int weather); +int scribe_spells(int max); +int scribe_spells(int max, int min); +int train_discs(int max); +int train_discs(int max, int min); +void set_sky(int sky); +void set_guild(int guild_id, int rank); +void create_guild(const char *name, const char *leader); +void set_time(int hour, int min); +void signal(int npc_id, int signal_id); +void signal(int npc_id, int signal_id, int wait); +void set_global(const char *name, const char *value, int options, const char *duration); +void target_global(const char *name, const char *value, const char *duration, int npc_id, int char_id, int zone_id); +void delete_global(const char *name); +void start(int wp); +void stop(); +void pause(int duration); +void move_to(float x, float y, float z, float h, bool save_guard_spot); +void resume(); +void set_next_hp_event(int hp); +void set_next_inc_hp_event(int hp); +void respawn(int npc_type, int grid); +void set_proximity(float min_x, float max_x, float min_y, float max_y); +void set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z, float max_z); +void clear_proximity(); +void enable_proximity_say(); +void disable_proximity_say(); +void set_anim(int npc_type, int anim_num); +void spawn_condition(const char *zone, uint32 instance_id, int condition_id, int value); +void get_spawn_condition(const char *zone, uint32 instance_id, int condition_id); +void toggle_spawn_event(int event_id, bool enable, bool reset); +void summon_burried_player_corpse(uint32 char_id, float x, float y, float z, float h); +void summon_all_player_corpses(uint32 char_id, float x, float y, float z, float h); +int get_player_burried_corpse_count(uint32 char_id); +bool bury_player_corpse(uint32 char_id); +void task_selector(luabind::object table); +void task_set_selector(int task_set); +void enable_task(luabind::object table); +void disable_task(luabind::object table); +bool is_task_enabled(int task); +bool is_task_active(int task); +bool is_task_activity_active(int task, int activity); +int get_task_activity_done_count(int task, int activity); +void update_task_activity(int task, int activity, int count); +void reset_task_activity(int task, int activity); +void task_explored_area(int explore_id); +void assign_task(int task_id); +void fail_task(int task_id); +int task_time_left(int task_id); +int is_task_completed(int task_id); +int enabled_task_count(int task_set); +int first_task_in_set(int task_set); +int last_task_in_set(int task_set); +int next_task_in_set(int task_set, int task_id); +int active_speak_task(); +int active_speak_activity(int task_id); +int active_tasks_in_set(int task_set); +int completed_tasks_in_set(int task_set); +bool is_task_appropriate(int task); +void popup(const char *title, const char *text, uint32 id, uint32 buttons, uint32 duration); +void clear_spawn_timers(); +void zone_emote(int type, const char *str); +void world_emote(int type, const char *str); +int get_level(int type); +void create_ground_object(uint32 item_id, float x, float y, float z, float h); +void create_ground_object(uint32 item_id, float x, float y, float z, float h, uint32 decay_time); +void create_ground_object_from_model(const char *model, float x, float y, float z, float h); +void create_ground_object_from_model(const char *model, float x, float y, float z, float h, int type); +void create_ground_object_from_model(const char *model, float x, float y, float z, float h, int type, uint32 decay_time); +void create_door(const char *model, float x, float y, float z, float h, int open_type, int size); +void modify_npc_stat(const char *id, const char *value); +int collect_items(uint32 item_id, bool remove); +void update_spawn_timer(uint32 id, uint32 new_time); +void merchant_set_item(uint32 npc_id, uint32 item_id); +void merchant_set_item(uint32 npc_id, uint32 item_id, uint32 quantity); +int merchant_count_item(uint32 npc_id, uint32 item_id); +std::string item_link(int item_id); +void say_link(const char *phrase, bool silent, const char *link_name); +const char *get_guild_name_by_id(uint32 guild_id); +uint32 create_instance(const char *zone, uint32 version, uint32 duration); +void destroy_instance(uint32 instance_id); +int get_instance_id(const char *zone, uint32 version); +void assign_to_instance(uint32 instance_id); +void assign_group_to_instance(uint32 instance_id); +void assign_raid_to_instance(uint32 instance_id); +void flag_instance_by_group_leader(uint32 zone, uint32 version); +void flag_instance_by_raid_leader(uint32 zone, uint32 version); +void fly_mode(int flymode); +int faction_value(); +void check_title(uint32 title_set); +void enable_title(uint32 title_set); +void remove_title(uint32 title_set); +void wear_change(uint32 slot, uint32 texture); +void voice_tell(const char *str, uint32 macro_num, uint32 race_num, uint32 gender_num); +void send_mail(const char *to, const char *from, const char *subject, const char *message); +void cross_zone_signal_client_by_char_id(uint32 player_id, int signal); +void cross_zone_signal_client_by_name(const char *player, int signal); +void cross_zone_message_player_by_name(uint32 type, const char *player, const char *message); +luabind::object get_qglobals(Lua_NPC npc, Lua_Client client); +luabind::object get_qglobals(Lua_Client client, Lua_NPC npc); +luabind::object get_qglobals(Lua_Client client); +luabind::object get_qglobals(Lua_NPC npc); +luabind::object get_qglobals(); +Lua_EntityList get_entity_list(); +int get_zone_id(); +const char *get_zone_long_name(); +const char *get_zone_short_name(); +int get_zone_instance_id(); +int get_zone_instance_version(); +int get_zone_weather(); +luabind::object get_zone_time(); +``` \ No newline at end of file diff --git a/Lua-Object.md b/Lua-Object.md index 93c6bbc..b54cd6c 100644 --- a/Lua-Object.md +++ b/Lua-Object.md @@ -1,4 +1,4 @@ -Lua_Object is a class exported to Lua that represent the Object object from EQEmu. +Lua_Object is a class exported to Lua that represent the Object object from EQEmu. All Lua_Object are also [Lua_Entity](Lua-Entity). ### Properties ``` diff --git a/Lua-Parser.md b/Lua-Parser.md index 35e01e5..7c9e7de 100644 --- a/Lua-Parser.md +++ b/Lua-Parser.md @@ -3,11 +3,23 @@ The Lua Parser is a quest parser for EQEmu that uses the Lua embedded programmin We use Lua 5.1 so the [Lua 5.1 Manual](http://www.lua.org/manual/5.1/manual.html) applies. Section 2 is a bit of a dense read but may be of particular interest to those just getting started with Lua. ## Table of Contents +* [Init Scripts](#init-scripts) * [NPC Scripts](#npc-scripts) * [Player Scripts](#player-scripts) * [Item Scripts](#item-scripts) * [Spell Scripts](#spell-scripts) * [Encounter Scripts](#encounter-scripts) +* [Events](#events) +* [API](#api) + + +### Init Scripts +On Lua Parser reload it will attempt to load two scripts with no function env. +* +* ./quests/zone/script_init.lua +* ./quests/global/script_init.lua + +These are useful for setting up modules to load automatically or for loading encounters. ### NPC Scripts @@ -25,12 +37,141 @@ NPCs will also attempt to load a global NPC script that is attached to all NPCs ### Player Scripts +Player Scripts are quest scripts attached to Players. +Players will load a script on the first event that triggers them and they will load one and only one from the following location. Which ever it finds first in the following order: +* ./quests/zone/player_v[instance_version].lua +* ./quests/zone/player.lua +* ./quests/global/player.lua + +Players will also attempt ot load a global Player script that is attached to all Players from the following location: +* ./quests/global/player.lua ### Item Scripts +Item Scripts are quest scripts attached to Items. +Items will load a script on the first event that triggers them and will load one and only one from the following location. Which ever it finds first in the following order: +* ./quests/zone/items/item_script.lua +* ./quests/items/item_script.lua + +The format of the item_script is as follows: +``` +If ScriptFileID != 0 + item_script = "script_" + ScriptFileID +Else If CharmFile != "" + item_script = CharmFile +Else + item_script = item_id +``` ### Spell Scripts +Spell Scripts are quest scripts attached to Spells. +Spells will load a script on the first event that triggers them and will load one and only one from the following location. Which ever it finds first in the following order: +* ./quests/zone/spells/spell_id.lua +* ./quests/spells/spell_id.lua -### Encounter Scripts \ No newline at end of file +### Encounter Scripts +Encounter scripts are quest scripts that are only loaded after explicitly called with: + +`eq.load_encounter("encounter_name")` + +Encounter scripts listen for specific events from other script types with the following functions: + +``` +void register_npc_event(std::string name, int evt, int npc_id, luafunction func); +void register_player_event(std::string name, int evt, luafunction func); +void register_item_event(std::string name, int evt, Lua_Item item, luafunction func); +void register_spell_event(std::string name, int evt, int spell_id, luafunction func); +``` + +Note: Encounter scripts cannot properly catch EVENT_COMMAND or EVENT_TRADE unless an existing quest is already listening for them. + + +### Events + +Quest scripts are event based, the following events are currently responded to by the Lua parser: +* event_say +* event_trade +* event_death +* event_spawn +* event_attack +* event_combat +* event_aggro +* event_slay +* event_npc_slay +* event_waypoint_arrive +* event_waypoint_depart +* event_timer +* event_signal +* event_hp +* event_enter +* event_exit +* event_enter_zone +* event_click_door +* event_loot +* event_zone +* event_level_up +* event_killed_merit +* event_cast_on +* event_task_accepted +* event_task_stage_complete +* event_task_update +* event_task_complete +* event_task_fail +* event_aggro_say +* event_player_pickup +* event_popup_response +* event_proximity_say +* event_cast +* event_cast_begin +* event_scale_calc +* event_item_enter_zone +* event_target_change +* event_hate_list +* event_spell_effect +* event_spell_buff_tic +* event_spell_fade +* event_spell_effect_translocate_complete +* event_combine_success +* event_combine_failure +* event_item_click +* event_item_click_cast +* event_group_change +* event_forage_success +* event_forage_failure +* event_fish_start +* event_fish_success +* event_fish_failure +* event_click_object +* event_discover_item +* event_disconnect +* event_connect +* event_item_tick +* event_duel_win +* event_duel_lose +* event_encounter_load +* event_encounter_unload +* event_command +* event_drop_item +* event_destroy_item +* event_feign_death + + +### API +The Lua API consisted of many exported classes and some general functions. +* [Lua_Client](Lua-Client) +* [Lua_Corpse](Lua-Corpse) +* [Lua_Door](Lua-Door) +* [Lua_Client](Lua-Client) +* [Lua_Entity](Lua-EntityList) +* [Lua_Group](Lua-Group) +* [Lua_HateList](Lua-Hate-List) +* [Lua_Item](Lua-Item) +* [Lua_ItemInst](Lua-ItemInst) +* [Lua_Mob](Lua-Mob) +* [Lua_NPC](Lua-NPC) +* [Lua_Object](Lua-Object) +* [Lua_Raid](Lua-Raid) +* [Lua_Spell](Lua-Spell) +* [Lua General Functions](Lua-General-Functions) \ No newline at end of file