diff --git a/.gitignore b/.gitignore
index 6db545d..08cc229 100644
--- a/.gitignore
+++ b/.gitignore
@@ -111,3 +111,11 @@ local.properties
# !modules/yourmodule
#
# ==================
+
+# Fractured: ship custom modules (default AC ignores /modules/*)
+!/modules/mod-paragon/
+!/modules/mod-paragon/**
+!/modules/mod-ale/
+!/modules/mod-ale/**
+# Team Docker: ALE needs Lua at configure time (see mod-ale docs)
+!docker-compose.override.yml
diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile
index 0cdc476..6aec89b 100644
--- a/apps/docker/Dockerfile
+++ b/apps/docker/Dockerfile
@@ -54,6 +54,14 @@ ARG CWITH_WARNINGS="ON"
ARG CMAKE_EXTRA_OPTIONS=""
ARG GIT_DISCOVERY_ACROSS_FILESYSTEM=1
+# mod-paragon: hard cap the build's `-j` parallelism. The default of
+# `nproc + 1` reliably OOM-kills the Docker Desktop / WSL2 VM partway
+# through the heavy mod-ale (Eluna) hook compiles when memory is at the
+# stock 8 GB allocation. Lower this if your VM still chokes; raise it
+# (or set to 0 to mean "nproc+1") if you've given Docker plenty of RAM
+# and want the fastest possible build.
+ARG CBUILD_PARALLEL="4"
+
ARG CCACHE_DIR="/ccache"
ARG CCACHE_MAXSIZE="1000MB"
ARG CCACHE_SLOPPINESS="pch_defines,time_macros,include_file_mtime"
@@ -101,7 +109,9 @@ RUN --mount=type=cache,target=/ccache,sharing=locked \
-DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \
-DCMAKE_C_COMPILER_LAUNCHER="ccache" \
-DBoost_USE_STATIC_LIBS="ON" ${CMAKE_EXTRA_OPTIONS} \
- && cmake --build . --config "$CTYPE" -j $(($(nproc) + 1)) \
+ && BUILD_J="$([ "$CBUILD_PARALLEL" = "0" ] && echo $(($(nproc) + 1)) || echo "$CBUILD_PARALLEL")" \
+ && echo "[paragon-build] cmake --build -j ${BUILD_J} (CBUILD_PARALLEL=${CBUILD_PARALLEL})" \
+ && cmake --build . --config "$CTYPE" -j "${BUILD_J}" \
&& cmake --install . --config "$CTYPE"
#############################
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
new file mode 100644
index 0000000..0dcf46c
--- /dev/null
+++ b/docker-compose.override.yml
@@ -0,0 +1,19 @@
+# Local overrides (not overwritten by git pull). ALE needs Lua at configure time.
+# See https://github.com/azerothcore/mod-ale/blob/master/docs/INSTALL.md
+services:
+ ac-worldserver:
+ build:
+ args:
+ CMAKE_EXTRA_OPTIONS: "-DLUA_VERSION=luajit"
+ ac-authserver:
+ build:
+ args:
+ CMAKE_EXTRA_OPTIONS: "-DLUA_VERSION=luajit"
+ ac-db-import:
+ build:
+ args:
+ CMAKE_EXTRA_OPTIONS: "-DLUA_VERSION=luajit"
+ ac-tools:
+ build:
+ args:
+ CMAKE_EXTRA_OPTIONS: "-DLUA_VERSION=luajit"
diff --git a/modules/mod-ale/.editorconfig b/modules/mod-ale/.editorconfig
new file mode 100644
index 0000000..eb64e2f
--- /dev/null
+++ b/modules/mod-ale/.editorconfig
@@ -0,0 +1,8 @@
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 4
+tab_width = 4
+insert_final_newline = true
+trim_trailing_whitespace = true
+max_line_length = 80
diff --git a/modules/mod-ale/.git_commit_template.txt b/modules/mod-ale/.git_commit_template.txt
new file mode 100644
index 0000000..708b551
--- /dev/null
+++ b/modules/mod-ale/.git_commit_template.txt
@@ -0,0 +1,49 @@
+### TITLE
+## Type(Scope/Subscope): Commit ultra short explanation
+## |---- Write below the examples with a maximum of 50 characters ----|
+## Example 1: fix(DB/SAI): Missing spell to NPC Hogger
+## Example 2: fix(CORE/Raid): Phase 2 of Ragnaros
+## Example 3: feat(CORE/Commands): New GM command to do something
+
+
+### DESCRIPTION
+## Explain why this change is being made, what does it fix etc...
+## |---- Write below the examples with a maximum of 72 characters per lines ----|
+## Example: Hogger (id: 492) was not charging player when being engaged.
+
+
+## Provide links to any issue, commit, pull request or other resource
+## Example 1: Closes issue #23
+## Example 2: Ported from other project's commit (link)
+## Example 3: References taken from wowpedia / wowhead / wowwiki / https://wowgaming.altervista.org/aowow/
+
+
+
+## =======================================================
+## EXTRA INFOS
+## =======================================================
+## "Type" can be:
+## feat (new feature)
+## fix (bug fix)
+## refactor (refactoring production code)
+## style (formatting, missing semi colons, etc; no code change)
+## docs (changes to documentation)
+## test (adding or refactoring tests; no production code change)
+## chore (updating bash scripts, git files etc; no production code change)
+## --------------------
+## Remember to
+## Capitalize the subject line
+## Use the imperative mood in the subject line
+## Do not end the subject line with a period
+## Separate subject from body with a blank line
+## Use the body to explain what and why rather than how
+## Can use multiple lines with "-" for bullet points in body
+## --------------------
+## More info here https://www.conventionalcommits.org/en/v1.0.0-beta.2/
+## =======================================================
+## "Scope" can be:
+## CORE (core related, c++)
+## DB (database related, sql)
+## =======================================================
+## "Subscope" is optional and depends on the nature of the commit.
+## =======================================================
diff --git a/modules/mod-ale/.gitattributes b/modules/mod-ale/.gitattributes
new file mode 100644
index 0000000..7ef9001
--- /dev/null
+++ b/modules/mod-ale/.gitattributes
@@ -0,0 +1,105 @@
+## AUTO-DETECT
+## Handle line endings automatically for files detected as
+## text and leave all files detected as binary untouched.
+## This will handle all files NOT defined below.
+* text=auto eol=lf
+
+# Text
+*.conf text
+*.conf.dist text
+*.cmake text
+
+## Scripts
+*.sh text
+*.fish text
+*.lua text
+
+## SQL
+*.sql text
+
+## C++
+*.c text
+*.cc text
+*.cxx text
+*.cpp text
+*.c++ text
+*.hpp text
+*.h text
+*.h++ text
+*.hh text
+
+
+## For documentation
+
+# Documents
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
+
+## DOCUMENTATION
+*.markdown text
+*.md text
+*.mdwn text
+*.mdown text
+*.mkd text
+*.mkdn text
+*.mdtxt text
+*.mdtext text
+*.txt text
+AUTHORS text
+CHANGELOG text
+CHANGES text
+CONTRIBUTING text
+COPYING text
+copyright text
+*COPYRIGHT* text
+INSTALL text
+license text
+LICENSE text
+NEWS text
+readme text
+*README* text
+TODO text
+
+## GRAPHICS
+*.ai binary
+*.bmp binary
+*.eps binary
+*.gif binary
+*.ico binary
+*.jng binary
+*.jp2 binary
+*.jpg binary
+*.jpeg binary
+*.jpx binary
+*.jxr binary
+*.pdf binary
+*.png binary
+*.psb binary
+*.psd binary
+*.svg text
+*.svgz binary
+*.tif binary
+*.tiff binary
+*.wbmp binary
+*.webp binary
+
+
+## ARCHIVES
+*.7z binary
+*.gz binary
+*.jar binary
+*.rar binary
+*.tar binary
+*.zip binary
+
+## EXECUTABLES
+*.exe binary
+*.pyc binary
diff --git a/modules/mod-ale/.github/images/workflow.svg b/modules/mod-ale/.github/images/workflow.svg
new file mode 100644
index 0000000..f46fc90
--- /dev/null
+++ b/modules/mod-ale/.github/images/workflow.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/modules/mod-ale/.github/workflows/build-lua51.yml b/modules/mod-ale/.github/workflows/build-lua51.yml
new file mode 100644
index 0000000..96997b5
--- /dev/null
+++ b/modules/mod-ale/.github/workflows/build-lua51.yml
@@ -0,0 +1,14 @@
+name: Build mod-eluna with Lua51 🌙
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'main'
+ pull_request:
+
+jobs:
+ build_lua51:
+ uses: ./.github/workflows/core-build-base.yml
+ with:
+ lua_version: 'lua51'
diff --git a/modules/mod-ale/.github/workflows/build-lua52.yml b/modules/mod-ale/.github/workflows/build-lua52.yml
new file mode 100644
index 0000000..66da006
--- /dev/null
+++ b/modules/mod-ale/.github/workflows/build-lua52.yml
@@ -0,0 +1,14 @@
+name: Build mod-eluna with Lua52 🌙
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'main'
+ pull_request:
+
+jobs:
+ build_lua52:
+ uses: ./.github/workflows/core-build-base.yml
+ with:
+ lua_version: 'lua52'
diff --git a/modules/mod-ale/.github/workflows/build-lua53.yml b/modules/mod-ale/.github/workflows/build-lua53.yml
new file mode 100644
index 0000000..a3fe63e
--- /dev/null
+++ b/modules/mod-ale/.github/workflows/build-lua53.yml
@@ -0,0 +1,14 @@
+name: Build mod-eluna with Lua53 🌙
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'main'
+ pull_request:
+
+jobs:
+ build_lua53:
+ uses: ./.github/workflows/core-build-base.yml
+ with:
+ lua_version: 'lua53'
diff --git a/modules/mod-ale/.github/workflows/build-lua54.yml b/modules/mod-ale/.github/workflows/build-lua54.yml
new file mode 100644
index 0000000..7aa8c87
--- /dev/null
+++ b/modules/mod-ale/.github/workflows/build-lua54.yml
@@ -0,0 +1,14 @@
+name: Build mod-eluna with Lua54 🌙
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'main'
+ pull_request:
+
+jobs:
+ build_lua54:
+ uses: ./.github/workflows/core-build-base.yml
+ with:
+ lua_version: 'lua54'
diff --git a/modules/mod-ale/.github/workflows/build-luajit.yml b/modules/mod-ale/.github/workflows/build-luajit.yml
new file mode 100644
index 0000000..c73f26f
--- /dev/null
+++ b/modules/mod-ale/.github/workflows/build-luajit.yml
@@ -0,0 +1,14 @@
+name: Build mod-eluna with LuaJIT 🌙
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'main'
+ pull_request:
+
+jobs:
+ build_luajit:
+ uses: ./.github/workflows/core-build-base.yml
+ with:
+ lua_version: 'luajit'
diff --git a/modules/mod-ale/.github/workflows/core-build-base.yml b/modules/mod-ale/.github/workflows/core-build-base.yml
new file mode 100644
index 0000000..5d1d0d1
--- /dev/null
+++ b/modules/mod-ale/.github/workflows/core-build-base.yml
@@ -0,0 +1,85 @@
+name: Build mod-eluna base 🛠️
+
+on:
+ workflow_call:
+ inputs:
+ lua_version:
+ required: true
+ type: string
+
+jobs:
+ install_and_build:
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Check out AzerothCore 🧑💻
+ uses: actions/checkout@v4
+ with:
+ repository: 'azerothcore/azerothcore-wotlk'
+ ref: 'master'
+ submodules: 'recursive'
+ fetch-depth: 0
+
+ - name: Check out module repository 📂
+ uses: actions/checkout@v4
+ with:
+ submodules: 'recursive'
+ path: 'modules/${{ github.event.repository.name }}'
+ fetch-depth: 0
+ ref: ${{ github.event.pull_request.head.sha }}
+
+ - name: Cache compilation artifacts 💾
+ uses: actions/cache@v4
+ with:
+ path: var/ccache
+ key: ccache:${{ matrix.compiler.CC }}:${{ github.ref }}:${{ github.sha }}
+ restore-keys: |
+ ccache:clang-18:${{ github.ref }}
+ ccache:clang-18
+
+ - name: Install build dependencies 🧰
+ shell: bash
+ run: |
+ sudo apt update
+ sudo apt-get -y install ccache clang cmake curl google-perftools \
+ libmysqlclient-dev make unzip build-essential cmake-data \
+ libboost-all-dev libbz2-dev libncurses5-dev libmysql++-dev \
+ libreadline6-dev libssl-dev libtool openssl zlib1g-dev
+
+ - name: Build mod-eluna with ${{ inputs.lua_version }} 🏗️
+ run: |
+ rm -rf build
+ mkdir build && cd build
+ cmake .. \
+ -DCMAKE_C_COMPILER=clang-18 \
+ -DCMAKE_CXX_COMPILER=clang++-18 \
+ -DSCRIPTS="static" \
+ -DMODULES="static" \
+ -DWITH_WARNINGS="ON" \
+ -DCMAKE_BUILD_TYPE="Release" \
+ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \
+ -DCMAKE_C_COMPILER_LAUNCHER="ccache" \
+ -DCMAKE_C_FLAGS="-Werror" \
+ -DCMAKE_CXX_FLAGS="-Werror" \
+ -DLUA_VERSION=${{ inputs.lua_version }}
+ make -j$(nproc)
+ cd ..
+
+ - name: Run Cppcheck for static code analysis 🔍
+ run: |
+ sudo apt update -y
+ sudo apt install -y cppcheck
+ cd modules/${{ github.event.repository.name }}
+ cppcheck -j$(nproc) --force --inline-suppr \
+ -I src/LuaEngine/ \
+ -I src/ \
+ --suppress=*:src/lualib/* \
+ --suppress=*:src/LuaEngine/libs/* \
+ --output-file=report.txt \
+ .
+ if [ -s report.txt ]; then
+ echo "Cppcheck detected issues 🚨:"
+ cat report.txt
+ exit 1
+ else
+ echo "No issues detected by cppcheck ✅."
+ fi
diff --git a/modules/mod-ale/.gitignore b/modules/mod-ale/.gitignore
new file mode 100644
index 0000000..c6e1299
--- /dev/null
+++ b/modules/mod-ale/.gitignore
@@ -0,0 +1,48 @@
+!.gitignore
+
+#
+#Generic
+#
+
+.directory
+.mailmap
+*.orig
+*.rej
+*.*~
+.hg/
+*.kdev*
+.DS_Store
+CMakeLists.txt.user
+*.bak
+*.patch
+*.diff
+*.REMOTE.*
+*.BACKUP.*
+*.BASE.*
+*.LOCAL.*
+
+#
+# IDE & other softwares
+#
+/.settings/
+/.externalToolBuilders/*
+# exclude in all levels
+nbproject/
+.sync.ffs_db
+*.kate-swp
+
+#
+# Eclipse
+#
+*.pydevproject
+.metadata
+.gradle
+tmp/
+*.tmp
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.project
+.cproject
diff --git a/modules/mod-ale/CMakeLists.txt b/modules/mod-ale/CMakeLists.txt
new file mode 100644
index 0000000..41b59b0
--- /dev/null
+++ b/modules/mod-ale/CMakeLists.txt
@@ -0,0 +1,21 @@
+set(LUA_VERSION "lua52" CACHE STRING "Lua version to use")
+set_property(CACHE LUA_VERSION PROPERTY STRINGS luajit lua51 lua52 lua53 lua54)
+MESSAGE(STATUS "Lua version: ${LUA_VERSION}")
+
+# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
+if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
+ cmake_policy(SET CMP0135 NEW)
+endif()
+
+option(LUA_STATIC "link lua statically" ON)
+if (LUA_STATIC)
+ MESSAGE(STATUS "Lua linking: static")
+else()
+ MESSAGE(STATUS "Lua linking: dynamic")
+endif()
+
+if (LUA_VERSION MATCHES "luajit")
+ add_subdirectory(src/lualib/luajit)
+else()
+ add_subdirectory(src/lualib/lua)
+endif()
diff --git a/modules/mod-ale/COMMUNITY_UPDATES.md b/modules/mod-ale/COMMUNITY_UPDATES.md
new file mode 100644
index 0000000..9772e82
--- /dev/null
+++ b/modules/mod-ale/COMMUNITY_UPDATES.md
@@ -0,0 +1,93 @@
+
+
+# [](https://github.com/ElunaLuaEngine/Eluna)
+
+*Unleash the power of Lua scripting in your AzerothCore server*
+
+[](https://discord.com/invite/ZKSVREE7)
+[](http://www.lua.org/manual/5.2/)
+[](http://www.azerothcore.org/)
+
+---
+
+
+---
+Made with ❤️ by the Eluna Community
+
+[⬆ Back to Top](#)
+
diff --git a/modules/mod-ale/LICENSE b/modules/mod-ale/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/modules/mod-ale/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {one line to give the program's name and a brief idea of what it does.}
+ Copyright (C) {year} {name of author}
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ {project} Copyright (C) {year} {fullname}
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/modules/mod-ale/README.md b/modules/mod-ale/README.md
new file mode 100644
index 0000000..e0f56aa
--- /dev/null
+++ b/modules/mod-ale/README.md
@@ -0,0 +1,154 @@
+
+
+# ALE - AzerothCore Lua Engine
+
+*Unleash the power of Lua scripting in your AzerothCore server*
+
+[](https://discord.com/invite/sqkPb623)
+[](http://www.lua.org/manual/5.2/)
+[](http://www.azerothcore.org/)
+
+---
+
+
+> [!IMPORTANT]
+> **ALE** is an independent Lua scripting engine specifically designed for AzerothCore. This project has **diverged from the original Eluna project** and is no longer compatible with standard Eluna scripts. Scripts written for ALE will not work with the original Eluna engine and vice versa.
+
+## 🚀 Overview
+
+ALE is a powerful, AzerothCore-specific implementation of a Lua scripting engine that enables server administrators and developers to create custom gameplay features, events, and mechanics without modifying the core server code.
+
+### Key Features
+- **Native AzerothCore Integration**: Built specifically for AzerothCore's architecture
+- **Enhanced API**: Extended functionality for AzerothCore, beyond the original Eluna specification.
+- **Community-Driven Development**: Actively maintained with community contributions
+
+## ⚠️ Compatibility Notice
+
+### ALE vs Original Eluna
+
+**ALE is NOT compatible with the original Eluna project.** This fork has evolved independently with AzerothCore-specific enhancements and API changes that make scripts non-interchangeable.
+
+### For Original Eluna Compatibility
+
+If you need to use standard Eluna scripts or maintain compatibility with the original Eluna project, please use the dedicated AzerothCore port available at:
+
+**🔗 [ElunaAzerothCore](https://github.com/ElunaLuaEngine/ElunaAzerothcore)**
+
+This repository maintains compatibility with the original Eluna API and supports standard Eluna scripts.
+
+## 📋 Table of Contents
+
+- [Installation](#-installation)
+- [Documentation](#-documentation)
+- [API Reference](#api-reference)
+- [Support](#-support)
+- [Contributing](#-contributing)
+- [Acknowledgements](#-acknowledgements)
+
+## ⚡ Installation
+
+### Prerequisites
+- AzerothCore server installation
+- Git version control system
+- CMake build system
+
+### Installation Steps
+
+```bash
+# Navigate to your AzerothCore modules directory
+cd /modules
+
+# Clone the mod-ale repository
+git clone https://github.com/azerothcore/mod-ale.git
+
+# Configure build with your preferred Lua version
+cd
+cmake ../ -DLUA_VERSION=luajit # Options: luajit, lua52, lua53, lua54
+
+# Default: If no version is specified, Lua 5.2 will be used
+
+# Rebuild your AzerothCore server
+make -j$(nproc)
+```
+
+### Supported Lua Versions
+- **LuaJIT** (Recommended for performance)
+- **Lua 5.2** (Default)
+- **Lua 5.3**
+- **Lua 5.4**
+
+## 📚 Documentation
+
+### Getting Started
+- **[Installation Guide](docs/INSTALL.md)** - Complete installation and setup instructions
+- **[Usage Guide](docs/USAGE.md)** - Learn how to write your first Lua scripts
+- **[Implementation Details](docs/IMPL_DETAILS.md)** - Advanced features and technical details
+
+### Advanced Topics
+- **[Contributing Guide](docs/CONTRIBUTING.md)** - How to contribute to ALE development
+- **[Advanced Integration](docs/MERGING.md)** - Custom builds and maintaining modifications
+
+### API Reference
+- **[mod-ale API Documentation](https://www.azerothcore.org/eluna/)** - Complete API reference for mod-ale
+- **[Hooks Documentation](https://github.com/azerothcore/mod-ale/blob/master/src/LuaEngine/Hooks.h)** - Available event hooks
+- **[Lua 5.2 Reference](http://www.lua.org/manual/5.2/)** - Official Lua language documentation
+
+> [!WARNING]
+> **API Differences**: ALE functions may not be available in the original Eluna project and vice versa. Always refer to the ALE specific documentation when developing scripts.
+
+## 💬 Support
+
+### Getting Help
+- **GitHub Issues**: [Report bugs or request features](https://github.com/azerothcore/mod-ale/issues)
+- **Discord Community**: [Join our Discord server](https://discord.com/invite/sqkPb623)
+- **AzerothCore Discord**: [Official AzerothCore support](http://www.azerothcore.org/)
+
+### Resources
+- [Lua Programming Guide](http://www.lua.org/)
+- [AzerothCore Documentation](http://www.azerothcore.org/)
+
+## 🤝 Contributing
+
+We welcome contributions from the community! Whether you code or not, there are many ways to help improve ALE.
+
+### Development Workflow
+
+
+### Quick Start
+1. **Fork** the repository
+2. **Create** a feature branch from `master`
+3. **Implement** your changes with proper testing
+4. **Follow** the existing code style and conventions
+5. **Submit** a pull request with a clear description
+
+### Full Contributing Guide
+For detailed information on how to contribute code, documentation, scripts, or help the community, see our **[Contributing Guide](docs/CONTRIBUTING.md)**.
+
+## 🌟 Acknowledgements
+
+### Original Project
+mod-ale is built upon the foundation of the original [Eluna](https://github.com/ElunaLuaEngine/Eluna) project. We acknowledge and thank the original Eluna team for their pioneering work in Lua scripting for World of Warcraft server emulators.
+
+### Related Projects
+- **[Original Eluna Repository](https://github.com/ElunaLuaEngine/Eluna)** - The original Eluna project
+- **[Eluna Discord Community](https://discord.gg/bjkCVWqqfX)** - Original Eluna community support
+- **[ElunaAzerothCore](https://github.com/Eluna-Ports/ElunaAzerothCore)** - AzerothCore with original Eluna compatibility
+
+### Supported Emulators
+- **[AzerothCore](http://www.azerothcore.org/)** - Primary target (this project)
+- **[TrinityCore](https://www.trinitycore.org/)** - Original Eluna support
+- **[MaNGOS](https://www.getmangos.eu/)**
+- **[cMaNGOS](https://cmangos.net/)**
+
+## 📄 License
+
+This project is licensed under the GNU General Public License v3.0. See [LICENSE](https://github.com/azerothcore/mod-ale/blob/master/LICENSE) for details.
+
+---
+
+
+Developed with ❤️ by the AzerothCore and ALE community
+
+[⬆ Back to Top](#-overview)
+
+
+# 🤝 Contributing to ALE
+
+*Help improve the AzerothCore Lua Engine*
+
+[](https://discord.com/invite/ZKSVREE7)
+[](https://github.com/azerothcore/mod-ale/issues)
+
+---
+
+
+> [!IMPORTANT]
+> We welcome contributions from everyone! Whether you code or not, there are many ways to help improve ALE.
+
+## 📋 Table of Contents
+
+- [Ways to Contribute](#-ways-to-contribute)
+- [Contributing Code](#-contributing-code)
+- [Reporting Issues](#-reporting-issues)
+- [Improving Documentation](#-improving-documentation)
+- [Creating Scripts](#-creating-scripts)
+- [Development Guidelines](#-development-guidelines)
+
+## 🌟 Ways to Contribute
+
+You don't need to be a developer to contribute to ALE! Here are various ways you can help:
+
+### 💻 For Developers
+
+- **Fix Bugs**: Browse open issues and submit fixes
+- **Add Features**: Implement new functionality
+- **Improve Performance**: Optimize existing code
+- **Write Tests**: Help ensure code quality
+- **Review Pull Requests**: Provide feedback on proposed changes
+
+### 📚 For Writers
+
+- **Improve Documentation**: Fix typos, clarify explanations, add examples
+- **Write Tutorials**: Create guides for common use cases
+- **Translate**: Help make documentation available in other languages
+- **API Documentation**: Document undocumented functions
+
+### 🎮 For Scripters
+
+- **Create Example Scripts**: Share useful script templates
+- **Report Script Issues**: Help identify API problems
+- **Share Best Practices**: Document scripting patterns
+- **Test New Features**: Verify new functionality works as expected
+
+### 💬 For Community Members
+
+- **Answer Questions**: Help others on Discord or GitHub
+- **Report Bugs**: Submit detailed issue reports
+- **Test Releases**: Try pre-release versions and provide feedback
+- **Spread the Word**: Share ALE with other server administrators
+
+## 💻 Contributing Code
+
+### Getting Started
+
+1. **[Set up Git](https://help.github.com/articles/set-up-git/)** if you haven't already
+
+2. **[Fork the repository](https://help.github.com/articles/fork-a-repo/)** to your GitHub account:
+ - Main repository: [mod-ale](https://github.com/azerothcore/mod-ale)
+ - Core engine: [ALE source in mod-ale](https://github.com/azerothcore/mod-ale/tree/master/src/LuaEngine)
+
+3. **Clone your fork** to your local machine:
+ ```bash
+ git clone https://github.com/YOUR_USERNAME/mod-ale.git
+ cd mod-ale
+ ```
+
+4. **Add the upstream repository**:
+ ```bash
+ git remote add upstream https://github.com/azerothcore/mod-ale.git
+ ```
+
+### Development Workflow
+
+1. **Create a feature branch** from `master`:
+ ```bash
+ git checkout master
+ git pull upstream master
+ git checkout -b feature/my-awesome-feature
+ ```
+
+2. **Make your changes**:
+ - Write clean, readable code
+ - Follow existing code style
+ - Add comments where necessary
+ - Test your changes thoroughly
+
+3. **Commit your changes**:
+ ```bash
+ git add .
+ git commit -m "Add feature: description of what you did"
+ ```
+
+ **Commit Message Guidelines:**
+ - Use clear, descriptive messages
+ - Start with a verb (Add, Fix, Update, Remove, etc.)
+ - Keep the first line under 50 characters
+ - Add detailed explanation in subsequent lines if needed
+
+ ```
+ Add new Player:GetQuestStatus method
+
+ This method allows scripts to check the status of a player's quest
+ without needing to retrieve the full quest object. This improves
+ performance for common quest-checking scenarios.
+ ```
+
+4. **Push to your fork**:
+ ```bash
+ git push origin feature/my-awesome-feature
+ ```
+
+5. **[Open a Pull Request](https://help.github.com/articles/using-pull-requests/)**:
+ - Go to your fork on GitHub
+ - Click "New Pull Request"
+ - Select your feature branch
+ - Provide a clear description of your changes
+ - Link any related issues
+
+### Code Style Guidelines
+
+#### C++ Code
+
+```cpp
+// Use clear, descriptive names
+int GetPlayerLevel(Player* player)
+{
+ if (!player)
+ return 0;
+
+ return player->getLevel();
+}
+
+// Prefer modern C++ features
+std::vector GetPlayerQuests(Player* player)
+{
+ std::vector quests;
+ // ... implementation
+ return quests;
+}
+```
+
+**Key Points:**
+- Use 4 spaces for indentation (no tabs)
+- Opening braces on the same line for functions
+- Use meaningful variable names
+- Add comments for complex logic
+- Follow existing patterns in the codebase
+
+#### Lua Code (for examples/tests)
+
+```lua
+-- Use local variables
+local QUEST_STATUS_COMPLETE = 1
+
+-- Clear, descriptive function names
+local function OnQuestComplete(event, player, quest)
+ if not player or not quest then
+ return
+ end
+
+ local questId = quest:GetId()
+ print("Player", player:GetName(), "completed quest", questId)
+end
+
+-- Register with clear event IDs
+RegisterPlayerEvent(8, OnQuestComplete) -- PLAYER_EVENT_ON_QUEST_COMPLETE
+```
+
+### Testing Your Changes
+
+Before submitting a PR:
+
+1. **Compile the code** without errors
+2. **Test basic functionality** with your changes
+3. **Test edge cases** (nil values, invalid input, etc.)
+4. **Verify no regressions** (existing features still work)
+5. **Test on a real server** if possible
+
+## 🐛 Reporting Issues
+
+Good bug reports help us fix problems faster!
+
+### Before Reporting
+
+1. **Search existing issues** to avoid duplicates
+2. **Test on latest version** to ensure it's not already fixed
+3. **Gather information** about your setup and the problem
+
+### Creating a Good Issue Report
+
+Use this template:
+
+```markdown
+**Describe the bug**
+A clear description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Load script '...'
+2. Trigger event '...'
+3. See error
+
+**Expected behavior**
+What you expected to happen.
+
+**Actual behavior**
+What actually happened.
+
+**Environment:**
+- AzerothCore version: [e.g., commit hash]
+- ALE version: [e.g., commit hash]
+- Lua version: [e.g., LuaJIT, Lua 5.2]
+- OS: [e.g., Ubuntu 20.04]
+
+**Script/Code:**
+```lua
+-- Minimal script that reproduces the issue
+local function OnLogin(event, player)
+ -- problematic code
+end
+RegisterPlayerEvent(3, OnLogin)
+```
+
+**Error messages:**
+```
+Paste any error messages from the log here
+```
+
+**Additional context**
+Any other information that might be helpful.
+```
+
+## 📖 Improving Documentation
+
+Documentation is crucial for helping users understand ALE.
+
+### What to Document
+
+- **API Functions**: Descriptions, parameters, return values, examples
+- **Events**: When they trigger, what parameters they pass
+- **Best Practices**: Common patterns and anti-patterns
+- **Examples**: Real-world use cases and complete scripts
+
+### Documentation Workflow
+
+1. Fork the repository
+2. Edit documentation files in the `docs/` folder
+3. Use clear, concise language
+4. Add code examples where helpful
+5. Test any code examples you include
+6. Submit a Pull Request
+
+### Markdown Tips
+
+```markdown
+# Use headers for structure
+
+## Subsections help organize content
+
+**Bold** for emphasis
+
+`code` for inline code
+
+```lua
+-- Code blocks for examples
+```
+
+> [!TIP]
+> Use callouts for important information
+
+- Lists
+- Keep
+- Things
+- Organized
+```
+
+## 🎮 Creating Scripts
+
+Share your scripts with the community!
+
+### Where to Share
+
+- **Discord**: [ALE Community](https://discord.com/invite/bx3y5Qmy)
+- **GitHub Discussions**: For detailed explanations
+- **Pull Requests**: Add example scripts to the repository
+
+### Script Quality Guidelines
+
+Good example scripts should:
+
+1. **Be Well Commented**: Explain what the code does
+2. **Handle Edge Cases**: Check for nil values, validate input
+3. **Follow Best Practices**: Use local variables, cache data, etc.
+4. **Include Usage Instructions**: How to install and configure
+5. **Be Self-Contained**: Include all necessary code
+
+### Example Template
+
+```lua
+--[[
+Script Name: Player Welcome System
+Description: Sends customized welcome message based on player level
+Author: YourName
+Version: 1.0
+Date: 2025-01-09
+
+Installation:
+1. Place this file in lua_scripts folder
+2. Configure MESSAGES table below
+3. Restart server
+
+Features:
+- Different messages for different level ranges
+- Personalized with player name
+- Configurable message tiers
+]]
+
+-- Configuration
+local MESSAGES = {
+ [1] = "Welcome to the server, %s! Enjoy your adventure!",
+ [10] = "Welcome back, %s! You've grown stronger!",
+ [60] = "Greetings, veteran %s! The endgame awaits!",
+ [80] = "Welcome, champion %s! You've mastered your class!"
+}
+
+-- Get appropriate message for player level
+local function GetWelcomeMessage(player)
+ local level = player:GetLevel()
+ local message = MESSAGES[1] -- Default message
+
+ -- Find highest tier message player qualifies for
+ for minLevel, msg in pairs(MESSAGES) do
+ if level >= minLevel then
+ message = msg
+ end
+ end
+
+ return string.format(message, player:GetName())
+end
+
+-- Event handler
+local function OnLogin(event, player)
+ if not player then
+ return
+ end
+
+ local message = GetWelcomeMessage(player)
+ player:SendBroadcastMessage(message)
+end
+
+-- Register the event
+RegisterPlayerEvent(3, OnLogin) -- PLAYER_EVENT_ON_LOGIN
+```
+
+## 🔨 Development Guidelines
+
+### Project Structure
+
+```
+mod-ale/
+├── src/
+│ └── LuaEngine/ # Core ALE source code
+│ ├── docs/ # Source documentation
+│ ├── methods/ # API method implementations
+│ └── hooks/ # Event hook implementations
+├── docs/ # User-facing documentation
+├── conf/ # Configuration file templates
+└── README.md # Project overview
+```
+
+### Branch Strategy
+
+- **master**: Stable, production-ready code
+- **feature/**: New features (e.g., `feature/add-new-hook`)
+- **fix/**: Bug fixes (e.g., `fix/player-null-check`)
+- **docs/**: Documentation updates (e.g., `docs/update-install-guide`)
+
+### Pull Request Guidelines
+
+**Good PR:**
+- Single, focused change
+- Clear title and description
+- Links related issues
+- Passes compilation
+- Includes documentation updates if needed
+
+**PR Template:**
+
+```markdown
+## Description
+Brief description of the changes
+
+## Type of Change
+- [ ] Bug fix
+- [ ] New feature
+- [ ] Documentation update
+- [ ] Performance improvement
+
+## Testing
+Describe how you tested your changes
+
+## Related Issues
+Fixes #123
+Related to #456
+
+## Checklist
+- [ ] Code compiles without errors
+- [ ] Tested on a running server
+- [ ] Updated documentation
+- [ ] Followed code style guidelines
+```
+
+---
+
+## 🌟 Acknowledgements
+
+ALE is built upon the foundation of the [Eluna Lua Engine](https://github.com/ElunaLuaEngine/Eluna). We acknowledge and thank the Eluna team for their pioneering work in Lua scripting for World of Warcraft server emulators.
+
+- **[Original Eluna Repository](https://github.com/ElunaLuaEngine/Eluna)**
+- **[Eluna Discord Community](https://discord.gg/bjkCVWqqfX)**
+
+---
+
+
+Developed with ❤️ by the AzerothCore and ALE community
+
+Thank you for contributing! 🎉
+
+[⬆ Back to Top](#-contributing-to-ale)
+
diff --git a/modules/mod-ale/docs/IMPL_DETAILS.md b/modules/mod-ale/docs/IMPL_DETAILS.md
new file mode 100644
index 0000000..7c9dd02
--- /dev/null
+++ b/modules/mod-ale/docs/IMPL_DETAILS.md
@@ -0,0 +1,430 @@
+
+
+# ⚙️ ALE Implementation Details
+
+*Advanced features and technical documentation for ALE*
+
+[](https://discord.com/invite/ZKSVREE7)
+[](http://www.azerothcore.org/)
+
+---
+
+
+> [!IMPORTANT]
+> This document covers advanced implementation details and best practices for ALE (AzerothCore Lua Engine). For basic usage, see the [Usage Guide](USAGE.md).
+
+## 📋 Table of Contents
+
+- [Configuration](#-configuration)
+- [Script Management](#-script-management)
+- [Advanced Features](#-advanced-features)
+- [Database Integration](#-database-integration)
+- [Performance Tips](#-performance-tips)
+- [Debugging](#-debugging)
+
+## ⚙️ Configuration
+
+### Server Configuration File
+
+ALE settings are located in the AzerothCore server configuration file.
+
+> [!WARNING]
+> **Important:** Always use the new configuration file generated after compiling with ALE. Without it, error logging and output may not function correctly.
+
+### Available Settings
+
+- **Enable/Disable ALE**: Toggle the Lua engine on or off
+- **Traceback Function**: Enable detailed debug information in error messages
+- **Script Folder Location**: Configure where ALE looks for script files
+- **Logging Settings**: Control log verbosity and output destinations
+
+## 🔄 Script Management
+
+### Script Reloading
+
+Reload scripts during development with:
+
+```
+.reload ale
+```
+
+> [!CAUTION]
+> **Development Only:** This command is for testing purposes only. For production use or troubleshooting, always restart the server.
+
+**Limitations:**
+- Events are not re-triggered for existing entities (e.g., logged-in players)
+- Some state may persist from the previous load
+- Race conditions may occur with active scripts
+
+### Script Loading
+
+#### Default Behavior
+
+- **Default Folder**: `lua_scripts` (configurable in server config)
+- **Hidden Folders**: Ignored during loading
+- **File Names**: Must be unique across all subdirectories
+- **Loading Order**: Not guaranteed to be alphabetical
+
+#### Load Priority
+
+Files with `.ext` extension load before standard `.lua` files:
+- `init.ext` loads before `script.lua`
+
+> [!TIP]
+> Instead of using `.ext`, prefer the standard Lua `require()` function for better maintainability.
+
+#### Using Require
+
+The entire script folder structure is added to Lua's require path:
+
+```lua
+-- Require file: lua_scripts/utilities/helpers.lua
+require("utilities/helpers")
+
+-- Or simply (if in root)
+require("helpers")
+```
+
+**Note:** Omit the `.lua` extension when using `require()`.
+
+## 🎯 Advanced Features
+
+### Automatic Type Conversion
+
+In C++, you must explicitly cast between types:
+```cpp
+Unit* unit = ...;
+Player* player = unit->ToPlayer(); // Manual cast required
+```
+
+In ALE, this happens automatically:
+```lua
+-- unit is automatically converted to the most specific type
+-- No manual casting needed!
+local name = unit:GetName() -- Works for Unit, Player, Creature, etc.
+```
+
+All objects are automatically converted to their most specific type, giving you full access to all available methods.
+
+### Storing Userdata Objects
+
+> [!CAUTION]
+> **Critical:** Never store C++-managed userdata objects in global variables or across events!
+
+#### The Problem
+
+C++ manages object lifetimes. A stored pointer can become invalid when:
+- A player logs out
+- A creature despawns
+- An object is deleted by the core
+
+Accessing invalid pointers causes crashes.
+
+#### The Solution
+
+Objects are automatically set to `nil` when they become unsafe (usually when the hook function ends).
+
+**Instead of storing objects:**
+
+```lua
+-- ❌ WRONG: Don't do this
+local savedPlayer = nil
+
+local function OnLogin(event, player)
+ savedPlayer = player -- Bad! Will be nil after function ends
+end
+
+local function OnLogout(event, player)
+ savedPlayer:SendMessage("Test") -- CRASH! savedPlayer is nil
+end
+```
+
+**Store GUIDs instead:**
+
+```lua
+-- ✅ CORRECT: Store GUID and retrieve object when needed
+local playerGUID = nil
+
+local function OnLogin(event, player)
+ playerGUID = player:GetGUID()
+end
+
+local function SomeLaterEvent(event, ...)
+ local player = GetPlayerByGUID(playerGUID)
+ if player then
+ player:SendMessage("Test") -- Safe!
+ end
+end
+```
+
+#### Safe to Store
+
+These userdata objects are Lua-managed and safe to store:
+- Query results (`ALEQuery`)
+- World packets (`WorldPacket`)
+- 64-bit numbers (`uint64`, `int64`)
+
+### Userdata Metamethods
+
+#### ToString Support
+
+All userdata objects implement `tostring`:
+
+```lua
+print(player) -- Outputs: Player (Name: "John", GUID: 123456)
+print(creature) -- Outputs: Creature (Entry: 1234, GUID: 789012)
+```
+
+#### Global Metatables
+
+Each class has a global table containing its methods:
+
+```lua
+-- These global tables exist:
+Player = { GetName = function(...) end, ... }
+Creature = { GetEntry = function(...) end, ... }
+GameObject = { GetDisplayId = function(...) end, ... }
+```
+
+#### Custom Methods
+
+You can extend classes with custom methods:
+
+```lua
+function Player:CustomGreeting()
+ self:SendBroadcastMessage("Welcome, " .. self:GetName() .. "!")
+end
+
+function GameObject:IsChest()
+ return self:GetGoType() == 3
+end
+
+-- Usage:
+player:CustomGreeting()
+if gameobject:IsChest() then
+ print("Found a chest!")
+end
+```
+
+> [!WARNING]
+> Avoid modifying or deleting global class tables in normal code, as this can break other scripts.
+
+## 🗄️ Database Integration
+
+### Query Performance
+
+> [!IMPORTANT]
+> Database queries are slow! The entire server waits while data is fetched from disk.
+
+#### Synchronous vs Asynchronous
+
+**Use `Execute` for non-SELECT queries:**
+```lua
+-- Asynchronous - doesn't block server
+WorldDBExecute("UPDATE creature SET level = 80 WHERE entry = 1234")
+```
+
+**Use `Query` only when you need results:**
+```lua
+-- Synchronous - blocks server until complete
+local result = WorldDBQuery("SELECT name FROM creature_template WHERE entry = 1234")
+```
+
+#### Best Practices
+
+1. **Cache at Startup**: Load data once during server start or script load
+2. **Use Tables**: Store frequently accessed data in Lua tables
+3. **Batch Operations**: Combine multiple queries when possible
+4. **Async When Possible**: Use `Execute` instead of `Query` if you don't need results
+
+```lua
+-- ✅ Good: Cache data at startup
+local creatureNames = {}
+
+local function LoadCreatureNames()
+ local query = WorldDBQuery("SELECT entry, name FROM creature_template")
+ if query then
+ repeat
+ local entry = query:GetUInt32(0)
+ local name = query:GetString(1)
+ creatureNames[entry] = name
+ until not query:NextRow()
+ end
+end
+
+-- Call once at server start
+RegisterServerEvent(33, LoadCreatureNames) -- SERVER_EVENT_ON_CONFIG_LOAD
+
+-- Now use cached data
+local function OnSpawn(event, creature)
+ local name = creatureNames[creature:GetEntry()]
+ print("Spawned:", name)
+end
+```
+
+### Database Types
+
+> [!CAUTION]
+> **Critical:** Use the correct getter function for each database type!
+
+MySQL performs math in specific formats. Using the wrong getter can return incorrect values on different systems.
+
+#### Type Mapping Table
+
+| Base Type | Defined Type | Database Type | Query Getter |
+|---------------------------|--------------|-----------------------|-------------------|
+| char | int8 | tinyint(3) | `GetInt8()` |
+| short int | int16 | smallint(5) | `GetInt16()` |
+| (long int / int) | int32 | mediumint(8) | `GetInt32()` |
+| (long int / int) | int32 | int(10) | `GetInt32()` |
+| long long int | int64 | bigint(20) | `GetInt64()` |
+| unsigned char | uint8 | tinyint(3) unsigned | `GetUInt8()` |
+| unsigned short int | uint16 | smallint(5) unsigned | `GetUInt16()` |
+| unsigned (long int / int) | uint32 | mediumint(8) unsigned | `GetUInt32()` |
+| unsigned (long int / int) | uint32 | int(10) unsigned | `GetUInt32()` |
+| unsigned long long int | uint64 | bigint(20) unsigned | `GetUInt64()` |
+| float | float | float | `GetFloat()` |
+| double | double | double, decimal | `GetDouble()` |
+| std::string | std::string | varchar, text, etc. | `GetString()` |
+
+#### Example
+
+```lua
+-- ❌ WRONG: Can return 0 or 1 depending on system
+local result = WorldDBQuery("SELECT 1")
+local value = result:GetUInt32(0) -- Incorrect type!
+
+-- ✅ CORRECT: Always returns 1
+local result = WorldDBQuery("SELECT 1")
+local value = result:GetInt64(0) -- Correct type for literal numbers
+```
+
+## ⚡ Performance Tips
+
+### Variable Scope
+
+```lua
+-- ✅ Fast: Local variables
+local count = 0
+for i = 1, 1000 do
+ count = count + 1
+end
+
+-- ❌ Slow: Global variables
+count = 0
+for i = 1, 1000 do
+ count = count + 1
+end
+```
+
+### Table Efficiency
+
+```lua
+-- ❌ Avoid: Creating tables in loops
+for i = 1, 1000 do
+ local data = {i, i*2, i*3} -- 1000 table allocations!
+end
+
+-- ✅ Better: Reuse tables
+local data = {}
+for i = 1, 1000 do
+ data[1], data[2], data[3] = i, i*2, i*3
+end
+```
+
+### Cache Frequently Used Values
+
+```lua
+-- ❌ Avoid: Repeated method calls
+for i = 1, 100 do
+ player:GetName() -- Calls C++ function 100 times
+end
+
+-- ✅ Better: Cache the value
+local playerName = player:GetName()
+for i = 1, 100 do
+ -- Use playerName
+end
+```
+
+### Minimize Database Access
+
+```lua
+-- ❌ Bad: Query in a loop
+for entry = 1, 100 do
+ local query = WorldDBQuery("SELECT name FROM creature_template WHERE entry = " .. entry)
+end
+
+-- ✅ Good: Single query with IN clause
+local query = WorldDBQuery("SELECT entry, name FROM creature_template WHERE entry BETWEEN 1 AND 100")
+```
+
+## 🐛 Debugging
+
+### Print Debugging
+
+```lua
+-- Basic output
+print("Debug: Function called")
+
+-- With variables
+print("Player:", player:GetName(), "Level:", player:GetLevel())
+
+-- Object inspection
+print(player) -- Uses tostring metamethod
+```
+
+### Error Logs
+
+Check these locations for errors:
+- **Server Console**: Real-time output
+- **Log File**: Persistent record in server folder
+
+### Traceback
+
+Enable traceback in the server config for detailed error information:
+```
+ALE.TraceBack = 1
+```
+
+This adds call stack information to errors.
+
+### Incremental Testing
+
+1. **Start Small**: Test basic functionality first
+2. **Add Gradually**: Implement features one at a time
+3. **Test Each Step**: Verify each addition works before moving on
+4. **Use Reload**: Use `.reload ale` for quick iteration (dev only)
+5. **Full Restart**: Always do final testing with a server restart
+
+### Common Issues
+
+**Objects becoming nil:**
+- You're storing userdata objects instead of GUIDs
+- See [Storing Userdata Objects](#storing-userdata-objects)
+
+**Wrong database values:**
+- Using incorrect getter function for database type
+- See [Database Types](#database-types)
+
+**Script not loading:**
+- Check for duplicate filenames
+- Check log for syntax errors
+- Verify script folder configuration
+
+---
+
+## 🌟 Acknowledgements
+
+ALE is built upon the foundation of the [Eluna Lua Engine](https://github.com/ElunaLuaEngine/Eluna). We acknowledge and thank the Eluna team for their pioneering work in Lua scripting for World of Warcraft server emulators.
+
+- **[Original Eluna Repository](https://github.com/ElunaLuaEngine/Eluna)**
+- **[Eluna Discord Community](https://discord.gg/bjkCVWqqfX)**
+
+---
+
+
+Developed with ❤️ by the AzerothCore and ALE community
+
+[⬆ Back to Top](#-ale-implementation-details)
+
diff --git a/modules/mod-ale/docs/INSTALL.md b/modules/mod-ale/docs/INSTALL.md
new file mode 100644
index 0000000..80fa23a
--- /dev/null
+++ b/modules/mod-ale/docs/INSTALL.md
@@ -0,0 +1,308 @@
+
+
+# 🔧 ALE Installation Guide
+
+*Step-by-step instructions for installing ALE on AzerothCore*
+
+[](https://discord.com/invite/ZKSVREE7)
+[](http://www.azerothcore.org/)
+
+---
+
+
+> [!IMPORTANT]
+> ALE is designed specifically for **AzerothCore**. If you're looking for compatibility with other emulators, check out [ElunaAzerothCore](https://github.com/Eluna-Ports/ElunaAzerothCore) for original Eluna compatibility.
+
+## 📋 Table of Contents
+
+- [Requirements](#-requirements)
+- [Installation](#-installation)
+- [Configuration](#-configuration)
+- [Updating](#-updating)
+- [Troubleshooting](#-troubleshooting)
+- [Next Steps](#-next-steps)
+
+## ⚡ Requirements
+
+Before installing ALE, ensure you have:
+
+### System Requirements
+
+- **AzerothCore Server**: A working AzerothCore installation
+- **Git**: Version control system for cloning repositories
+- **CMake**: Build system (3.16 or higher recommended)
+- **Compiler with C++11 Support**:
+ - Windows: Visual Studio 2019 or later
+ - Linux: GCC 7+ or Clang 5+
+ - macOS: Xcode 10+
+
+### Build Dependencies
+
+ALE can use either:
+- **ACE** (ADAPTIVE Communication Environment), or
+- **Boost** (for filesystem library)
+
+These should already be available if you have AzerothCore set up.
+
+## 🚀 Installation
+
+### Step 1: Navigate to Modules Directory
+
+Open your terminal (or Git Bash on Windows) and navigate to your AzerothCore modules directory:
+
+```bash
+cd /modules
+```
+
+**Example:**
+```bash
+cd /home/user/azerothcore/modules
+```
+
+### Step 2: Clone the Repository
+
+Clone the mod-ale repository into your modules folder:
+
+```bash
+git clone https://github.com/azerothcore/mod-ale.git
+```
+
+This will create a `mod-ale` folder containing all necessary files.
+
+### Step 3: Configure Build
+
+Navigate to your AzerothCore build directory and configure with CMake:
+
+```bash
+cd
+cmake ../ -DLUA_VERSION=luajit
+```
+
+#### Lua Version Options
+
+Choose your preferred Lua version with the `-DLUA_VERSION` flag:
+
+| Version | Flag | Notes |
+|---------|------|-------|
+| **LuaJIT** | `luajit` | **Recommended** - Best performance via JIT compilation |
+| **Lua 5.2** | `lua52` | **Default** - Used if no version specified |
+| **Lua 5.3** | `lua53` | Newer features, compatible |
+| **Lua 5.4** | `lua54` | Latest version, all features |
+
+**Examples:**
+
+```bash
+# Using LuaJIT (recommended for performance)
+cmake ../ -DLUA_VERSION=luajit
+
+# Using Lua 5.3
+cmake ../ -DLUA_VERSION=lua53
+
+# Using default (Lua 5.2)
+cmake ../
+```
+
+### Step 4: Compile
+
+Compile AzerothCore with the newly added module:
+
+**Linux/macOS:**
+```bash
+make -j$(nproc)
+```
+
+**Windows:**
+```bash
+cmake --build . --config Release
+```
+
+> [!TIP]
+> The `-j$(nproc)` flag uses all available CPU cores for faster compilation.
+
+### Step 5: Update Configuration
+
+> [!CAUTION]
+> **Critical Step:** After compiling, you must use the newly generated configuration files!
+
+The compilation process generates updated config files with ALE settings. Without these, ALE may not function correctly (no error messages, logging issues, etc.).
+
+**Location of config files:**
+- Usually in your server's `etc/modules` or `configs/modules` directory
+- Look for files like `mod-ale.conf`
+
+Copy the new `.conf.dist` files:
+
+```bash
+# Example - adjust paths as needed
+cp mod-ale.conf.dist mod-ale.conf
+```
+
+Then edit `worldserver.conf` and configure ALE settings (see [Configuration](#-configuration) below).
+
+## ⚙️ Configuration
+
+### ALE Settings in mod-ale.conf
+
+After installation, configure ALE by editing your `mod-ale.conf` file:
+
+```ini
+###################################################################################################
+# ALE (AZEROTHCORE LUA ENGINE)
+###################################################################################################
+
+# Enable or disable ALE
+# Default: 1 (enabled)
+ALE.Enabled = 1
+
+# Enable traceback for detailed error information
+# Useful for debugging but has performance overhead
+# Default: 1 (enabled)
+ALE.TraceBack = 1
+
+# Script folder location (relative to server binary)
+# Default: "lua_scripts"
+ALE.ScriptPath = "lua_scripts"
+```
+
+### Creating the Scripts Folder
+
+Create the scripts folder next to your server executable:
+
+```bash
+mkdir lua_scripts
+```
+
+Place your `.lua` script files in this folder. ALE will automatically load them on server start.
+
+## 🔄 Updating
+
+Keep your ALE installation up to date with the latest features and bug fixes.
+
+### Update Steps
+
+1. **Navigate to the mod-ale directory:**
+
+```bash
+cd /modules/mod-ale
+```
+
+2. **Pull the latest changes:**
+
+```bash
+git pull
+```
+
+3. **Navigate to your build directory:**
+
+```bash
+cd
+```
+
+4. **Reconfigure if needed (optional):**
+
+```bash
+cmake ../ -DLUA_VERSION=luajit
+```
+
+5. **Recompile:**
+
+```bash
+# Linux/macOS
+make -j$(nproc)
+
+# Windows
+cmake --build . --config Release
+```
+
+6. **Restart your server** to load the updated version
+
+> [!TIP]
+> Always backup your database and scripts before updating!
+
+## 🔧 Troubleshooting
+
+### ALE Not Loading
+
+**Check these things:**
+
+1. **Config file**: Ensure you're using the new `worldserver.conf` generated after compilation
+2. **Enabled setting**: Verify `ALE.Enabled = 1` in config
+3. **Script path**: Ensure `lua_scripts` folder exists in the correct location
+4. **Logs**: Check server logs for error messages
+
+### No Error Messages
+
+If you're not seeing ALE errors:
+
+- **Solution**: You're using an old config file. Copy the new `.conf.dist` file and reconfigure.
+
+### Compilation Errors
+
+**"Lua headers not found":**
+- ALE should automatically download Lua dependencies
+- Ensure you have internet connection during CMake configuration
+
+**C++11 errors:**
+- Update your compiler to one that supports C++11 or later
+
+**ACE/Boost errors:**
+- These should be installed with AzerothCore
+- Check your AzerothCore installation
+
+### Scripts Not Loading
+
+1. **Check file extension**: Must be `.lua`
+2. **Check file names**: Must be unique across all subdirectories
+3. **Check syntax**: Look for errors in the log file
+4. **Check location**: Scripts must be in the configured `ScriptPath` folder
+
+### Getting Help
+
+If you encounter issues:
+
+- **GitHub Issues**: [Report problems](https://github.com/azerothcore/mod-ale/issues)
+- **Discord**: [Join our community](https://discord.com/invite/bx3y5Qmy)
+- **AzerothCore Discord**: [Get support](http://www.azerothcore.org/)
+
+## 📚 Next Steps
+
+Now that ALE is installed, you're ready to start scripting!
+
+### Recommended Reading
+
+1. **[Usage Guide](USAGE.md)** - Learn how to write your first script
+2. **[Implementation Details](IMPL_DETAILS.md)** - Advanced features and best practices
+3. **[API Documentation](https://www.azerothcore.org/eluna/)** - Complete API reference
+4. **[Hooks Reference](https://github.com/azerothcore/mod-ale/blob/master/src/LuaEngine/Hooks.h)** - Available event hooks
+
+### Example Scripts
+
+Create a test script to verify everything works:
+
+**File:** `lua_scripts/test.lua`
+```lua
+local function OnServerStartup()
+ print("ALE is working! Server started successfully.")
+end
+
+RegisterServerEvent(33, OnServerStartup) -- SERVER_EVENT_ON_CONFIG_LOAD
+```
+
+Restart your server and look for the message in the console.
+
+---
+
+## 🌟 Acknowledgements
+
+ALE is built upon the foundation of the [Eluna Lua Engine](https://github.com/ElunaLuaEngine/Eluna). We acknowledge and thank the Eluna team for their pioneering work in Lua scripting for World of Warcraft server emulators.
+
+- **[Original Eluna Repository](https://github.com/ElunaLuaEngine/Eluna)**
+- **[Eluna Discord Community](https://discord.gg/bjkCVWqqfX)**
+
+---
+
+
+Developed with ❤️ by the AzerothCore and ALE community
+
+[⬆ Back to Top](#-ale-installation-guide)
+
diff --git a/modules/mod-ale/docs/MERGING.md b/modules/mod-ale/docs/MERGING.md
new file mode 100644
index 0000000..0fa2323
--- /dev/null
+++ b/modules/mod-ale/docs/MERGING.md
@@ -0,0 +1,407 @@
+
+
+# 🔀 Advanced ALE Integration
+
+*Customizing and extending ALE for your specific needs*
+
+[](https://discord.com/invite/ZKSVREE7)
+[](http://www.azerothcore.org/)
+
+---
+
+
+> [!IMPORTANT]
+> ALE is distributed as an AzerothCore module. Unlike traditional forks, you don't need to merge code. However, this guide covers advanced integration scenarios for custom AzerothCore builds.
+
+## 📋 Table of Contents
+
+- [Standard Installation](#-standard-installation)
+- [Custom AzerothCore Builds](#-custom-azerothcore-builds)
+- [Maintaining Custom Changes](#-maintaining-custom-changes)
+- [Updating ALE](#-updating-ale)
+- [Contributing Back](#-contributing-back)
+- [Troubleshooting](#-troubleshooting)
+
+## ✅ Standard Installation
+
+For most users, installing ALE is straightforward:
+
+```bash
+# Navigate to modules directory
+cd /modules
+
+# Clone ALE
+git clone https://github.com/azerothcore/mod-ale.git
+
+# Rebuild AzerothCore
+cd
+cmake ../ -DLUA_VERSION=luajit
+make -j$(nproc)
+```
+
+> [!TIP]
+> If you're using the standard AzerothCore setup, see the [Installation Guide](INSTALL.md) instead. This guide is for advanced scenarios only.
+
+## 🔧 Custom AzerothCore Builds
+
+### Working with Forked AzerothCore
+
+If you maintain a fork of AzerothCore with custom modifications:
+
+#### Step 1: Add ALE as a Submodule (Recommended)
+
+```bash
+cd
+
+# Add ALE as a submodule
+git submodule add https://github.com/azerothcore/mod-ale.git modules/mod-ale
+
+# Initialize and update
+git submodule init
+git submodule update
+
+# Commit the submodule addition
+git add .gitmodules modules/mod-ale
+git commit -m "Add mod-ale as submodule"
+```
+
+**Benefits:**
+- Easy updates with `git submodule update`
+- Tracks specific ALE versions
+- Clean separation between your code and ALE
+
+#### Step 2: Configure Build
+
+Your CMake configuration should automatically detect the module:
+
+```bash
+cd build
+cmake ../ -DLUA_VERSION=luajit
+make -j$(nproc)
+```
+
+### Alternative: Clone Directly
+
+If you prefer not to use submodules:
+
+```bash
+cd /modules
+git clone https://github.com/azerothcore/mod-ale.git
+```
+
+> [!WARNING]
+> **Not Recommended:** Avoid adding the `modules/mod-ale` directory to your fork's git repository. It makes updates more difficult.
+
+Add to your `.gitignore`:
+```
+modules/mod-ale/
+```
+
+## 🛠️ Maintaining Custom Changes
+
+### Modifying ALE for Your Server
+
+If you need to customize ALE:
+
+#### Option 1: Fork ALE (Recommended)
+
+1. **Fork the repository** on GitHub
+2. **Clone your fork** instead of the official repository:
+ ```bash
+ cd modules
+ git clone https://github.com/YOUR_USERNAME/mod-ale.git
+ ```
+3. **Make your changes** in a feature branch
+4. **Keep in sync** with upstream:
+ ```bash
+ git remote add upstream https://github.com/azerothcore/mod-ale.git
+ git fetch upstream
+ git merge upstream/master
+ ```
+
+#### Option 2: Patch Files
+
+For small changes, create patch files:
+
+```bash
+# Make your changes to ALE
+cd modules/mod-ale
+
+# Create a patch
+git diff > ../../patches/ale-custom-changes.patch
+
+# Apply the patch after updating
+git pull
+git apply ../../patches/ale-custom-changes.patch
+```
+
+### Recommended Approach: Extension Scripts
+
+Instead of modifying ALE core, create extension scripts:
+
+**File:** `lua_scripts/extensions/custom_functions.lua`
+```lua
+-- Extend existing classes with custom methods
+function Player:CustomMethod()
+ -- Your custom functionality
+end
+
+function Creature:CustomBehavior()
+ -- Your custom functionality
+end
+```
+
+**Benefits:**
+- No ALE core modifications needed
+- Easy to update ALE
+- Clean separation of custom code
+- Portable across ALE versions
+
+## 🔄 Updating ALE
+
+### Standard Update Process
+
+For standard installations:
+
+```bash
+cd modules/mod-ale
+git pull
+cd ../../build
+make -j$(nproc)
+```
+
+### Updating with Submodules
+
+If you added ALE as a submodule:
+
+```bash
+# Update to latest ALE
+git submodule update --remote modules/mod-ale
+
+# Or update all submodules
+git submodule update --remote
+
+# Commit the update
+git add modules/mod-ale
+git commit -m "Update mod-ale to latest version"
+```
+
+### Updating with Custom Changes
+
+If you maintain a fork:
+
+```bash
+cd modules/mod-ale
+
+# Fetch upstream changes
+git fetch upstream
+
+# Merge or rebase your changes
+git merge upstream/master
+# or
+git rebase upstream/master
+
+# Resolve any conflicts
+# Then rebuild
+cd ../../build
+make -j$(nproc)
+```
+
+### Version Pinning
+
+To pin a specific ALE version:
+
+```bash
+cd modules/mod-ale
+
+# List available tags
+git tag
+
+# Checkout specific version
+git checkout v1.2.3
+
+# Or specific commit
+git checkout abc123def
+```
+
+> [!TIP]
+> Pin versions in production environments for stability. Use latest in development for new features.
+
+## 🤝 Contributing Back
+
+If you've made improvements that could benefit others:
+
+### Preparing a Contribution
+
+1. **Ensure it's generic**: Your change should be useful for the broader community
+2. **Follow coding standards**: See [Contributing Guide](CONTRIBUTING.md)
+3. **Test thoroughly**: Verify your changes don't break existing functionality
+4. **Document changes**: Add comments and update documentation
+
+### Submission Process
+
+1. **Fork the official repository**
+2. **Create a feature branch**:
+ ```bash
+ git checkout -b feature/my-improvement
+ ```
+3. **Make your changes**
+4. **Push to your fork**:
+ ```bash
+ git push origin feature/my-improvement
+ ```
+5. **Open a Pull Request** on GitHub
+
+See the [Contributing Guide](CONTRIBUTING.md) for detailed instructions.
+
+## 🔧 Troubleshooting
+
+### Merge Conflicts
+
+If you encounter conflicts when updating:
+
+```bash
+# Check which files have conflicts
+git status
+
+# Edit conflicting files to resolve
+# Look for conflict markers: <<<<<<<, =======, >>>>>>>
+
+# Mark as resolved
+git add
+
+# Complete the merge
+git merge --continue
+```
+
+### Module Not Loading
+
+**Check CMake configuration:**
+```bash
+cd build
+cmake ../ -DLUA_VERSION=luajit
+```
+
+Look for output like:
+```
+-- ALE module found: /path/to/modules/mod-ale
+```
+
+**Verify module directory structure:**
+```
+modules/
+└── mod-ale/
+ ├── CMakeLists.txt
+ ├── src/
+ │ └── LuaEngine/
+ └── conf/
+```
+
+### Build Errors After Update
+
+**Clean build recommended:**
+```bash
+cd build
+rm -rf *
+cmake ../ -DLUA_VERSION=luajit
+make -j$(nproc)
+```
+
+### Submodule Issues
+
+**Submodule not initialized:**
+```bash
+git submodule init
+git submodule update
+```
+
+**Submodule in detached HEAD state:**
+```bash
+cd modules/mod-ale
+git checkout master
+git pull
+```
+
+## 🎯 Advanced Scenarios
+
+### Multiple ALE Versions
+
+Testing with different ALE versions:
+
+```bash
+# Clone to different directories
+cd modules
+git clone https://github.com/azerothcore/mod-ale.git mod-ale-stable
+git clone https://github.com/azerothcore/mod-ale.git mod-ale-dev
+
+# Switch between them
+ln -sf mod-ale-stable mod-ale # Use stable
+ln -sf mod-ale-dev mod-ale # Use dev
+```
+
+### Custom Lua Version
+
+Using a custom Lua installation:
+
+```bash
+cmake ../ \
+ -DLUA_VERSION=custom \
+ -DLUA_INCLUDE_DIR=/path/to/lua/include \
+ -DLUA_LIBRARIES=/path/to/lua/lib/liblua.a
+```
+
+### Automated Updates
+
+Create an update script:
+
+**File:** `scripts/update-ale.sh`
+```bash
+#!/bin/bash
+
+cd modules/mod-ale || exit 1
+
+echo "Fetching latest ALE..."
+git fetch upstream
+
+echo "Current version: $(git rev-parse --short HEAD)"
+echo "Latest version: $(git rev-parse --short upstream/master)"
+
+read -p "Update to latest? (y/n) " -n 1 -r
+echo
+if [[ $REPLY =~ ^[Yy]$ ]]; then
+ git merge upstream/master
+ cd ../../build
+ make -j$(nproc)
+ echo "ALE updated successfully!"
+fi
+```
+
+## 📚 Additional Resources
+
+- **[Installation Guide](INSTALL.md)** - Standard installation process
+- **[Contributing Guide](CONTRIBUTING.md)** - How to contribute changes
+- **[Usage Guide](USAGE.md)** - Getting started with scripting
+- **[AzerothCore Documentation](http://www.azerothcore.org/)** - Core documentation
+
+### Getting Help
+
+- **GitHub Issues**: [Report problems](https://github.com/azerothcore/mod-ale/issues)
+- **Discord**: [Join our community](https://discord.com/invite/bx3y5Qmy)
+- **AzerothCore Discord**: [Get support](http://www.azerothcore.org/)
+
+---
+
+## 🌟 Acknowledgements
+
+ALE is built upon the foundation of the [Eluna Lua Engine](https://github.com/ElunaLuaEngine/Eluna). We acknowledge and thank the Eluna team for their pioneering work in Lua scripting for World of Warcraft server emulators.
+
+- **[Original Eluna Repository](https://github.com/ElunaLuaEngine/Eluna)**
+- **[Eluna Discord Community](https://discord.gg/bjkCVWqqfX)**
+
+---
+
+
+Developed with ❤️ by the AzerothCore and ALE community
+
+[⬆ Back to Top](#-advanced-ale-integration)
+
diff --git a/modules/mod-ale/docs/USAGE.md b/modules/mod-ale/docs/USAGE.md
new file mode 100644
index 0000000..8232bfd
--- /dev/null
+++ b/modules/mod-ale/docs/USAGE.md
@@ -0,0 +1,279 @@
+
+
+# 📖 ALE Usage Guide
+
+*Learn how to create powerful Lua scripts for your AzerothCore server*
+
+[](https://discord.com/invite/ZKSVREE7)
+[](http://www.lua.org/manual/5.2/)
+
+---
+
+
+> [!IMPORTANT]
+> This guide is for **ALE (AzerothCore Lua Engine)**, which is specifically designed for AzerothCore. Scripts and APIs may differ from other Lua engines.
+
+## 📋 Table of Contents
+
+- [Prerequisites](#-prerequisites)
+- [Your First Script](#-your-first-script)
+- [Lua Basics](#-lua-basics)
+- [ALE Basics](#-ale-basics)
+- [Script Reloading](#-script-reloading)
+- [Getting Help](#-getting-help)
+
+## ✅ Prerequisites
+
+This guide assumes you have already installed ALE successfully. If you have not, see the [Installation Guide](INSTALL.md) or the [Installation section](../README.md#-installation) in the README.
+
+## 🚀 Your First Script
+
+Let's create a simple "Hello World" script to get you started.
+
+### Creating the Script File
+
+Create a file named `hello_world.lua` in your scripts folder. By default, this folder is called `lua_scripts` and is located in your server folder (the folder containing server executables).
+
+```lua
+local PLAYER_EVENT_ON_LOGIN = 3
+
+local function OnLogin(event, player)
+ player:SendBroadcastMessage("Hello world from ALE!")
+end
+
+RegisterPlayerEvent(PLAYER_EVENT_ON_LOGIN, OnLogin)
+```
+
+### Running the Script
+
+1. Restart your AzerothCore server
+2. Log in to the game
+3. You should see "Hello world from ALE!" in your chat
+
+### What Just Happened?
+
+No core compiling was needed! Your script runs directly from the file you created.
+
+Here's what the script does:
+- The file is compiled and run by the Lua engine when the server starts
+- The code registers a function to be executed when a player logs in
+- When the event triggers, the function sends a message to the player
+
+## 📚 Lua Basics
+
+Before diving deep into ALE scripting, it's helpful to understand some Lua fundamentals.
+
+### Learning Resources
+
+- **Lua Users Wiki**
+ - [Lua Directory](http://lua-users.org/wiki/LuaDirectory)
+ - [Tutorial Directory](http://lua-users.org/wiki/TutorialDirectory)
+ - [Sample Code](http://lua-users.org/wiki/SampleCode)
+- **[Programming in Lua](http://www.lua.org/pil/1.html)** - Comprehensive guide
+- **[Lua 5.2 Reference Manual](http://www.lua.org/manual/5.2/)** - Official documentation
+
+### Essential Concepts
+
+#### Debugging with Print
+
+The `print()` function outputs to the server console - perfect for debugging:
+
+```lua
+print("Debug message here")
+print("Player name:", player:GetName())
+```
+
+#### Control Structures
+
+Learn about loops and conditionals:
+- [Control Structure Tutorial](http://lua-users.org/wiki/ControlStructureTutorial)
+- [Lua Manual - Control Structures](http://www.lua.org/manual/5.2/manual.html#3.3.5)
+
+#### String Manipulation
+
+Essential for text processing:
+- [String Library Tutorial](http://lua-users.org/wiki/StringLibraryTutorial)
+- [Pattern Matching](http://www.wowwiki.com/Pattern_matching)
+
+#### Tables
+
+Tables are Lua's only data structure (arrays and hash maps combined):
+- [Table Functions](http://www.lua.org/manual/5.2/manual.html#6.5)
+- [Table Semantics](http://www.lua.org/manual/5.2/manual.html#4.3)
+- [Tables Tutorial](http://lua-users.org/wiki/TablesTutorial)
+- [Programming in Lua - Tables](http://www.lua.org/pil/2.5.html)
+
+#### Variable Scope
+
+**Important:** Prefer local variables over global variables!
+
+```lua
+-- Good: Local variable
+local playerName = "John"
+
+-- Avoid: Global variable
+playerName = "John"
+```
+
+Global variables can create conflicts with other scripts. Local variables outside functions are shared within the same script file (locally global).
+
+## ⚡ ALE Basics
+
+### Documentation Resources
+
+- **[ALE API Documentation](https://www.azerothcore.org/eluna/)** - Complete API reference
+- **[Hooks Documentation](https://github.com/azerothcore/mod-ale/blob/master/src/LuaEngine/Hooks.h)** - Available event hooks
+- **[Implementation Details](IMPL_DETAILS.md)** - Advanced features and best practices
+
+### Error Messages
+
+ALE outputs errors to:
+- Server console (real-time)
+- Log file in the server folder (persistent)
+
+If your script doesn't work, check the log file for errors. You can configure logging settings in the server configuration file.
+
+### Global Functions
+
+Global functions can be called from anywhere without requiring an object.
+
+Besides standard Lua functions like `print()`, ALE provides its own global functions. Find them in the documentation under the `Global` class: [Global Functions](https://www.azerothcore.org/eluna/Global/index.html).
+
+```lua
+-- Example: Get the Lua engine name
+print(GetLuaEngine())
+
+-- Example: Get current game time
+local time = GetGameTime()
+```
+
+### Member Functions (Methods)
+
+Methods require a userdata object to run. Different object types (Player, Creature, GameObject, etc.) have different available methods.
+
+#### Class Inheritance
+
+Classes inherit from each other. For example:
+- `Player` and `Creature` both inherit from `Unit`
+- This means both players and creatures can use `Unit` methods
+
+#### Calling Methods
+
+Use the `:` notation to call methods on objects:
+
+```lua
+-- Get player name
+local name = player:GetName()
+
+-- Get creature level
+local level = creature:GetLevel()
+```
+
+#### Example: Creature Combat Script
+
+```lua
+local entry = 6 -- Creature entry ID
+local on_combat = 1 -- Event ID for combat start
+
+local function OnCombat(event, creature, target)
+ -- creature is of type Creature
+ -- target is of type Creature or Player
+
+ print("Creature level:", creature:GetLevel())
+ print("Target level:", target:GetLevel())
+
+ creature:SendUnitYell("You dare challenge me?!", 0)
+end
+
+RegisterCreatureEvent(entry, on_combat, OnCombat)
+```
+
+### Registering Event Handlers
+
+Scripts work by registering functions to events. When the event occurs, your function executes.
+
+#### Finding Register Functions
+
+Search for "register" in the [ALE documentation](https://www.azerothcore.org/eluna/) to find all available register functions:
+- `RegisterPlayerEvent`
+- `RegisterCreatureEvent`
+- `RegisterServerEvent`
+- And many more...
+
+#### Event IDs
+
+Each register function requires an event ID. Find these IDs in the function's documentation page.
+
+#### Function Parameters
+
+ALE automatically passes parameters to your registered functions. The parameters are always in the same order, but you can name them anything you want.
+
+Example: `PLAYER_EVENT_ON_LOGIN` passes:
+1. Event ID (number)
+2. Player object (Player)
+
+```lua
+local function OnLogin(event, player)
+ -- event = event ID number
+ -- player = Player object
+end
+```
+
+#### Return Values
+
+Some events allow your function to return values to modify behavior. Check the event's documentation to see what can be returned.
+
+```lua
+local function OnChat(event, player, msg, type, lang)
+ if msg == "blocked" then
+ return false -- Blocks the chat message
+ end
+end
+```
+
+## 🔄 Script Reloading
+
+For quick testing during development, you can reload scripts without restarting:
+
+```
+.reload ale
+```
+
+> [!WARNING]
+> **Development Only:** Use `.reload ale` only for development. For production or if experiencing issues, always restart the server.
+
+**Important Limitations:**
+- Reloading doesn't trigger events like login for already-connected players
+- Some state may not reset properly
+- Always do final testing with a full server restart
+
+## 💬 Getting Help
+
+### Support Channels
+
+- **GitHub Issues**: [Report bugs or request features](https://github.com/azerothcore/mod-ale/issues)
+- **Discord Community**: [Join our Discord server](https://discord.com/invite/bx3y5Qmy)
+- **AzerothCore Discord**: [Official AzerothCore support](http://www.azerothcore.org/)
+
+### Additional Resources
+
+- [Lua Programming Guide](http://www.lua.org/)
+- [AzerothCore Documentation](http://www.azerothcore.org/)
+- [Implementation Details](IMPL_DETAILS.md) - Advanced ALE features
+
+---
+
+## 🌟 Acknowledgements
+
+ALE is built upon the foundation of the [Eluna Lua Engine](https://github.com/ElunaLuaEngine/Eluna). We acknowledge and thank the Eluna team for their pioneering work in Lua scripting for World of Warcraft server emulators.
+
+- **[Original Eluna Repository](https://github.com/ElunaLuaEngine/Eluna)**
+- **[Eluna Discord Community](https://discord.gg/bjkCVWqqfX)**
+
+---
+
+
+Developed with ❤️ by the AzerothCore and ALE community
+
+[⬆ Back to Top](#-ale-usage-guide)
+