Jump to content

Search the Community

Showing results for tags 'sa-mp tutorial'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • SA-MP
    • News and updates
    • General
    • Client Support
  • SA-MP Servers
    • Server Support
    • Server Advertisements
  • SA-MP Scripting and Plugins
    • Scripting Help
    • Gamemode Scripts
    • Filterscripts
    • Plugin Development
  • SA-MP Design
    • 3D Model
    • Website
    • Photoshop

Blogs

There are no results to display.

Categories

  • San Andreas Multiplayer Vietnam - Wiki

Categories

  • San Andreas Multiplayer
    • Asi Plugin
  • 3D Models
    • Objects

Product Groups

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About me


Expertise

Found 4 results

  1. Scripting Pawn (SA-MP) với Sublime Text 3 I. THÔNG TIN CHUNG Sublime Text 3 là một trình soạn thảo văn bản có khả năng tùy biến cao với rất nhiều tính năng thú vị thay vì những trình soạn thảo tiêu chuẩn thông dụng cho SA-MP như Pawno hoặc Notepad ++. Tôi biết đã có một loạt các hướng dẫn về điều này, nhưng những bài viết đó không giải thích cách cài đặt rõ ràng, điều này có thể gây nhầm lẫn cho người mới bắt đầu và tôi đã thêm một số hướng dẫn sử dụng chương trình. II. ƯU ĐIỂM Bạn hoàn toàn có thể tùy chỉnh chương trình theo cấu hình mà bạn cảm thấy thoải mái. Việc scripting sẽ nhanh hơn vì tự động hoàn thành và tự động sửa thông minh. Script của bạn sẽ trông gọn gàng hơn rất nhiều với sự thụt lề gọn gàng mà chương trình cung cấp. Rất nhiều phím tắt hữu ích (có thể tùy chỉnh) để viết mã dễ dàng hơn. Chương trình cũng hoạt động cho nhiều ngôn ngữ khác, vì vậy nó có thể được sử dụng làm trình soạn thảo chính của bạn. Sublime Text có sẵn cho Windows, OS X và Linux. III. MỘT SỐ TÍNH NĂNG ĐÁNG CHÚ Ý: a) Auto-completion (Tự động hoàn thành) b) Themes đa dạng IV. CÀI ĐẶT a) Tải về Click vào đây - Để tải về phiên bản mới nhất của Sublime Text 3 b) Cài đặt Pawn-Syntax Sau khi tải về Sublime Text 3, hãy cài đặt nó vào máy của bạn. Mở sublime text lên để tiến hành cài đặt Package Control bằng các phím tắt dưới đây Win/Linux: CTRL + SHIFT + P Mac: CMD + SHIFT + P Gõ vào khung nhập: Install Package Control Và bấm Enter, chương trình sẽ tự động cài đặt Package Control cho bạn để tiến hành bước tiếp theo. Mở Package Control Ấn Preferences > Package Control và chọn Install Package và chờ xuất hiện cửa sổ Package Control rồi lựa chọn Install Package Gõ Pawn vào thanh tìm kiếm và lựa chọn Pawn-Syntax, chương trình sẽ tự động cài đặt Pawn Syntax cho bạn trong đó bao gồm cả Build Engine của Sublime Text luôn nhé. Bây giờ bạn có thể thay đổi Synxtax của Sublime Text thành PAWN ở góc dưới bên phải hoặc View > Synxtax > Pawn. Sau khi hoàn tất các bước trên, bạn có thể bắt đầu viết SendClientMessage để xem liệu chương trình có tự động hoàn thành functon không. Nếu không, bạn đã thực hiện các bước trên không thành công và cần phải thử lại. c) Cài đặt trình biên dịch (Compiler) Hãy lựa chọn Preferences > Package Settings > Pawn Compiler Settings > Edit Build Settings (Pawn.sublime-build) Và dán vào đoạn mã sau { "cmd": ["pawncc.exe", "-i includes", "$file", "-;+"], "path": "Đường_dẫn_thư_mục_pawno" } Bạn thay đoạn "Đường_dẫn_thư_mục_pawno" thành đường dẫn tới thư mục Pawno của bạn. Ví dụ: { "cmd": ["pawncc.exe", "-i includes", "$file", "-;+"], "path": "C:/Users/Abyss/Desktop/GvC/pawno" } và ấn Ctrl + S để lưu lại file là bạn đã hoàn tất bước thiết lập Engine biên dịch cho Sublime Text 3 rồi nhé. Hãy thử mở 1 gamemode hoặc 1 filterscripts lên và ấn F5 hoặc CTRL + B để Compiler thử xem sao nhé, nếu như đường dẫn được thiết lập đúng hệ thống sẽ biên dịch script của bạn ngay. V. HƯỚNG DẪN SỬ DỤNG a) Làm cách nào để thay đổi nút biên dịch? Chuyển đến Preferences > Key Bindings Tìm kiếm bản dựng bằng Ctrl + F Bạn có thể thay thế khóa hiện tại bằng một cái gì đó mới (ví dụ: F5) Bạn sẽ thấy một cái gì đó như thế này: Code: { "keys": ["ctrl+b"], "command": "build" }, Ấn CTRL + S để lưu lại tệp Key Blindings là bạn có thể sử dụng phím tắt mới được thiết lập của mình rồi nhé! b) Làm sao để thay đổi màu sắc hiển thị của các function? Lựa chọn Preferences > Color Scheme Và thử các gói màu sắc hiện có trong themes hiện tại. Chưa thỏa mãn? Hãy tới câu hỏi tiếp theo... c) Làm sao để có thêm các gói màu sắc hay thay đổi Themes của Sublime Text 3? Lựa chọn Preferences > Package Control và chọn Install Package Bạn có thể tìm kiếm các Themes của Sublime Text trong khung tìm kiếm.
  2. Hôm qua chúng ta đã cùng tìm hiểu const, enum với bài học số 1 về Initialisers Code, chúng hơi khó hiểu có đúng không ^^. Với bài học hôm nay chúng ta sẽ cùng nghiên cứu 2 mã khởi tạo mà bạn sẽ luôn thấy chúng trong toàn bộ các gamemode, chúng thông dụng gần như các plain function đó. Đúng vậy, hôm nay chúng ta sẽ nghiên cứu về forward và public. Hãy cùng tìm hiểu lý do vì sao trong pawn, chỉ có public function mới có thể gọi từ bên ngoài script hay tại sao phải khai báo forward trước một public function nhé. Menu bài viết về Initialisers Code Bài 1 - const, enum Bài 2 - forward, public I. FORWARD Khi sử dụng mã khởi tạo forward, trình biên dịch sẽ hiểu đây là một function sẽ được gọi tới sau. Nó được yêu cầu bắt buộc cho tất cả các public function tuy nhiên chúng ta vẫn có thể sử dụng chúng trong nhiều nơi khác. Nó được sử dụng để "forward" (chuyển tiếp) với đầy đủ các tham số của function mà bạn muốn chuyển tiếp và kết thúc bằng dấu chấm phẩy.[Hidden Content]Khi nó được sử dụng với public funcion, forward có thể sử dụng để sửa các cảnh báo hiếm gặp như sử dụng một function trả về một tag kết quả (ví dụ: float) trước khi nó được khai báo. main() { new Float:myVar = MyFloatFunction(); } Float:MyFloatFunction() { return 5.0; } [/hide]Với đoạn script trên, trình biên dịch sẽ hiển thị cảnh báo rõ ràng bởi vì nó không biết làm sẽ phải trả về là số hay số thập phân. Trong ví dụ này, nó trả về dưới dạng float. Điều này có thể được giải quyết bằng cách khai báo hàm trước khi sử dụng.[Hidden Content]Hoặc bằng cách sử dụng forward trước hàm để trình biên dịch biết phải làm gì:[Hidden Content] Cách gọi một public function theo tên:[Hidden Content]public function với tiền tố 'public' hoặc '@' đều phải thiết lập chuyển tiếp 'forward' như đã nói ở mục 'forward' phía trên.[Hidden Content]Với ví dụ trên, Hàm SetTimerEx đã được sử dụng để gọi "MyOtherPublicFunction" sau 5 giây và truyền giá trị nguyên 7 để 'printf'. Hàm main được sử dụng nhiều trong các ví dụ như thế này, nó tương tự như một public function ở chỗ nó có thể gọi từ bên ngoài tập lệnh, tuy nhiên nó không phải là một public function, nó có một địa chỉ đặc biệt để server nhận biết nơi để gọi chúng trong tệp amx. Tất cả SA-MP Callbacks đều là public function và được gọi từ bên ngoài tập lệnh một cách tự động:[Hidden Content][Hidden Content] forward MyPublicFunc(); main() { MyPublicFunc(); } public MyPublicFunc() { printf("Hello"); } Nó nhanh hơn nhiều so với việc sử dụng CallLocalFunction hoặc native.
  3. Chắc hẳn các bạn đều đã nhìn thấy các đoạn mã stock, public, forward v.v. ở phía trước một hàm custom mà các scripter viết rồi đúng không? Vậy chúng là gì? Công dụng của chúng như thế nào? Cách sử dụng chúng ra làm sao? Tôi sẽ giải đáp các thắc mắc đó của bạn trong bài viết này. Menu bài viết về Initialisers Code Bài 1 - const, enum Bài 2 - forward, public I. CÁC LOẠI MÃ KHỞI TẠO Như các bạn đã biết, mã nguồn dùng để viết SA-MP được dựa trên Pawn - An Embed Scripting Language (mã kịch bản nhúng). Các mã khởi tạo trong SA-MP cũng tương đồng với nó. Chúng ta có thể liệt kê ra đây danh sách các mã khởi tạo như: const enum forward native new operator public static stock Mỗi mã khởi tạo lại có một ý nghĩa và công dụng khác nhau, tuy rằng gần như tất cả đều có thể gọi ra bằng cách thông thường. Hãy cùng tìm hiểu chi tiết từng đoạn mã khởi tạo nhé. II. CONST const không được sử dụng nhiều trong script tuy nhiên nó sẽ khai báo một biến không thể sửa đổi bằng mã, tức không thể thay đổi giá trị của chúng sau khi được xác định. Có một vài cách sử dụng cho mã khởi tạo này là với các biến với dạng chuỗi, mảng const đôi khi có thể được biên dịch (compiler) hiệu quả hơn hoặc với 1 số define dạng chuỗi (array). [Hidden Content]III. ENUM [Hidden Content]Nhìn chuyên nghiệp hơn rất nhiều phải không nào? Điều này cũng sẽ tiết kiệm các biến global của bạn làm giảm nhẹ quá trình biên dịch cho gamemode của bạn sẽ nhẹ hơn đi rất nhiều mà đơn giản, rút gọn các bước thiết lập để sử dụng một cách tối ưu.
  4. Hack là vấn đề nan giải đối với SA-MP, do có quá nhiều bản mod có thể can thiệp sâu vào hệ thống của trò chơi khiến cho việc tạo nên 1 hệ thống bắt hack thật sự rất khó khăn. Đặc biệt là với những máy chủ mới với những scripter thiếu kinh nghiệm thì việc xử lý hack/cheat như là điều không tưởng mà phải phụ thuộc vào những hệ thống được tạo lập sẵn trên các diễn đàn SA-MP ở nước ngoài với hàng loạt những thiết lập mà có thể bạn còn không hiểu nổi. Vì vậy, tôi quyết định viết lên một series bài viết "TẠO DỰNG HỆ THỐNG SA-MP ANTI HACK" để hướng dẫn các bạn cách để tạo nên một hệ thống Anti Cheat có thể xử lý được hack thường thấy ở các máy chủ tại Việt Nam. I. Cách nhìn nhận vấn đề và xây dựng hệ thống Khi bạn gặp 1 người chơi sử dụng hack, hãy vận dụng đầu óc và kinh nghiệm của mình để phân tích chúng, các loại hack thường gặp hiện nay ta có thể liệt kê ra như: Health/Armour Hack Rapid fire Invisible Hack Infinite Run Stamina (Chạy không mệt) Teleport Hack Weapon Hack Money Hack v.v. Chúng ta cần phải có một mindset (tư duy) nhìn nhận vấn đề một cách rõ ràng và tự đặt vấn đề cho bản thân là cái tệp hack này nó hoạt động như thế nào? Tạm bỏ qua việc bạn tìm hiểu nó can thiệp vào sources game ra sao, hãy nhìn nhận vấn đề đúng trọng tâm và đơn giản. Đừng phức tạp hóa vấn đề lên bởi ngay cả chính tôi, người viết bài này cũng chưa thoát được khỏi vòng luẩn quẩn của việc phức tạp hóa vấn đề quá mức cần thiết. Nếu bạn gặp Health/Armour Hack, hãy đặt vấn đề ra một cách đơn giản: "À, cheater tăng được máu, tăng được giáp, tiền mà mình không thể phát hiện ra hình như do mình chưa có đồng bộ chúng" sau khi đã đặt vấn đề xong, chúng ta đã đi được 80% quãng đường rồi, bởi khi đặt được vấn đề, chúng ta bắt đầu sử dụng tư duy logic của mình để thiết lập nên cách khắc phục vấn đề. II. Giải thích [Hidden Content] III. Xử lý vấn đề a) Thiết lập Server-side function Hãy tạo cho mình một giá trị global để lưu trữ Health/Armour, chúng sẽ được thiết lập giá trị mỗi khi hàm thiết lập máu giáp của bạn được gọi trong máy chủ để lưu trữ giá trị Health/Armour của nhân vật. new Float:Player_Health[MAX_PLAYERS]; // Đặt ở bất kỳ đâu trong gamemode trước khi define stock SV_SetPlayyerHealth stock SV_SetPlayerHealth(playerrid, Float:health) { Player_Health[playerid] = health; SetPlayerHealth(playerid, health); } và thay thế toàn bộ hàm SetPlayerHealth thành SV_SetPlayerHealth trong gamemode của bạn để hoàn tất việc thiết lập server-side function. Sau khi lưu trữ được thông tin Health/Armour, ta sẽ tiến hành đối chiếu chúng nếu như có sự thay đổi về Health/Armour của nhân vật, cách để d đối chiếu thì ta dùng một vòng lặp sự kiện bằng SetTimer/SetTimerEx hoặc OnPlayerUpdate. Ở đây là Health/Armour, ta nên dùng OnPlayerUpdate thay vì SetTimer/SetTimerEx bởi tốc độ xử lý của chúng, tuy nhiên, không nên đặt các đoạn script xử lý các tác vụ nặng trong OnPlayerUpdate bởi nó gọi 30 lần/1s, điều này sẽ khiến máy chủ của bạn bị chậm đi. public OnPlayerUpdate(playerid) { new Float:health; // Tạo biến local để lưu trữ thông tin Health sau khi lấy GetPlayerHealth(playerid, health); // Lấy thông tin Health if(health < Player_Health[playerid]) Player_Health[playerid] = health; else SetPlayerHealth(playerid, Player_Health[playerid]); } a) Giải thích 1: if(health < Player_Health[playerid]) Player_Health[playerid] = health; [Hidden Content] b) Giải thích 2: else SetPlayerHealth(playerid, Player_Health[playerid]); [Hidden Content] Bạn cũng có thể sử dụng script trên để áp dụng với Armour/Money Hack bằng việc thay đổi hàm xử lý bên trong chúng IV. Kết Với bài học ngày hôm nay, tôi đã hướng dẫn các bạn những bước cơ bản ban đầu và quan trọng nhất đối với việc xử lý hack/cheat. Các vấn đề này thực tế rất đơn giản, chỉ cần chúng ta chịu khó sử dụng phương pháp "Thử và sai" ta sẽ tìm ra được cách giải quyết tối ưu nhất. Để bài học đạt được hiệu quả tốt nhất, tôi sẽ đưa cho các bạn 1 vấn đề nhỏ: Tạo ra hệ thống Anti Health Hack nhưng vẫn cho phép sử dụng các bình Sprunk trong game để hồi máu Các bạn hãy vận dụng những kiến thức tôi đã chia sẻ phía trên để thực hiện và comment chúng ở phía dưới bài viết để cùng thảo luận xem script của bạn đã đúng hay chưa nhé.
×
×
  • Create New...