Loạt tut sẽ được xây dựng từ cơ bản đến nâng cao. Điều kiện cần: - Phải có tool Amxmodx hay Pawm studio (Phần mềm để lập trình đó) - Phải biết cài đặt, sử dụng plugin, complie từ sma-> amxx file (Bạn học để viết plugin, viết xong ko biết cài in game thì làm gì ) Các TUT sẽ được update : (Cứ mò trong page theo link là có TUT ) Bài 1. Cách khai báo http://forums.gamevn.com/showpost.php?p=22151972 Bài 2. Cấu trúc cơ bản http://forums.gamevn.com/showpost.php?p=22151972 Bài 3. Đăng kí 1 câu lệnh trong gamehttp://forums.gamevn.com/showpost.php?p=22151972 Bài 4. Mảng và string http://forums.gamevn.com/showpost.php?p=22156071 Bài 5. Thực thể http://forums.gamevn.com/showpost.php?p=22168610 Bài 6. Phân tích 1 plugin nhỏ http://forums.gamevn.com/showpost.php?p=22210686
Yeah, cuối cùng cũng có TUT AMXX Mà sao bác Duy không post bên topic AMX nhỉ ---------- Post added at 19:16 ---------- Previous post was at 19:04 ---------- Mong lần này có thật nhiều tut hay
BÀI 1. CÁCH KHAI BÁO Khai báo là 1 bước hết sức quan trọng trong lập trình. Giống như làm toán, bạn thường “Gọi x là…, Gọi y là…” để thầy giáo biết x là cái gì, y là cái gì. Trong Amxmodx (Amxx) các cấu trúc đều gần như giống hệt như C hay C++ 1.Các kiểu dữ liệu cơ bản - Integer : là kiểu số nguyên . Ví dụ như : -1, 1, 2, 3,4…. Là các số nguyên (Giống trong toán nhỉ - Float : là kiểu số thập phân . Ví dụ như : -0,5 ; 5,4 là các số thập phân -Bool : Cái kiểu này chỉ có thể là true (đúng) hay false (sai) 2. Cách khai báo -Đối với kiểu số là nguyên. PHP: // cách thứ 1 new a,b,c // Khai báo 3 biến a,b,c. Sauk hi khai báo , bạn có thể dung các biến này thoải mái a=1 // cho a=1 b=2 // cho b = 2 c=4 // cho c = 4 // Cách thứ 2 new a=1 new b=2 new c=4 // mà cũng có thể New a=1,b=2,c=3 -Đối với kiểu thập phân Bạn khai báo giống hệt phần số nguyên nhưng thêm Float: vào trước biến PHP: new Float:a=1.0 // 1 khi đã khai báo kiểu Float, dù 1.0=1 thì bạn cũng phải viết a=1.0 -Đối với kiểu bool PHP: new bool:a a=true // gán a là true Chú ý : Khi bắt đầu code, bạn nên xác định đúng kiểu số mà bạn muốn khai báo nhé, nếu không trình complie nó sẽ báo warning Khi khai báo thôi mà không có thêm gì thì mặc định -Số nguyên là 0 -Thập phân là 0.0 -Boo l là false 3. Một số phép toán cơ bản Trong Pawm (ngôn ngữ lập trình amxx) nói chung và hầu hết các ngôn ngữ lập trình nói riêng có 1 điều khá là thú vị là : KHÔNG BAO GIỜ CÓ KIỂU CỘNG SỐ THẬP PHÂN VỚI SỐ NGUYÊN Ví dụ thế này PHP: new a // a là kiểu số nguyên new Float:b // b là kiểu thập phân new c = a+b // không được đâu nha 1 số phép toán cơ bản a.Phép cộng/Trừ Bạn cứ dung dấu cộng/trừ như toán bình thường thôi b.Phép nhân Phép nhân trong mọi loại lập trình không phải là “x” đâu nhé, mà là * c.Phép chia Bạn dung dấu “/” nhé d. 1 số cái phi toán học PHP: new a // nếu không thêm gì thì mặc định thì a=0 a+=1 // Cộng a thêm 1 đơn vị => a=1 a-=1 // trừ của a đi 1 đơn vị => a=0 a*=2 // Nhân đôi số a, tức là a=a*2 a/=2 // Chia đôi số a, tức là a=a/2 e. Lấy phần dư của 1 phép chia, bạn dùng dấu % nhé PHP: new a,b a=4 b=3 new phandu phandu = 4%3 // ở đây phandu = 1 do 4 chia 3 dư 1 đúng không nào, dễ chưa KẾT THÚC TUT NÀY AI CÓ GÌ HỎI KHÔNG? ---------- Post added at 19:55 ---------- Previous post was at 19:49 ---------- BÀI 2. CẤU TRÚC CƠ BẢN Có những bài toán bạn phải chia ra nhiều trường hợp, nếu thế này ……, nếu thế kia……, hay bạn cần tính tổng (xích ma) của 1 loạt số theo quy luật như 1+2+3+4+5…..+5000 (5000 số) (Trong FX 570ES có đó nha) hay bạn cần phải làm 1 việc nào đó lặp đi lặp lại cho đến khi thu được kết quả…. Tất cả điều đó bạn sẽ được học ở Topic này O.Các phép so sánh, logic Có vài phép so sánh mình muốn các bạn nhớ . a,Bằng : == . VD: a==b b,Lớn hơn >, nhỏ hơn < . VD:a>b c,Lớn hơn học bằng >=, nhỏ hơn hoặc bằng <= d,Khác bằng !=. VD:a!=b e,Phủ định ! . VD !(a==1) (tức là phủ định của a=1 tức là a khác 1) f.Và && . VD (a==1 && b==2) (a=1 và b=2) g,Hoặc || h.Tồn tại 1 phần tử &. VD: a=214141, nếu mình dùng a&2, mà trong a có số 2 kìa , thì nó trả về đúng, nếu không có thì sai I,Loại đi 1 phần từ &~. VD: a=214141, nếu mình dùng a&~2 thì số 2 trong a sẽ biến mất và trở thành : 14141 I.IF (nếu , thì) Cấu trúc: Rút gọn PHP: if (điều kiên) // nếu điều kiện đúng { //lệnh 1 // 2 // 3…. } Đầy đủ PHP: if (điều kiên) // nếu điều kiện đúng { //lệnh 1 // 2,3,4…. } else // nếu điều kiện sai sẽ chạy đoạn sau { //lệnh 1 // 2,3,4…. } Đọc đoạn code dưới đây bạn sẽ biết dung thế nào PHP: new a,b a=1 if (a==1) // nếu a=1 thì sẽ cho b=1 { b=1 } else // nếu a khác 1 thì sẽ cho b=2 { b=2 } //Nhưng do sau cái điều kiện , bạn chỉ thấy có 1 dòng lệnh nên cũng có thể làm thế này if (a==1) b=1 else b=2 Code trên cũng có thể viết theo hướng khác PHP: new a,b a=1 if (a!=1) b=2 // nếu a không bằng 1 else b=1 II.Vòng lặp có giới hạn Cấu trúc PHP: new i for (i=số ban đầu; điều kiện tăng cho i; lệnh khi điều kiện đúng) { //Code here } Ví dụ nhé PHP: new a for (new I = 1; i<45; i+=1) // ở đây mình khai báo biến I gộp vào đây, nếu I nhỏ hơn 45 thì I sẽ được công thêm 1 đơn vị, mà thường chỗ i+=1, nên cho là i++, 2 cái này tương đương :D { a+=i // Cộng a thêm I đơn vị } III.Vòng lặp vô hạn Cấu trúc PHP: while (điều kiện) { //Code here } IV.Switch Cái này bạn học cũng được mà không cũng không sao, bản chất của nó là IF thôi Mình thiết nghĩ, nếu bạn là newbie hãy học những công cuc ở trên trước Chú ý rất quan trọng là trong Pawm, a khác A , tức là nó phân biệt chữ hoa , chữ thường, nếu vì 1 lý do nào đó bạn ko thể compile mà bạn không thể tìm ra bắt cứ lỗi sai nào thì hãy kiểm tra xem bạn có viết nhầm chữ thường thành chữ hoa không nhé _HẾT_ CÓ AI HỎI GÌ KHÔNG ---------- Post added at 19:55 ---------- Previous post was at 19:49 ---------- BÀI 3. TẠO 1 CÂU LỆNH TRONG GAME Có bao giờ bạn mở console (~) lên và gõ 1 vài lệnh để Bá đạo không , chắc có nhỉ, ai chơi CS mà không biết console thì thôi đấy OK, bài học này các bạn sẽ biết đăng kí 1 câu lệnh như thế, có nghĩa là bạn có thể tự tạo ra 1 câu lệnh. Chúng ta bắt đầu nhé. Trong amxx có 1 function (hàm/chức năng) cho phép bạn làm thế đó là (cái này mình đã cắt mấy thứ đằng sau, mình thấy nó không cần thiết cho các bạn mới học, để đơn giản bạn có thể nhơ như sau) 1. register_clcmd(”Tên lệnh”, ”Đường dẫn tới func plubic”) Cái này giúp bạn đăng kí lệnh cho client, hiểu nôm na là bạn gõ mấy chữ cái vào mà nó không hiện ra ở dưới đó 2. register_concmd(”Tên lệnh”, ”Đường dẫn tới func plubic”) Cái này giúp bạn đăng kí lệnh cho cả server, hiểu nôm na là khi bạn gõ mấy chữ đầu tiên, nó sẽ hiện ra ở bên dưới (như kiểu tìm kiếm của google) Chúng ta xét 1 ví dụ nho nhỏ nhé (rất rất cụ thể đó, bạn hãy đọc kĩ nhé) PHP: #include <amxmodx> // Khai báo thư viện #include <fun> //tất cả thư viện nằm trong foder include đó public plugin_init() // public này sẽ tự động chạy khi server connect (hiểu nôm na là bạn vừa loading xong). Đây là nơi lý tưởng để đăng kí. Ví dụ bạn muốn đăng kí 1 lớp học thêm, thì bạn phải đăng kí khi vừa mở chứ làm sao mà đợi nó học 5-6 tháng mới đăng kí đúng không :D { register_concmd(”full_health”,”cmd_set_health”) } public cmd_set_health(id) // Plublic này sẽ được gọi khi 1 player gõ lệnh “full_health” , đơn giản chưa, còn tên public bạn đã đăng kí bên trên rồi. Còn id chính là playerid. //Bạn có hiểu id là gì không?. Trên thực tế , hầu hiện tất cả mọi thứ đều tồn tại dưới dạng THỰC THỂ như cái ô tô hay cái máy bay trên map ,ent id là 1 con số (1 id), như bạn mua phiếu ở lớp học thêm, số của bạn là 78 thì mình có thể nói id của bạn là 78. và player là 1 dạng thực thể đặc biệt và id của nó là từ 1->32. như vậy id ở đây là những số nguyên trong đoạn từ 1-32. // Ví dụ : bạn là thằng player có id là 8, thì khi bạn gõ lệnh “full_health” cái id trong public cmd_set_health(id) sẽ là 8 đó :D . Dễ không nào { client_print(id, print_chat, “Ban da set mau thanh 250”) // client_print là hàm để in 1 thông báo ra màn hình // print_chat là in ra màn hình theo kiểu CHAT // print_chat có thể thay bằng print_center (in giữa màn hình), client_console (in trong console) set_user_health(id, 250) // đây là lệnh trong fun.inc giúp bạn set máu cho player, do đó thư viện mình đã phải khai báo thư viện fun // trong đó id là player id đã đươc giải thích ở trên rôi :D }
^ đọc vào lấy tí kn còn trùi dập newbie không lo mi sửa mồm 3 nói thế chứ dạo này hứng pascal nên dù éo liên quan gì cũng đọc tý
Param chính là 1 biến, chúng ta có thể chỉnh sửa nó ngay trong func. Nếu thêm const vào trước param thì nó sẽ trở thành 1 hằng. Param id <-- tên param thường gặp nhất, 95% các func sử dụng tên param này để chỉ số thứ tự của 1 player. Như bài HD về native, chúng ta đã call func: PHP: client_print(id, print_center, "Hello World!")// client_print(PlayerId, Target, const Format[], any:...) Điều này có nghĩa là dòng chữ "Hello World!" sẽ được print ra giữa màn hình của thằng player có thứ tự là id. ---------- Post added at 20:43 ---------- Previous post was at 20:32 ---------- Tính thi quốc gia hay sao mà hứng ---------- Post added at 21:00 ---------- Previous post was at 20:43 ---------- VÒNG LẶP FOR & VÒNG LẶP WHILE [spoil]1. VÒNG LẶP FOR Vòng lặp for sử dụng để lặp trong 1 khoảng xác định (số lần lặp xác định). Cú pháp: PHP: for(<biến đếm> = <giá trị đầu>;<điều kiện lặp>;<biểu thức biến thiên của biến đếm>) Trong đó: điều kiện lặp: là điều kiện để vòng lặp được thực hiện, nếu điều kiện trả về giá trị TRUE thì lặp, ngược lại thì vòng lặp kết thúc. biểu thức biến thiên của biến đếm: là biểu thức thể hiện sự biến thiên nhất định của biến đếm trong mỗi lần lặp (++, --, +=, -=,...) Ví dụ: PHP: for(new i = 1; i <= 32; i++){ // Lệnh}//Biến i sẽ chạy từ 1 -> 32 theo chiều tăng dần (i++), khi i vượt quá 32 thì vòng lặp kết thúc. 2. VÒNG LẶP WHILE Vòng lặp while sử dụng để lặp với số lần chưa biết. Cú pháp: PHP: while (điều kiện lặp){ // Lệnh} hoặc: PHP: do{ // Lệnh}while (điều kiện lặp) Vòng lặp while sẽ chạy liên tục cho đến khi điều kiện lặp trả về giá trị FALSE, vì vậy hãy cẩn thận đừng để xuất hiện vòng lặp vô tận. VD: PHP: new i = 1;while (i < 10){ i++}//Biến i sẽ cộng thêm 1 cho đến khi i vượt quá 10. [/spoil]
Tớ mời mò mẫm làm thử,copy-paste cái code của kungfulon thôi,compile thì bình thường ko thấy lỗi gì cả,nhưng cho vào game thì chẳng thấy gì khác. Mã: #include <amxmodx> public plugin_natives() { register_native("NativeName", "CallbackFunc", 1) } public CallbackFunc(id) { client_print(id, print_center, "Wellcome to CS1.6 Mod!") }
PHP: #include <amxmodx>native NativeName(id)public plugin_natives(){ register_native("NativeName", "CallbackFunc", 1)}public CallbackFunc(id){ client_print(id, print_console, "Wellcome to CS1.6 Mod!")}public client_putinserver(id){ NativeName(id)} Khi client kết nối vô server xong thì dòng chữ trên sẽ đc print vào console của client.
Sếp dias cho em bê cái này sang đây nhớ . BÀI 4. MẢNG VÀ STRING (DIAS) http://forum.gamevn.com/showthread....m-che-hoac-gioi-thieu&p=18711905#post18711905