Quay tròn quanh chủ nhân, gây sát thương qua deal_damage, đẩy lùi nhẹ và đảo chiều khi chém trúng.
Tự đếm nhịp cooldown trong on_tick, xả đợt tên liên tiếp và nâng cấp số tên khi bắn trúng qua on_projectile_hit.
Tự động xoay nòng về phía đối thủ gần nhất và bắn viên đạn thẳng với chu kỳ ổn định.
Càng quay lâu càng tăng tốc độ và sát thương, đập trúng gây hiệu ứng đẩy lùi cực mạnh (knockback) rồi reset vận tốc.
Tự ngắm mục tiêu, khi đâm trúng sẽ gây sát thương lớn và tự huỷ biến mất khỏi đấu trường.
Bay theo hướng bắn, tự gây sát thương khi trúng người chơi và nảy/dội khi đập tường.
Vừa bay vừa tự xoay vòng (spin = 15.0), nảy bật tường 2 lần (bounces = 2).
Khi va chạm kích hoạt sóng chấn động diện rộng (deal_aoe_damage) gây sát thương cho toàn bộ kẻ địch lân cận.
Trong TBalls Engine v5.3, mọi vũ khí và đạn đều là Python class thuần tuý, kế thừa từ Weapon hoặc Projectile:
class MyWeapon(Weapon): nằm tại thư mục Server/Weapons/.class MyBullet(Projectile): nằm tại thư mục Server/Projectiles/.self.deal_damage(target, dmg) và self.deal_aoe_damage(pos, radius, dmg). Engine tự động làm tròn số nguyên an toàn và ngăn chặn double-hit cùng frame.| Callback Method | Đối tượng | Thời điểm kích hoạt & Chức năng |
|---|---|---|
on_init(self) | Weapon / Projectile | Khởi tạo biến riêng, bộ đếm cooldown, danh sách trạng thái ban đầu. |
on_equip(self, player) | Weapon | Kích hoạt ngay khi người chơi nhặt và trang bị vũ khí. |
on_drop(self, player) | Weapon | Kích hoạt khi chủ nhân rơi vũ khí hoặc đổi sang vũ khí khác. |
on_tick(self, dt) | Weapon / Projectile | Chạy mỗi khung hình game tick (dt tính bằng giây). Dùng để đếm cooldown, tăng tốc vật lý. |
on_collision(self, other, other_layer) | Weapon | Kích hoạt khi vũ khí cận chiến chạm player, weapon hoặc wall. |
on_hit(self, target) | Projectile | Kích hoạt khi đạn bắn trúng kẻ địch. Mặc định gọi super().on_hit(target). |
on_wall_hit(self, wall, normal) | Projectile | Kích hoạt khi đạn chạm tường (xử lý nảy, hiệu ứng tia lửa, âm thanh). |
on_projectile_hit(self, target, projectile) | Weapon | Kích hoạt trên Weapon khi viên đạn do nó bắn ra trúng mục tiêu (dùng nâng cấp chỉ số). |
| Thuộc tính | Kiểu dữ liệu | Mặc định | Ý nghĩa & Mô tả |
|---|---|---|---|
name | str | Tên file | Tên định danh duy nhất của vũ khí. |
shape | str | "square" | Hình dạng va chạm: "square" hoặc "circle". |
width, height | float | 25, 160 | Kích thước hình chữ nhật khi shape là "square". |
radius | float | 30 | Bán kính khi shape là "circle". |
pickupable | bool | True | Có thể được người chơi nhặt trên sàn đấu hay không. |
drop | bool | False | Khi chủ nhân chết, vũ khí có rơi ra sàn đấu cho người khác nhặt hay không. |
motion_type | str | "orbit" | Kiểu di chuyển: "orbit" (quay vòng quanh chủ) hoặc "aim" (tự ngắm). |
orbit_speed | float | 5.0 | Tốc độ quay quỹ đạo (rad/giây). Dấu âm/dương quyết định chiều quay. |
aim_speed | float | 15.0 | Tốc độ xoay nòng bám đuổi mục tiêu (rad/giây). |
damage | int / float | 10 | Lượng sát thương cơ bản gây ra cho mục tiêu. |
add_damage | int / float | 0 | Lượng sát thương cộng thêm sau mỗi lần chém trúng. |
cooldown | float | 0.5 | Khoảng thời gian giãn cách giữa các đợt tấn công / bắn đạn (giây). |
| Hàm gọi | Tham số | Công dụng |
|---|---|---|
self.deal_damage(target, amount) | target, amount | Gây sát thương lên đối thủ, an toàn làm tròn và chống double-hit. |
self.deal_aoe_damage(center, radius, amount) | center, radius, amount | Gây sát thương diện rộng nổ lan cho tất cả kẻ địch trong bán kính. |
self.fire(projectile, angle=0.0) | projectile, angle | Bắn một viên đạn bay ra khỏi mũi vũ khí theo góc lệch chỉ định. |
self.reverse_direction() | không | Đảo ngược chiều xoay quỹ đạo vũ khí cận chiến khi va chạm. |
self.knockback(target, force) | target, force | Đẩy lùi mục tiêu theo hướng véc-tơ va chạm với lực chỉ định. |
self.heal_owner(amount) | amount | Hồi phục máu cho chủ nhân đang trang bị vũ khí. |
self.spawn_effect(name, **kwargs) | name, **kwargs | Tạo hiệu ứng hình ảnh VFX: "spark", "shockwave". |