Bỏ qua để đến nội dung

Dựng stack

Máy chủ chạy trong Docker. Client là ứng dụng Windows, đặt ở máy khác hoặc cùng máy nếu máy đó chạy Windows. Cả quy trình mất tầm 15 phút, phần lớn là ngồi chờ lần boot đầu.

Docker phải chạy được linux/amd64, vì binary nào trong stack cũng là ELF x86-64. Trên máy Apple silicon:

Terminal window
colima start --vm-type=vz --vz-rosetta
Terminal window
cp .env.example .env

Mở .env ra, đặt mật khẩu, và điền PUBLIC_ADDR bằng địa chỉ IP mà máy chạy client kết nối tới host này được.

Terminal window
docker compose up -d
docker compose logs -f go

Chờ dòng Avatar Star, now running. Lần boot đầu mất vài phút vì MySQL phải chạy server/db/init trên volume rỗng để tạo schema auth, AS_SHARD và 74 bảng nội dung SYS_*, rồi tầng Java tự sinh thêm khoảng 1.130 bảng của nó.

Dòng đó do JVM in ra server/go/logs/go.out. Container tail sẵn file này nên docker compose logs go thấy được, nhưng nếu có ai sửa command thì phải grep thẳng file chứ đừng grep stdout của container.

Mọi thứ lên xong thì chạy đúng một lần:

Terminal window
docker compose exec native bash -c 'cd /srv && ./restart_proxy.sh'

proxyserver lên trước matchingserver, mà kết nối từ proxy sang matching chỉ thử đúng một lần. Không restart proxy sau cùng thì ghép trận chết, trong khi mọi thứ khác trông vẫn bình thường.

Tài khoản người chơi:

Terminal window
docker compose exec auth python3 /opt/asauth/asacct.py create <user> --password '<password>'

Tài khoản GM:

Terminal window
server/go/gmadmin.sh create <gm-user>

GM console không có login mặc định, không tạo thì không vào được. Console nằm ở http://<host>:8080/go/login.html. Cổng 8080 cố tình không publish trong docker-compose.yml, lý do ở Kiến trúc.

Trên máy Windows 10 hoặc 11:

Terminal window
# giải nén AvatarStar-archives.zip vào client\tree\
python3 client\verify_archives.py
powershell -NoProfile -File client\set-server.ps1 -Addr <IP máy chủ>
client\tree\AvatarStar.exe

verify_archives.py phải in ra ACCEPT rồi mới đi tiếp. Nó chạy tầm 10 giây, đối chiếu kích thước, MD5 và nội dung của hai archive.

Nội dung game nằm ở các bảng SYS_*, mà tầng Java thì cache chúng qua memcached. Sửa row rồi restart nhưng quên flush cache thì shop, quest và item vẫn trả về nội dung cũ.

Terminal window
docker compose exec memcached sh -c 'echo flush_all | nc 127.0.0.1 11211'
docker compose restart go native

Lần boot đầu khỏi cần, vì server/db/init chạy xong trước khi có thứ gì kết nối vào.

Sửa nội dung trong database thì flush cache là xong. Còn sửa thứ nằm trong client, như model vũ khí, texture hay chuỗi text, thì phải đi qua kênh patch: Ship một bản update.

Bản nháp đang review. Nội dung nội bộ, đừng chia sẻ ra ngoài nhóm.