Sếp để Topic sống vài ngày rồi chuyển vào Topic [AMX] Tổng hợp Code, Plug do Mem chế hoặc giới thiệu cũng được ^^ Coding Style Mở đầu Đú theo phong trào hoc amx, hôm nay tí tởn post 1 bài hướng dẫn nhỏ nhỏ :) Mình xin nói luôn là cái hướng dẫn này sẽ không giúp nâng cao trình độ AMX code của bạn đâu + Vậy Coding Style nó là cái gì? - Coding Style hiểu tàm tạm là Phong cách viết code, nghĩa là viết code theo một quy tắc nào đó. + Hic.Học code đã bao thứ, giờ lại thêm cả cái gọi là phong cách viết code, viết code mà cũng phải có phong cách cơ à (ăn chơi nhỉ ) - Đúng là mới đầu nghe thì cũng có vẻ hơi thừa.Nhưng khi bạn tìm hiểu thì sẽ thấy nó thực sự là có ích.Coding Style được áp dụng hầu hết cho các ngôn ngữ lập trình.vì vậy bỏ ra 1 time tìm hiểu về nó cũng không phải là phí phạm Giờ đi vào chủ đề chính nào The Opening Comment Block Cái này tạm hiểu là lời giới thiệu về plugin.Nếu để ý thì các bạn sẽ thấy ở ngay đầu của 1 plugin thì thường có 1 đống comment.Nó có cấu trúc như này [spoil] PHP: /*Copyleft 2011Plugin thread: http://forum.gamevn.com/forumdisplay.php?75-Counter-StrikeTên Plugin========DescriptionĐây là nới viết những thông tin chung về plugin...CommandsNhững command sử dụng trong plugin và tác dụng của chúngVD:say /give_weapon - give weapon to player....CreditsTên những người thực hiện pluginVD:sontung0 - Authorsontung0 - Testing help^^Changelog:Những cập nhật mới cũng như lỗi bug đã sửa Jun 1, 2008 - v1.0 - Initial release Jun 2, 2008 - v1.1 - [FIXED] Some repeated variables [FIXED] Message printing incorrectly duelists <-> players [ADDED] God mode to normal players*/ [/spoil] Và nhiệm vụ của nó là giúp cho người khác khi muốn tim hiểu plugin của bạn thì chỉ cần đọc mục này là sẽ hiểu được Variables Name Cái này tạm hiểu là cách đặt tên biến Cách đặt tên biến thì nên thêm kí tự đại diện cho loại cũng như tính chất của biến vào đầu biến.Đối với tên biến gồm nhiều từ thì chữ cái đầu nên viết hoa Global Variables (Biến toàn cục - tức là các biến sử dụng ở mọi vị trí) Thêm kí tự g_ hc g vào đầu PHP: new gMyVariablenew g_MyOtherVariable Tương tự với dạng khác i - integers/cells f hoặc fl - floats s hoặc st - strings b - bools v - vectors PHP: // a global cellnew g_iKills// a global floatnew Float:g_flSpeed// a stringnew sMyString[]// a boolnew bool:bFlag// a vectorsnew vMyVector[3] Nào bây giờ xem thử tác dụng của em nó xem ntn VD khi bạn nhìn thấy 1 biến là g_iData.Theo những gì bên trên thì biến này sẽ là biến toàn cục (g_) và nó có dạng integer (i), đỡ phải tìm nơi khai báo biến và biết luôn dạng của biến, cũng đại tiện đúng không Use Constants Đối với những hằng số thì bạn nên viết hoa tên biến PHP: #define MAX_ITEMS 10 Không nên viết như này PHP: #define max_items 10 Functions Name Tương tự như Variables Name, Functions Name là cách đặt tên cho các function Public Function (function mà mình đăng kí cho các event, logevent, forward, HamForward, ...) Cách đặt tên là: <Loại>_<Tên> hc <Loại><Tên> PHP: register_event( "HLTV", "EventHLTV", "a", "1=0", "2=0" ) // EventHLTVregister_logevent( "LogEventRoundEnd", 2, "1=Round_End" ) // LogEventRoundEndregister_forward( FM_PlayerPostThink, "ForwardPlayerPostThink" ) // ForwardPlayerPostThinkregister_clcmd( "primammo", "CmdPrimAmmo" ) // CmdPrimAmmoRegisterHam( Ham_Spawn, "player", "HamSpawn", 1 ) // HamSpawn hoặc PHP: register_event( "HLTV", "Event_HLTV", "a", "1=0", "2=0" ) // Event_HLTVregister_logevent( "LogEvent_RoundEnd", 2, "1=Round_End" ) // LogEvent_RoundEndregister_forward( FM_PlayerPostThink, "Forward_PlayerPostThink" ) // Forward_PlayerPostThinkregister_clcmd( "primammo", "Cmd_PrimAmmo" ) // Cmd_PrimAmmoRegisterHam( Ham_Spawn, "player", "Ham_Spawn", 1 ) // Ham_Spawn (cá nhân mình thì thích cách 2 hơn ) Stock Function, Function (chính là các function mà mình tạo) Cách đặt tên là: <công_dụng>_<Tên> hc <công_dụng><Tên> Đối với hàm lấy giá trị thì tiếp đầu ngữ là get Đối với hàm lấy giá trị mà giá trị trả về là Boolean thì tiếp đầu ngữ là: is - nếu theo sau là tính từ has - nếu sau là danh từ can - nếu sau là động từ Đối với các hàm setter (hàm làm thay đổi giá trị của cái gì đó) thì tiếp đầu ngữ là set PHP: getUserName()isUserAlive()hasWeapon()canDropWeapon()setUserHealth() Indentation, Tabbing và Spacing Cái này nghĩa là sử dụng Tab, Spacing trong những câu lệnh để tạo các khoảng rõ ràng trong code Để hiểu rõ thì các bạn xem 2 VD sau: PHP: public some_function(id){new szVariable[10]format(szVariable,9,"hello!!!!")if(id==0){server_print(szVariable)}else{client_print(id,print_chat,szVariable)}return PLUGIN_HANDLED} PHP: public some_function( id ){ new szVariable[10]; format( szVariable, 9, "hello!!!!" ); if ( id == 0 ) { server_print( szVariable ); } else { client_print( id, print_chat, szVariable ); } return PLUGIN_HANDLED;} rõ ràng là với cách thứ 2 thì code khi nhìn vào sẽ dễ nhìn, dễ đọc và dễ chỉnh sửa hơn đúng không. Dưới đây là các cách viết code sử dụng Indentation, Tabbing và Spacing [spoil] PHP: // public functionpublic FunctionName( param1, param2, param3 ){ // code here...}// functionFunctionName( param1, param2, param3 ){ // code here...}// if elseif ( iparam1 == 0 || param2 > 0 || ( param3 - param4 > 0 ) ){ // code here...}else{ // code here...}// forfor ( new i; j < 100; j++ ){ // code here}// switchswitch( variable ){ case 0: { // code here } default: { // code here }}// whilewhile( Function() ){ // code here}// do whiledo{ //this code will be executed at least once, and more until Function() returns false}while( Function() )// arraynew gCosts[MAX_WEAPONS] = { 2750, 300, 3000}new gSounds[SOUNDS][] ={ "items/suitchargeno1.wav", "cstactics/commander_attack.wav", "cstactics/commander_defend.wav"}// enumenum ORDERS{ NONE, ATTACK, DEFEND, EQUIP} [/spoil] Commenting Cuối cùng là phần chú thích cho code (comment) Khi viết code thì các bạn đừng tiếc những dòng comment, comment mọi lúc mọi nơi nếu thấy cần thiết. Những dòng comment đó sẽ giúp ích rất nhiều khi bạn sửa code sau 1 time hoặc giúp những người khác hiểu code của bạn nhanh hơn Trước mỗi function hoặc biến thì nên có những comment ghi rõ tác dụng, tham số và giá trị trả về của nó PHP: /** * Returns a single cell of data from an array. * Use this only with arrays that were created with a cellsize of 1! * * @param which The array to retrieve the item from. * @param item The item to retrieve (zero-based). * @return The value of the cell. */native any:ArrayGetCell(Array:which, item); Lời kết Viết code thì mỗi người một phong cách, một thói quen.Không thể gò bó tất cả mọi người viết code theo một cách nhất định được. Ngay cả mình cũng vậy, không phải khi viết code là mình làm theo tất cả những quy tắc trên Coding Style nhằm hướng cho Coder viết code theo một cách có hệ thống và có tổ chức Và mục đích cuối cùng là giúp cho code khi nhìn vào sẽ Dễ Đọc -> Dễ Hiểu -> Dễ Chỉnh Sửa Tài liệu: http://forums.alliedmods.net/showthread.php?t=6481 http://forums.alliedmods.net/showthread.php?t=85274 Trình độ có hạn, trong bài viết có gì thiếu hay sai sót thì mọi người cứ gạch thoải mái Giờ mới để ý đây là bài viết thứ 1000 của mình, đẹp
Mà chủ yếu là tự người viết đặt ra và theo ý họ thôi (nói cách khác, nếu họ ko muốn public thì việc đặt style của họ cũng cần 1 thời gian mới quen đc) những người mới bắt đầu viết nên đặt sao cho dễ hiểu (lỗi học coder âầu tiên của mình =.='). viết lộn xộn. giờ vào v1.3 đọc chưa chắc đã hiểu đc 1/3 những j mình đã từng viết ~> newbie cứ theo đó cho dễ đã. go pro rồi đặt sao chả đc
Hay lắm, nhưng mình còn một lưu ý là khi thụt đầu dòng k đúng (hay còn gọi là tabbing) thì complier nó sẽ warning luôn, chứ k phải là thế nào cũng đc (đang nói về amx complier ) @Sếp: E nghĩ nên lấy topic này làm topic thảo luận về amx luôn cũng đc (Có thể đổi tên khác), còn topic kia chỉ để trưng bày plugin thôi
Bổ sung thêm list Event của CSsếp hoặc anh Tùng up lên nhécoi như đây là 2pic hỏi đáp ver 2 http://wiki.amxmodx.org/Half-Life_1_Game_Events
Ở trên Off-topic của AM có 1 cái thread trò chơi thư giãn là : Đưa 1 đoạn code ra cho mọi người đoán coding style --> người viết code.. Qua cái coding style này cũng phần nào giúp nhận ra được kiểu viết code của 1 scripter nào đó.... Viết code nhiều dần dần sẽ tự dưng hình thành kiểu style riêng thôi.
AM nó chuyên về viết code r`, coder nó toàn chuyên nghiệp cả, đương nhiên sẽ có 1 style riêng. Còn 4rum mình chỉ toàn coder nghiệp dư(trừ 1 vài người giỏi) thì lấy đâu ra style riêng mà đoán.
Thì ta đã nói là cứ viết nhiều rồi sẽ hình thành style .. Không phải cứ chuyên nghiệp thì mới có style .
Viết nhiều mà toàn viết vớ vẩn chưa chắc đã thành style đâu. Mà thôi, spam sếp lại chém, hỏi anh Tùng cái này: Mấy cái spr thế này thì anh làm sao đưa nó vào đúng vị trí đc nhỉ, theanh bảo k thể đặt tọa độ theo chiều ngang cho spr mà ??
Lấy tọa độ từng cái thì bên Sprite có nói rồi, còn vị trí trên màn hình thì cố định luôn rồi. Có gì qua Sprite hỏi, ở đây dễ ăn thẻ
Nếu là sprites và hud của CSO thì tìm ngay cái hud.txt nguyên của CSO có ghi sẵn cả 4 con số của các spr và hud trong ấy luôn