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.
eventName(string) — Phải khớp với một trong các sự kiện trongEventHandlershandlerFunction(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