Bỏ qua

Cấu trúc kịch bản

ScriptCore.lua — Bộ điều phối sự kiện

ScriptCore.lua được tải tự động bởi GameServer. Nó quản lý tất cả bộ xử lý sự kiện thông qua một registry trung tâm.

-- Registry bộ xử lý sự kiện nội bộ (bên trong ScriptCore.lua)
local EventHandlers = {
    OnReadScript = {},
    OnShutScript = {},
    OnTimerThread = {},
    OnCommandManager = {},
    OnCharacterEntry = {},
    OnCharacterClose = {},
    OnNpcTalk = {},
    OnMonsterDie = {},
    OnUserDie = {},
    OnUserRespawn = {},
    OnCheckUserTarget = {},
    OnCheckUserKiller = {},
    OnPacketRecv = {},
    OnConnectDataBase = {},
    OnItemGet = {},
    OnItemDrop = {},
    OnGremoryCaseReady = {},
}

BridgeFunctionAttach()

Đăng ký một callback vào bộ điều phối sự kiện.

BridgeFunctionAttach(eventName, handlerFunction)
  • eventName (string) — Phải khớp với một trong các sự kiện trong EventHandlers
  • handlerFunction (function) — Hàm callback của bạn

Nhiều bộ xử lý

Bạn có thể gắn nhiều bộ xử lý vào cùng một sự kiện. Chúng thực thi theo thứ tự đăng ký:

-- File: Welcome.lua
BridgeFunctionAttach("OnCharacterEntry", function(aIndex)
    GCNoticeSend(aIndex, 1, "Welcome!")
end)

-- File: DailyReward.lua
BridgeFunctionAttach("OnCharacterEntry", function(aIndex)
    -- Tặng phần thưởng đăng nhập hàng ngày
    ItemGive(aIndex, 100)
end)

-- Cả hai bộ xử lý đều chạy khi người chơi đăng nhập

Các sự kiện có sẵn

Sự kiện Tham số Trả về Mô tả
OnReadScript Kịch bản được tải/tải lại
OnShutScript Server đang tắt
OnTimerThread Nhịp hẹn giờ (~1/giây)
OnConnectDataBase Cơ sở dữ liệu đã kết nối
OnCharacterEntry aIndex Người chơi vào trò chơi
OnCharacterClose aIndex Người chơi ngắt kết nối
OnGremoryCaseReady aIndex Dữ liệu Gremory đã tải
OnUserDie aIndex, bIndex Người chơi chết
OnUserRespawn aIndex, killerType Người chơi hồi sinh
OnMonsterDie aIndex, bIndex 0/1 Quái vật chết
OnCommandManager aIndex, code, arg 0/1 Lệnh tùy chỉnh được sử dụng
OnNpcTalk aIndex, bIndex 0/1 Tương tác với NPC
OnCheckUserTarget aIndex, bIndex 0/1 Xác nhận mục tiêu PvP
OnCheckUserKiller aIndex, bIndex 0/1 Kiểm tra hình phạt PK
OnItemGet aIndex, index, item 0/1 Nhặt vật phẩm
OnItemDrop aIndex, slot, item 0/1 Vứt vật phẩm
OnPacketRecv aIndex, head, packet 0/1 Nhận gói tin tùy chỉnh

Cấu trúc tệp khuyến nghị

LuaScript/
  System/
    ScriptCore.lua          # Bộ điều phối sự kiện (không chỉnh sửa)
    ScriptDefine.lua        # Hằng số (CLASS_DW, MAP_LORENCIA, v.v.)
    ScriptReader.lua        # Tiện ích phân tích tệp
  Welcome.lua               # Kịch bản tùy chỉnh của bạn
  DailyReward.lua
  CustomCommands.lua
  BossEvent.lua

Vòng đời kịch bản

Khởi động Server
  ├─► OnReadScript()         — Khởi tạo dữ liệu của bạn
  ├─► OnConnectDataBase()    — Thiết lập kết nối SQL
  │   [Trò chơi đang chạy]
  ├─► OnTimerThread()        — Mỗi ~1 giây
  ├─► OnCharacterEntry()     — Người chơi tham gia
  ├─► OnGremoryCaseReady()   — Gremory đã tải (an toàn để tặng vật phẩm)
  ├─► OnNpcTalk()            — NPC được nhấp
  ├─► OnMonsterDie()         — Quái vật bị giết
  ├─► OnUserDie()            — Người chơi bị giết
  ├─► OnCharacterClose()     — Người chơi thoát
  └─► OnShutScript()         — Server đang dừng, dọn dẹp